⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlanguage.cpp

📁 a useful spiking neural networks simulator
💻 CPP
📖 第 1 页 / 共 2 页
字号:
						nmap[s] = neuinfo(layername, i, &inhibitor);					else if( layername == "input_layer" )						nmap[s] = neuinfo(layername, i, (neuin[i % neuin.size()]));					else if( layername == "output_layer" )						nmap[s] = neuinfo(layername, i, (neuout[i % neuout.size()]));					else if( layername == "hidden_layer" )					{						ostringstream oss; oss << i;						tneuron *neu = new tneuron((synch ? "shidden(" : "dhidden(") + oss.str() + ")", 							synch ? sgate_sig_hv_period : dgate_sig_hv_period, 							synch ? sgate_thr_hv_period : dgate_thr_hv_period, 							a1_offset, a1_offset+(synch ? sgate_hidden_thr_raise : dgate_hidden_thr_raise) );						nmap[s] = neuinfo(layername, i, neu);						neuhid.push_back(neu);					}					else					{						cout << "Unknown layer name " << layername << endl;						abort();					}				}				ifs >> s;			}			else if( s == "connection" )			{				string dstname;				int nconn;				ifs >> dstname >> nconn;				if( nmap.find(dstname) == nmap.end() ) { cout << "unknown neuron " << dstname << endl; abort();}				if( debug_readfile ) cout << "connection " << nconn << endl;				tneuron_base *dest = nmap[dstname].ref;				for( int i=0; i<nconn; i++ )				{					string srcname;					real weight;					int idelay;					ifs >> srcname >> weight >> idelay;					if( nmap.find(srcname)== nmap.end()  ) { cout << "unknown neuron " << srcname << endl; abort();}					tneuron_base *src = nmap[srcname].ref;					weight *= weight_scale;					if( nmap[srcname].layername == "a1_layer" ) 					{						tsynapse *p1, *p2, *p3 = NULL;						real delay = delay1 - inhibitor_delay;						if( nmap[dstname].layername == "hidden_layer" )							delay += -hidden_offset;						weight += a1_offset;						real inhibitor_fix = 0.0;						if( ! synch )						{							weight -= a1_offset;							incoindet.addSynapse(p3 = new tsynapse(*dest, delay - 0.00002 - incoindet_delay - coindet_offset, ((weight < 0 ? weight : 0) - inhibitor_suppress_weight)) );//							inhibitor.addSynapse(p3 = new tsynapse(*dest, delay + 0.003 - 0.00001 - incoindet_delay , 0.3)) ;//							inhibitor.addSynapse(p2 = new tsynapse(*dest, delay + coindet_duration_period, 1.0 ));							inhibitor_fix = ((weight < 0 ? weight : 0) - inhibitor_suppress_weight) * pow(decay_level, (delayed_gate_gap + coindet_offset) / coindet_duration_period );//							cout << nmap[dstname].layername << "(" << nmap[dstname].nneuron << ") weight=" << weight << ", level=" << decay_level << ", pow=" << pow(decay_level, (delayed_gate_gap + coindet_offset) / coindet_duration_period ) << ", fix=" << inhibitor_fix << endl;							weight += a1_offset;						}						coindet.addSynapse(p1 = new tsynapse(*dest, 								delay + (! synch ? -coindet_duration_period : - 0.00001), 								((weight < 0 ? weight : 0) - coindet_suppress_weight)/sqrt(decay_level)));						coindet.addSynapse(p2 = new tsynapse(*dest, 								delay, 								((weight > 0 ? weight : 0) + coindet_suppress_weight)*sqrt(decay_level) - inhibitor_fix - (!synch ? delay_weight_decrease : synch_weight_decrease)));//						if( nmap[dstname].layername == "output_layer" && //						(   nmap[dstname].nneuron == str_to_wordid["the"] || nmap[dstname].nneuron == NWORDS + pos_det //						 || nmap[dstname].nneuron == str_to_wordid["girl"] || nmap[dstname].nneuron == NWORDS + pos_n ))//						 {//						 	cout << "debug synapse " << nmap[srcname].nneuron << " -> " << nmap[dstname].nneuron << endl;//							p1->setDeb(true);//							p2->setDeb(true);//							if( p3 )//								p3->setDeb(true);//						 }					}					else					{						real delay = (nmap[srcname].layername == "input_layer" && nmap[srcname].nneuron >= neuin.size()) ? delay1 + delay_input_gap : delay1;						if( nmap[srcname].layername == "hidden_layer" )							delay = hidden_offset;						else if( nmap[dstname].layername == "hidden_layer" )							delay -= hidden_offset;						tsynapse *p;						if( weight < 0.0 )						{							delay -= synch ? synch_minus_preceding : delay_minus_preceding;							if( !synch )								weight /= pow(decay_level, delay_minus_preceding / coindet_duration_period );						}						src->addSynapse(p = new tsynapse(*dest, delay - (! synch ? coindet_offset : 0), weight));//						if( nmap[dstname].nneuron == str_to_wordid["the"] || nmap[dstname].nneuron == NWORDS + pos_det //						 || nmap[dstname].nneuron == str_to_wordid["girl"] || nmap[dstname].nneuron == NWORDS + pos_n )//						 {//						 	cout << "debug synapse " << nmap[srcname].nneuron << " -> " << nmap[dstname].nneuron << endl;//							p->setDeb(true);//						 }					}				}				ifs >> s;			}			else				break;		}	}}int main(int argc, char **argv){	cout << "Punnets language simulation program  (c) 2003 Makino Takaki." << endl;	cout << "Punnets is free software, covered by the GNU General Public License." << endl;	cout << endl;	const char *datafilename = "lang.dat";	const char *plotfilename = "lang.plt";	const unsigned int nexts = NWORDS + NELEMS;	vector<tneuron_ext *> exts(nexts);	vector<tneuron *> hidden;	vector<tneuron *> sgates(nexts);	vector<tneuron *> dgates(nexts);	tneuron inhibitor("inhibitor", 0.0005, 0.0005, 1.0, 128.0);	tneuron coindet("coindet", 0.003, 0.05, 1.0, 5.0);	tneuron incoindet("incoindet", 0.003, 0.003, 1.0, 2.0);	inhibitor.addSynapse(new tsynapse(coindet, inhibitor_delay, 0.67));	inhibitor.addSynapse(new tsynapse(coindet, inhibitor_delay + delayed_gate_gap, 0.67));	inhibitor.addSynapse(new tsynapse(incoindet, incoindet_delay, 1.2));	inhibitor.addSynapse(new tsynapse(incoindet, incoindet_delay + delayed_gate_gap, 1.2));	coindet.addSynapse(new tsynapse(incoindet, incoindet_delay - inhibitor_delay - 0.0015, -4));	for( unsigned int i=0; i<NWORDS; i++ )		str_to_wordid[ words[i].word ] = i;		tscheduler scheduler;	ofstream ofs(datafilename);	cout << "Produce simulation log file '" << datafilename << "'." << endl;	tlogger logger(ofs, 0.001, 0.01, test_until);//	tlogger logger(ofs, 0.00001, 0.609,0.621);	for( unsigned int i=0; i<nexts; i++ )	{		ostringstream oss;		exts[i] = new tneuron_ext("repre'" + (i < NWORDS ? words[i].word : posstrs[i-NWORDS]) + "'", 0.0045);		sgates[i] = new tneuron("sgate'" + (i < NWORDS ? words[i].word : posstrs[i-NWORDS]) + "'", 				sgate_sig_hv_period, sgate_thr_hv_period, a1_offset, a1_offset+64 );		dgates[i] = new tneuron("dgate'" + (i < NWORDS ? words[i].word : posstrs[i-NWORDS]) + "'", 				dgate_sig_hv_period, dgate_thr_hv_period, a1_offset, a1_offset+64 );//if(! test_applier) {//		exts[i]->addExt(new func_const(-1.3));//		exts[i]->addExt(new func_sine(1.0 /* width */, 8 * 2*M_PI /* angle velo */, 0.0 /* phase */ ));//		exts[i]->addExt(new func_sineshot_int(1 /* width */, 1.6 * 2*M_PI /* angle velo */ ));//		inhibitor.addSynapse(new tsynapse_addfunc(*exts[i], 0.0001, new func_sineshot(-0.7, (1/0.027) * 2*M_PI, -1.0), -0.8));//}		exts[i]->addExt(new func_const(-1.4));if( ! test_applier ) {		exts[i]->addExt(new func_sine(1.0 /* width */, 8 * 2*M_PI /* angle velo */, 0.0 /* phase */ ));		exts[i]->addExt(new func_sineshot_int(1.27 /* width */, 1.59 * 2*M_PI /* angle velo */ ));		inhibitor.addSynapse(new tsynapse_addfunc(*exts[i], 0.0001, new func_sineshot(-0.7, (1/0.021) * 2*M_PI, -1.0), new func_sineshot::message_set_t0, -0.25));}		exts[i]->addSynapse(new tsynapse(inhibitor, inhibitor_delay, 1.5));		exts[i]->addSynapse(new tsynapse(*exts[i], inhibitor_delay, -4.0));		exts[i]->setLoopBack(scheduler, 0.0);if( ! test_applier ) {		sgates[i]->addSynapse(new tsynapse(*exts[i], gates_delay, 4.0));		dgates[i]->addSynapse(new tsynapse(*exts[i], gates_delay, 5.5));}		if( 			i == str_to_wordid["the"] || i == NWORDS + pos_det 		||  i == str_to_wordid["Mary"] || i == NWORDS + pos_pn3		||  i == str_to_wordid["girl"] || i == NWORDS + pos_n		||  i == str_to_wordid["loves"] || i == NWORDS + pos_vt		||  i == str_to_wordid["(lover)"] || i == NWORDS + pos_vt_subj		 	)		{			real off =			           (i == str_to_wordid["Mary"] || i == NWORDS + pos_pn3) ? 40 : 			           (i == str_to_wordid["(lover)"] || i == NWORDS + pos_vt_subj) ? 30 : 			           (i == str_to_wordid["loves"] || i == NWORDS + pos_vt) ? 20 : 			           (i == str_to_wordid["the"] || i == NWORDS + pos_det) ? 10 : 0;			off += (i >= NWORDS) ? 4 : 0;			logger.add(*exts[i], 0, false, false, off * 3.5 / 5);			// logger.add(*sgates[i], 0, false, false, off);				// logger.add(*dgates[i], 0, false, false, 1.0 + off);//			exts[i]->setDeb(true);//			sgates[i]->setDeb(true);//			dgates[i]->setDeb(true);		}	}//	logger.add( inhibitor, 0, false, false, -8.0 );	read_file(exts, hidden, sgates, inhibitor, inhibitor, "synch.dat", synchro_gate_delay, 0.0             , 		1.0 , synchro_hidden_offset, true);	read_file(exts, hidden, dgates, incoindet, coindet  , "delay.dat", delayed_gate_delay, delayed_gate_gap, 		exp(-(M_LN2 / dgate_sig_hv_period)*(coindet_duration_period)) , delayed_hidden_offset, false );	ofstream ofs2(plotfilename);	cout << "Produce GNUPLOT plotting file '" << plotfilename << "'." << endl;	logger.gnuplot_def(ofs2, datafilename);	logger.schedule(scheduler);	scheduler.scheduleEvent( 0.61, makePulse( * exts[ str_to_wordid[ "Mary" ] ], 5.0 ) );	scheduler.scheduleEvent( 0.975, makePulse( * exts[ str_to_wordid[ "loves" ] ], 5.0 ) );	scheduler.scheduleEvent( 1.725, makePulse( * exts[ str_to_wordid[ "the" ] ], 5.0 ) );	scheduler.scheduleEvent( 2.225, makePulse( * exts[ str_to_wordid[ "girl" ] ], 5.0 ) );	scheduler.run(test_until);	cout << "Simulation finished." << endl;	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -