Class: RubyBrain::Nodes::Neuron

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_brain/nodes.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(gain = 1.0) ⇒ Neuron

Returns a new instance of Neuron.



6
7
8
9
10
# File 'lib/ruby_brain/nodes.rb', line 6

def initialize(gain=1.0)
  @gain = gain
  @this_output = nil
  @this_backward_output = nil
end

Instance Attribute Details

#left_side_weightsObject

Returns the value of attribute left_side_weights.



3
4
5
# File 'lib/ruby_brain/nodes.rb', line 3

def left_side_weights
  @left_side_weights
end

#order_indexObject

Returns the value of attribute order_index.



3
4
5
# File 'lib/ruby_brain/nodes.rb', line 3

def order_index
  @order_index
end

#right_side_weightsObject

Returns the value of attribute right_side_weights.



3
4
5
# File 'lib/ruby_brain/nodes.rb', line 3

def right_side_weights
  @right_side_weights
end

#this_backward_outputObject (readonly)

Returns the value of attribute this_backward_output.



4
5
6
# File 'lib/ruby_brain/nodes.rb', line 4

def this_backward_output
  @this_backward_output
end

#this_outputObject (readonly)

Returns the value of attribute this_output.



4
5
6
# File 'lib/ruby_brain/nodes.rb', line 4

def this_output
  @this_output
end

Instance Method Details

#get_backward_sigmoid_output(backward_sigmoid_input) ⇒ Object



16
17
18
# File 'lib/ruby_brain/nodes.rb', line 16

def get_backward_sigmoid_output(backward_sigmoid_input)
  @gain * (1 - @this_output) * @this_output * backward_sigmoid_input
end

#get_sigmoid_output(sigmoid_input) ⇒ Object



12
13
14
# File 'lib/ruby_brain/nodes.rb', line 12

def get_sigmoid_output(sigmoid_input)
  1.0 / (1 + Math.exp(-1 * @gain * sigmoid_input))
end

#output_of_backward_calc(backward_inputs) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/ruby_brain/nodes.rb', line 28

def output_of_backward_calc(backward_inputs)
  sigmoid_backward_input = 0.0
  if @right_side_weights.nil?
    sigmoid_backward_input = backward_inputs[@order_index]
  else
    @right_side_weights[@order_index].zip(backward_inputs).each do |weight, input|
      sigmoid_backward_input += input * weight
    end
  end
  @this_backward_output = get_backward_sigmoid_output(sigmoid_backward_input)
end

#output_of_forward_calc(inputs) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/ruby_brain/nodes.rb', line 20

def output_of_forward_calc(inputs)
  sigmoid_input = 0.0
  @left_side_weights.transpose[@order_index].zip(inputs).each do |weight, input|
    sigmoid_input += input * weight
  end
  @this_output = get_sigmoid_output(sigmoid_input)
end