brainy 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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