brainy 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fd89c615bcbb935df0b74079d0a9d966e3ee7a1b
4
- data.tar.gz: cfb4ba364fbb4e22988ea52ad1a009a7a409921b
3
+ metadata.gz: 9fd74abee11cdbbf0e0b79f302134fe7722ed67f
4
+ data.tar.gz: f867df45585f08ae396bee5799b74f611bcbb225
5
5
  SHA512:
6
- metadata.gz: 44ddc7ca29fa248784df73e8b843427a7b31876f6372013e634cfa6383bfadf0aace3008b77340d9d50854cae61e602444ad5ffbed2ad8b87a0c5d128226015e
7
- data.tar.gz: fb22aab27dc09690df51a40d121c6eb6b4285fa3cb3f1f4cc32f634e504786828c4bf57eaeaa913f2275b360c837162e97f7a26350539d4016645d5fb2c4cfb9
6
+ metadata.gz: 3cc3538aa573f9097ce3cebfe5a6d439ed580077b58ea93f5d1771d409f1d02fc9efc148110a58082665faa4f246a5ba781df6cca153d2b1f303d4b5752038f6
7
+ data.tar.gz: e44212b55f265290610ad81d03f79c12ee0cc0e47a34e7745491dfa49bea272d525fa600a0d8cfd7fb76076f1fdf1fbaecb30061421ef1bb258e9118ace20207
data/README.md CHANGED
@@ -25,5 +25,5 @@ mse = 1000.times.map do
25
25
  (o - net.evaluate([i]).first) ** 2
26
26
  end.reduce(:+) / 1000
27
27
 
28
- puts "your MSE: #{ mse.round(3) }" # smaller is better
28
+ puts "your MSE: #{ mse.round(6) }" # smaller is better
29
29
  ```
@@ -4,26 +4,32 @@ module Brainy
4
4
 
5
5
  def initialize(input_count, hidden_count, output_count, learning_rate)
6
6
  @layers = [
7
- Array.new(hidden_count, Vector.elements(Array.new(input_count + 1, rand(-1.0..1.0)))),
8
- Array.new(output_count, Vector.elements(Array.new(hidden_count + 1, rand(-1.0..1.0))))
7
+ Array.new(hidden_count) { Vector.elements(Array.new(input_count + 1) { rand(-1.0..1.0) }) },
8
+ Array.new(output_count) { Vector.elements(Array.new(hidden_count + 1) { rand(-1.0..1.0) }) }
9
9
  ]
10
10
  @learning_rate = learning_rate
11
- @activate = lambda { |x| 1 / (1 + Math.exp(-1 * x)) }
12
- @activate_prime = lambda { |x| x * (1 - x) }
11
+ end
12
+
13
+ def activate(x)
14
+ 1 / (1 + Math.exp(-1 * x))
15
+ end
16
+
17
+ def activate_prime(x)
18
+ x * (1 - x)
13
19
  end
14
20
 
15
21
  def evaluate(inputs)
16
22
  @layers.reduce(Vector.elements(inputs)) do |input, layer|
17
- input = Vector.elements(input.to_a + [1])
18
- output = layer.map { |node| @activate.call(node.inner_product(input)) }
23
+ input = Vector.elements(input.to_a + [1.0])
24
+ output = layer.map { |node| activate(node.inner_product(input)) }
19
25
  Vector.elements(output)
20
26
  end
21
27
  end
22
28
 
23
29
  def train!(inputs, expected)
24
- inputs = Vector.elements(inputs + [1])
25
- hidden_outs = Vector.elements(@layers.first.map { |node| @activate.call(node.inner_product(inputs)) } + [1])
26
- output_outs = Vector.elements(@layers.last.map { |node| @activate.call(node.inner_product(hidden_outs)) })
30
+ inputs = Vector.elements(inputs + [1.0])
31
+ hidden_outs = Vector.elements(@layers.first.map { |node| activate(node.inner_product(inputs)) } + [1.0])
32
+ output_outs = Vector.elements(@layers.last.map { |node| activate(node.inner_product(hidden_outs)) })
27
33
  output_deltas = get_output_deltas(expected, output_outs)
28
34
  hidden_deltas = get_hidden_deltas(hidden_outs, @layers.last, output_deltas)
29
35
  @layers[1] = get_updated_weights(@layers.last, hidden_outs, output_deltas)
@@ -32,14 +38,14 @@ module Brainy
32
38
 
33
39
  def get_output_deltas(expected, output)
34
40
  expected.zip(output.to_a).map do |expect, out|
35
- (out - expect) * @activate_prime.call(out)
41
+ (out - expect) * activate_prime(out)
36
42
  end
37
43
  end
38
44
 
39
45
  def get_hidden_deltas(hidden_outs, output_nodes, output_deltas)
40
46
  hidden_outs.each_with_index.map do |out, index|
41
47
  error = output_nodes.zip(output_deltas).map { |weights, delta| weights[index] * delta }.reduce(:+)
42
- error * @activate_prime.call(out)
48
+ error * activate_prime(out)
43
49
  end
44
50
  end
45
51
 
@@ -1,3 +1,3 @@
1
1
  module Brainy
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brainy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Scott Reis