Guest User

Untitled

a guest
Apr 19th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. std::vector<double> NeuralNet::update(const std::vector<double> &inputs)
  2. {
  3. using namespace util;
  4. std::copy(inputs.begin(), inputs.end(), mInputActivation.begin());
  5.  
  6. for (int hiddenIdx = 0; hiddenIdx < mNumHidden; ++hiddenIdx)
  7. {
  8. mHiddenActivation[hiddenIdx] =
  9. sigmoid(multiplyVect(mInputActivation, mWin->getColVector(hiddenIdx)));
  10. }
  11.  
  12. for (int outputIdx = 0; outputIdx < mNumOutputs; ++outputIdx)
  13. {
  14. mOutputActivation[outputIdx] =
  15. sigmoid(multiplyVect(mHiddenActivation, mWout->getColVector(outputIdx)));
  16. }
  17.  
  18. return mOutputActivation;
  19. }
  20.  
  21. double NeuralNet::backprop(const std::vector<double> &target, double learningRate)
  22. {
  23. std::vector<double> output_deltas(mNumOutputs, 0.0);
  24. std::vector<double> hidden_deltas(mNumHidden, 0.0);
  25.  
  26. // Compute output deltas
  27. for (int k = 0; k < mNumOutputs; k++)
  28. {
  29. double error = target[k] - mOutputActivation[k];
  30. output_deltas[k] = util::d_sigmoid(mOutputActivation[k]) * error;
  31. }
  32.  
  33. // Compute hidden deltas
  34. for (int j = 0; j < mNumHidden; j++)
  35. {
  36. double error = util::multiplyVect(output_deltas, mWout->getRowVector(j));
  37. hidden_deltas[j] = util::d_sigmoid(mHiddenActivation[j]) * error;
  38. }
  39.  
  40. // Update output weights
  41. for (int j = 0; j < mNumHidden; j++)
  42. {
  43. for (int i = 0; i < mNumOutputs; i++)
  44. {
  45. double new_weight = mWout->get(j, i) +
  46. learningRate * (output_deltas[i] * mOutputActivation[j]);
  47.  
  48. mWout->setElement(j, i, new_weight);
  49. }
  50. }
  51.  
  52. // Update hidden weights
  53. for (int k = 0; k < mNumInputs; k++)
  54. {
  55. for (int j = 0; j < mNumHidden; j++)
  56. {
  57. double new_weight = mWin->get(k, j) +
  58. learningRate * (hidden_deltas[j] * mInputActivation[k]);
  59.  
  60. mWin->setElement(k, j, new_weight);
  61. }
  62. }
  63.  
  64. return util::error(target, mOutputActivation);
  65. }
Add Comment
Please, Sign In to add comment