Advertisement
Guest User

Untitled

a guest
May 24th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. StochasticNum Neuron::think()
  2. {
  3. StochasticNum outputa(0, 500);
  4. StochasticNum outputb(0, 500);
  5.  
  6. for (int i = 0; i < m_numweights; i++)
  7. {
  8. if (m_weight[i].getIsNegative())
  9. continue;
  10. StochasticNum n = m_weight[i] * m_input[i];
  11. outputa.add(n, *m_onehalf);
  12. }
  13. for (int i = 0; i < m_numweights; i++)
  14. {
  15. if (!m_weight[i].getIsNegative())
  16. continue;
  17. StochasticNum n = m_weight[i] * m_input[i];
  18. outputb.add(n, *m_onehalf);
  19. }
  20. double d = m_bias->getDoubleValue() * m_bias->getIsNegative() + (outputb.getDoubleValue() - outputa.getDoubleValue());
  21.  
  22. return StochasticNum(d, 500);
  23. }
  24.  
  25. StochasticNum::StochasticNum(long size) : m_bits(size), m_size(size)
  26. {}
  27. StochasticNum::StochasticNum(double value, long size) : m_bits(size), m_size(size)
  28. {
  29. uint8_t xor;
  30. double rng;
  31. for (int i = 0; i < size; i++)
  32. {
  33. xor = xor8();
  34. rng = (double) xor / (double)UINT8_MAX;
  35. if (rng < value)
  36. m_bits[i] = 1;
  37. }
  38. }
  39. StochasticNum::StochasticNum(double value, long size, bool isNeg) : m_bits(size), m_size(size), m_isneg(isNeg)
  40. {
  41. uint8_t xor;
  42. double rng;
  43. for (int i = 0; i < size; i++)
  44. {
  45. xor = xor8();
  46. rng = (double) xor / (double)UINT8_MAX;
  47. if (rng < value)
  48. m_bits[i] = 1;
  49. }
  50. }
  51.  
  52. StochasticNum::StochasticNum(boost::dynamic_bitset<> bits)
  53. {
  54. m_bits = bits;
  55. }
  56. long StochasticNum::getSize()
  57. {
  58. return m_size;
  59. }
  60. void StochasticNum::setValue(double value, long size)
  61. {
  62. m_bits.resize(size);
  63. uint8_t xor;
  64. double rng;
  65. for (int i = 0; i < size; i++)
  66. {
  67. xor = xor8();
  68. rng = (double) xor / (double)UINT8_MAX;
  69. if (rng < value)
  70. m_bits[i] = 1;
  71. }
  72. }
  73. double StochasticNum::getDoubleValue()
  74. {
  75. return (double)m_bits.count() / (double)m_bits.size();
  76. }
  77. void StochasticNum::setIsNegative(bool neg)
  78. {
  79. m_isneg = neg;
  80. }
  81. bool StochasticNum::getIsNegative()
  82. {
  83. return m_isneg;
  84. }
  85. const StochasticNum StochasticNum::operator* (StochasticNum& other)
  86. {
  87. return StochasticNum(m_bits &= other.m_bits);
  88. }
  89. const StochasticNum StochasticNum::add(StochasticNum& other, StochasticNum& select)
  90. {
  91. return StochasticNum((select.m_bits.flip() &= m_bits) |= (other.m_bits &= select.m_bits.flip()));
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement