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); }
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