neurali:nemo_appunti_c
Appunti su Nemo
Esempio da capire e commentare (tratto dai sorgenti di NeMo)
/* Simple network with 1000 neurons with all-to-all connections with random * weights. * Author: Andreas K. Fidjeland <andreas.fidjeland@imperial.ac.uk> * Date: April 2010 */ #include <vector> #include <string> #include <iostream> #include <fstream> #include <boost/program_options.hpp> #include <boost/scoped_ptr.hpp> #include <examples/common.hpp> #include <nemo/Timer.hpp> #include <boost/random.hpp> #include <nemo.hpp> typedef boost::mt19937 rng_t; typedef boost::variate_generator<rng_t&, boost::uniform_real<double> > urng_t; typedef boost::variate_generator<rng_t&, boost::uniform_int<> > uirng_t; /*....................*/ nemo::Network* construct(unsigned ncount, unsigned scount, unsigned dmax, bool stdp) { rng_t rng; /* Neuron parameters and weights are partially randomised */ urng_t randomParameter(rng, boost::uniform_real<double>(0, 1)); uirng_t randomTarget(rng, boost::uniform_int<>(0, ncount-1)); uirng_t randomDelay(rng, boost::uniform_int<>(1, dmax)); nemo::Network* net = new nemo::Network(); for(unsigned nidx=0; nidx < ncount; ++nidx) { if(nidx < (ncount * 4) / 5) { // excitatory addExcitatoryNeuron(net, nidx, randomParameter); for(unsigned s = 0; s < scount; ++s) { net->addSynapse(nidx, randomTarget(), randomDelay(), 0.5f * float(randomParameter()), false); } } else { // inhibitory addInhibitoryNeuron(net, nidx, randomParameter); for(unsigned s = 0; s < scount; ++s) { net->addSynapse(nidx, randomTarget(), 1U, float(-randomParameter()), 0); } } } return net; }
quali include ?
nemo/util.h nemo/config.h nemo.hpp boost/program_options.hpp boost/random.hpp boost/scoped_ptr.hpp
classi (in minuscolo!) boost da studiare
boost:program_options.options_desciption boost:program_options.variables_map boost:program_options.store boost:program_options.parse_command_line boost:program_options.notify
funzioni boost da studiare
boost::uniform_real<·>(·) boost::variate_generator<·,·> boost::bernoulli_distribution...
Funzioni di esempio (utilizzabili?)
addExcitatoryNeuron addInhibitoryNeuron simulate vmap processOptions random::nemo::Network * construct ()
NOTA: I tempi Delay di una sinapsi potrebbero essere un altro modo per tenere conto delle distanze fisiche tra neuroni.
Funzioni da approfondire
simulazione.resetTimer() simulazione.step() che restituisce un vector contenente i neuroni che si sono attivati simulazione.applyStdp() simulazione.elapsedWallclock() simulazione.getMembranePotential() configurazione.setStdpFunction() configurazione.setWriteOnlySynapses() configurazione.enableLogging() configurazione.setSpuBackend()
neurali/nemo_appunti_c.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1