示例#1
0
// ################################################
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;
}
示例#2
0
// ################################################
// 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
}
示例#3
0
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);
}
示例#4
0
// ################################################
arma::vec NeuralNetwork::ActivationFunctionDerivative(arma::vec vec){
  arma::vec ones;
  ones.ones(vec.n_rows);
  vec = ActivationFunction(vec) % (ones - ActivationFunction(vec));
  return vec;
}