-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathneuron.rb
More file actions
39 lines (33 loc) · 761 Bytes
/
neuron.rb
File metadata and controls
39 lines (33 loc) · 761 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Neuron
attr_accessor :input_connections
attr_accessor :output_connections
attr_accessor :result
attr_accessor :delta
def initialize
@input_connections = []
@output_connections = []
end
def calculate_delta
@delta = 0
@output_connections.each do |conn|
@delta += conn.end_neuron.delta * conn.weight
end
@delta *= derivative_sigmoid(@result)
end
def process
sum_of_inputs = @input_connections.map do |conn|
conn.value * conn.weight
end.inject(:+)
@result = sigmoid(sum_of_inputs)
output_connections.map { |c| c.value = @result }
@result
end
private
def sigmoid(x)
1 / (1 + Math.exp(-x))
end
def derivative_sigmoid(x)
s = sigmoid(x)
s * (1.0 - x)
end
end