// ################################################ void NeuralNetwork::Backprop(std::vector<arma::vec>& delta_nabla_b, // is to be changed std::vector<arma::mat>& delta_nabla_w, // is to be changed const arma::vec& input, int output){ std::vector<arma::vec> activations; activations.push_back(input); std::vector<arma::vec> zValues; for (unsigned int i = 0; i < vecBiases.size(); ++i){ arma::vec z = matWeights[i] * activations[i] + vecBiases[i]; zValues.push_back(z); activations.push_back(ActivationFunction(z)); } arma::vec trueoutput; trueoutput.zeros(neurons[neurons.size()-1]); trueoutput[output] = 1; arma::vec delta = CostFunctionDerivative(activations[activations.size()-1], trueoutput, zValues[zValues.size()-1]); delta_nabla_b[delta_nabla_b.size()-1] = delta; delta_nabla_w[delta_nabla_w.size()-1] = delta * activations[activations.size() - 2].t(); for (unsigned int i = 2; i < neurons.size(); ++i){ arma::vec z = zValues[zValues.size() - i]; arma::vec sp = ActivationFunctionDerivative(z); delta = matWeights[matWeights.size()-i+1].t() * delta % sp; delta_nabla_b[delta_nabla_b.size()-i] = delta; delta_nabla_w[delta_nabla_w.size()-i] = delta * activations[activations.size()-i-1].t(); } return; }
// ################################################ // Feed forwards input and returns output of neural network arma::vec NeuralNetwork::FeedForward(std::vector<double> input){ std::vector<arma::vec > vecActivations; vecActivations.resize(neurons.size()); vecActivations.at(0) = input; for (unsigned int i = 0; i < vecActivations.size()-1; ++i){ vecActivations.at(i+1) = ActivationFunction((matWeights.at(i) * vecActivations.at(i)) + vecBiases.at(i)); } return vecActivations.at(vecActivations.size()-1); // return last vector }
void Neuron::CalculateNeuronResponse() { float totalInputValue = 0; for(int i = 0; i < m_numberOfInputConnections; i++) { totalInputValue += m_inputValues[i]; } m_unweightedOutputVal = ActivationFunction(totalInputValue, m_activationFunctionVariable, m_activationFunction); }
// ################################################ arma::vec NeuralNetwork::ActivationFunctionDerivative(arma::vec vec){ arma::vec ones; ones.ones(vec.n_rows); vec = ActivationFunction(vec) % (ones - ActivationFunction(vec)); return vec; }