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

📄 test1-natural.cpp

📁 neural network 一个演示原理的代码
💻 CPP
字号:
#include "stdafx.h"#include "aine.h"#include "ne-neuron.h"#include "ne-data.h"using namespace aine;extern ofstream tron;namespace Natural{	int TestAdjust( const string )	{		Neuron N[10];		//	Create a very simple neural network net... we have only connection to dendrites.		//	All threshold values are 1		//	All dendrite learning ratios are 1		for( int i = 0 ; i < 4 ; i++ )			for( int j = 0 ; j < 3 ; j++ )			{				N[i].ConnectWith( &N[4 + j] );				for( int k = 0 ; k < 3 ; k++ )					N[4 + j].ConnectWith( &N[7 + k] );			}		IOListData data1;		//										INPUT		   |     OUTPUT		//								  I1    I2    I3    I4 |  O1    O2    O3		data1.push_back( IOData( 4 , 3 , 1.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0 , 0.0 ) );		data1.push_back( IOData( 4 , 3 , 0.0 , 1.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0 ) );		data1.push_back( IOData( 4 , 3 , 1.0 , 0.0 , 1.0 , 0.0 , 0.0 , 1.0 , 0.0 ) );		data1.push_back( IOData( 4 , 3 , 0.0 , 0.0 , 0.0 , 1.0 , 1.0 , 0.0 , 0.0 ) );		bool POK = true;		const double Epsilon = 0.2;		int	cnt = 0;		for( vector<IOData>::iterator it = data1.begin() ; it != data1.end() ; )		{			for( int i = 0 ; i < (int)it->input.size() ; i++ )				N[i].SetInputValue( it->input[i] );			for( int i = 0 ; i < (int)it->input.size() ; i++ )				N[i].Depolarization();			bool IOOK = false;						while( !IOOK )			{				IOOK = true;				for( int i = 0 ; i < (int)it->output.size() ; i++ )				{					const double v1 = it->output[i];					const double v2 = N[4 + i].GetResult();					if( fabs( v1 - v2 ) > Epsilon )					{						N[4 + i].Adjust( it->output[i] );						IOOK = false;					}				}				cout << ++cnt << ") " << POK << endl;			}			for( int i = 0 ; i < 10 ; i++ )				N[i].Refractory();			if( !IOOK )				it = data1.begin();			else				++it;		}		tron << endl << "after a small adjustment on " << cnt << " turns";		for( int i = 0 ; i < 7 ; i++ )			N[i].Trace( &tron );		tron << endl << "TEST all IO data just for sure..." << endl;		for( vector<IOData>::iterator it = data1.begin() ; it != data1.end() ; ++it )		{			tron << "INPUT: ";			SaveEach( it->input.begin() , it->input.end() , ostream_iterator<double>( tron , " " ) );			for( int i = 0 ; i < (int)it->input.size() ; i++ )				N[i].SetInputValue( it->input[i] );			for( int i = 0 ; i < (int)it->input.size() ; i++ )				N[i].Depolarization();			tron << endl << "    OUTPUT: " << endl;			for( int i = 0 ; i < (int)it->output.size() ; i++ )				tron << "\t( " << N[4 + i].GetResult() << " ) " << string( N[4 +i].ActionPotential() ? " T " : " F " ) << " [" << it->output[i] << "] , ";			tron << endl;			for( int i = 0 ; i < 10 ; i++ )				N[i].Refractory();		}		return 0;	}	int TestInverse( const string )	{		Neuron in;		Neuron inv;		in.ConnectTo( &inv );				cout << "Tracing NOT:" << endl;		tron << "Tracing NOT:" << endl;		for( int i = 0 ; i < 40 ; i++ )		{			inv.SetInputValue( 1.0 );			const double v = (double)((int)Random( 0 , 2 , true ) == 0 ? 0.0 : 1.0);			in.SetInputValue( v );			in.Depolarization();			cout << i << ") " << " NOT " << v << " ---> " << (int)(inv.ActionPotential() ? 1 : 0) << endl;			tron << i << ") " << " NOT " << v << " ---> " << (int)(inv.ActionPotential() ? 1 : 0);			if( inv.ActionPotential() )				if( v == 1.0 )					tron << " **** ERROR *** ";			tron << endl;		}		return 0;	}	int EORTest( const string )	{		cout << "create a sample meural Process of EOR Natural method" << endl;		tron << "create a sample meural Process of EOR Natural method" << endl;		double in[4][2] =		{	{	0.0 , 0.0	} ,			{	1.0 , 0.0	} ,			{	0.0 , 1.0	} ,			{	1.0 , 1.0	} 		};		Neuron n1 , n2 , inv , kn;		n1.ConnectWith( &n2 );		SynapticKnob *sk = n2.ConnectTo( &inv );		kn.SetInputValue( 1.0 );		kn.ConnectTo( sk );		kn.ConnectWith( &kn );		cout << "Tracing EOR:" << endl;		tron << "Tracing EOR:" << endl;		for( int i = 0 ; i < 4 ; i++ )		{			const int at = i >= 4 ? (int)Random( 0 , 4 , true ) : i;			n1.SetInputValue( in[at][0] );			n2.SetInputValue( in[at][1] );			cout << i << ") " << in[at][0]  << " EOR " << in[at][1] << " : " ;			tron << i << ") " << in[at][0]  << " EOR " << in[at][1] << " : " ;			n1.Depolarization();			inv.SetInputValue( 1.0 );			tron << " --> " << " (n2 = " << n2.GetResult() <<" ) --> ";			n2.Depolarization();			cout << (int)(inv.ActionPotential() ? 1 : 0) << endl;			tron << (int)(inv.ActionPotential() ? 1 : 0);			if( inv.ActionPotential() )				if( in[at][0] == in[at][1] ) 					tron << " **** ERROR *** ";			tron << endl;		}		return 0;	}	int BoolTest( const string )	{		cout << "create a sample meural Process of boolean operators with less neurons and flexible threshold" << endl;		tron << "\n\ncreate a sample meural Process of boolean operators with less neurons and flexible threshold" << endl;		Neuron	n1 , n2 , thv;		double in[4][2] =		{	{	0.0 , 0.0	} ,			{	1.0 , 0.0	} ,			{	0.0 , 1.0	} ,			{	1.0 , 1.0	} 		};		n1.ConnectWith( &n2 );//		n2.ConnectWith( &n2 );		thv.ConnectTo( &n2 );		thv.ConnectWith( &thv );		cout << "Tracing OR:" << endl;		tron << "Tracing OR:" << endl;		for( int i = 0 ; i < 40 ; i++ )		{			thv.SetInputValue( 0 );			thv.Depolarization();			const int at = i >= 4 ? (int)Random( 0 , 4 , true ) : i;			n1.SetInputValue( in[at][0] );			n2.SetInputValue( in[at][1] );			n1.Depolarization();			cout << i << ") " << in[at][0]  << " OR " << in[at][1] << " ---> " << (int)(n2.ActionPotential() ? 1 : 0) << endl;			tron << i << ") " << in[at][0]  << " OR " << in[at][1] << " ---> " << (int)(n2.ActionPotential() ? 1 : 0);			if( n2.ActionPotential() )				if( !(in[at][0] || in[at][1]) )					tron << " **** ERROR *** ";			tron << endl;		}		cout << endl;		tron << endl;		cout << "Tracing AND:" << endl;		tron << "Tracing AND:" << endl;		for( int i = 0 ; i < 40 ; i++ )		{			thv.SetInputValue( 1.0 );			thv.Depolarization();			const int at = i >= 4 ? (int)Random( 0 , 4 , true ) : i;			n1.SetInputValue( in[at][0] );			n2.SetInputValue( in[at][1] );			n1.Depolarization();			cout << i << ") " << in[at][0]  << " AND " << in[at][1] << " ---> " << (int)(n2.ActionPotential() ? 1 : 0) << endl;			tron << i << ") " << in[at][0]  << " AND " << in[at][1] << " ---> " << (int)(n2.ActionPotential() ? 1 : 0);			if( n2.ActionPotential() )				if( !(in[at][0] && in[at][1]) )					tron << " **** ERROR *** ";			tron << endl;		}		cout << endl;		tron << endl;		Neuron inv;		n2.ConnectTo( &inv );		cout << "Tracing NOR:" << endl;		tron << "Tracing NOR:" << endl;		for( int i = 0 ; i < 40 ; i++ )		{			thv.SetInputValue( 0 );			thv.Depolarization();			const int at = i >= 4 ? (int)Random( 0 , 4 , true ) : i;			n1.SetInputValue( in[at][0] );			n2.SetInputValue( in[at][1] );			n1.Depolarization();			inv.SetInputValue( 1.0 );			n2.Depolarization();			cout << i << ") " << in[at][0]  << " NOR " << in[at][1] << " ---> " << (int)(inv.ActionPotential() ? 1 : 0) << endl;			tron << i << ") " << in[at][0]  << " NOR " << in[at][1] << " ---> " << (int)(inv.ActionPotential() ? 1 : 0);			if( inv.ActionPotential() )				if( in[at][0] || in[at][1] )					tron << " **** ERROR *** ";			tron << endl;					}		cout << endl;		tron << endl;		cout << "Tracing NAND:" << endl;		tron << "Tracing NAND:" << endl;		for( int i = 0 ; i < 40 ; i++ )		{			thv.SetInputValue( 1.0 );			thv.Depolarization();			const int at = i >= 4 ? (int)Random( 0 , 4 , true ) : i;			n1.SetInputValue( in[at][0] );			n2.SetInputValue( in[at][1] );			n1.Depolarization();			cout << i << ") " << in[at][0]  << " AND " << in[at][1] << " ---> " << (int)(n2.ActionPotential() ? 1 : 0) << endl;			tron << i << ") " << in[at][0]  << " AND " << in[at][1] << " ---> " << (int)(n2.ActionPotential() ? 1 : 0);			if( n2.ActionPotential() )				if( !(in[at][0] && in[at][1]) )					tron << " **** ERROR *** ";			tron << "\t";			inv.SetInputValue( 1.0 );			n2.Depolarization();			cout << i << ") " << in[at][0]  << " NAND " << in[at][1] << " ---> " << (int)(inv.ActionPotential() ? 1 : 0) << endl;			tron << i << ") " << in[at][0]  << " NAND " << in[at][1] << " ---> " << (int)(inv.ActionPotential() ? 1 : 0);			if( inv.ActionPotential() )				if( (in[at][0] && in[at][1]) )					tron << " **** ERROR *** ";			tron << endl;					}		cout << endl;		tron << endl;		return 0;	}}

⌨️ 快捷键说明

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