Example #1
0
NeuralNetworkSimpleInternal::NeuralNetworkSimpleInternal(IntArray const& numNodes, 
														 const float _learnRate, 
														 const float _actFuncOffset) throw()
:	learnRate(_learnRate),
	actFuncOffset(_actFuncOffset),
	layers((numNodes.size() < 2 ? 2 : numNodes.size())-1)
{
	const int numLayers = numNodes.size();
	
	if(getNumLayersIncludingInput() == numLayers)
	{
		const int size = getNumLayersExcludingInput();
		for(int i = 0; i < size; i++)
		{
			int numLayerInputs = numNodes.atUnchecked(i);
			int numLayerOutputs = numNodes.atUnchecked(i+1);
			
			if(numLayerInputs < 1) numLayerInputs = 1;
			if(numLayerOutputs < 1) numLayerOutputs = 1;
			
			layers[i] = NeuralLayer(numLayerOutputs, numLayerInputs);
		}
		
		numInputs = numNodes.atUnchecked(0);
		numOutputs = numNodes.atUnchecked(numLayers-1);
	}
	else if(numLayers == 1)
	{
		int num = numNodes.atUnchecked(0);
		if(num < 1) num = 1;
		
		layers[0] = NeuralLayer(num, num);
		layers[1] = NeuralLayer(num, num);

		numInputs = num;
		numOutputs = num;
	}
	else
	{
		layers[0] = NeuralLayer(1, 1);
		layers[1] = NeuralLayer(1, 1);
		
		numInputs = 1;
		numOutputs = 1;
	}
	
	errorVector = NumericalArray<float>::withSize(numOutputs);
}
Example #2
0
File: ai.cpp Project: sUtop/Kate
NeuralNetwork::NeuralNetwork(std::vector<int> NumNeurons, //  = {3,3,3} Размерность слоев
                             NetworkType Nt     // = BackPropagation Тип нейронной сети
                  ){
#ifdef LOG
    std::cout<<NumNeurons.size()<<"size \n";
#endif
    rnd = new Random;

    for(int i=1;i<NumNeurons.size();++i)
        Layers.push_back(NeuralLayer(NumNeurons[i-1],NumNeurons[i],i,rnd,false));
        
    Layers.push_back(NeuralLayer(NumNeurons.back(),0,NumNeurons.size(),rnd,true)); // Последний слой - заполняется отдельно
    
#ifdef LOG
    print();
#endif
}; // NeuralNetwork::NeuralNetwork