ruby_brain 0.1.3 → 0.1.4
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 +4 -4
- data/README.org +2 -2
- data/examples/mnist_standalone.rb +62 -0
- data/examples/wave_form_standalone.rb +11 -0
- data/lib/ruby_brain.rb +0 -1
- data/lib/ruby_brain/network.rb +1 -4
- data/lib/ruby_brain/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d712cf44173c097c607a48bfceba19ae212ec5d9
|
4
|
+
data.tar.gz: b2c9633cce47237cf83288607907c3964a63966f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 262286fed915e53b01a2f558585f548a900b19b58034a95ba3d94fd573e37cae6c1974c491807d6c96eb6877702845355e126dbc3e203cbff6e6e1fe28f24ead
|
7
|
+
data.tar.gz: 338a2629c0173c0c7068ec7eb5789213f5d731ce9ac233ee65de1a1b18c7f5e82e6d9bb072a3a932d8111094265b1b704136a3dd1576d467d184f8f14337cf9c
|
data/README.org
CHANGED
@@ -0,0 +1,62 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'ruby_brain'
|
3
|
+
require 'ruby_brain/dataset/mnist/data'
|
4
|
+
|
5
|
+
|
6
|
+
dataset = RubyBrain::DataSet::Mnist::data
|
7
|
+
training_dataset = dataset.first
|
8
|
+
test_dataset = dataset.last
|
9
|
+
|
10
|
+
|
11
|
+
training_dataset.keys # => [:input, :output]
|
12
|
+
test_dataset.keys # => [:input, :output]
|
13
|
+
|
14
|
+
training_dataset[:input].size # => 60000
|
15
|
+
training_dataset[:input].first.size # => 784
|
16
|
+
|
17
|
+
training_dataset[:output].size # => 60000
|
18
|
+
training_dataset[:output].first.size # => 10
|
19
|
+
|
20
|
+
test_dataset[:input].size # => 10000
|
21
|
+
test_dataset[:input].first.size # => 784
|
22
|
+
|
23
|
+
test_dataset[:output].size # => 10000
|
24
|
+
test_dataset[:output].first.size # => 10
|
25
|
+
|
26
|
+
|
27
|
+
# use first 5000 pictures for training
|
28
|
+
NUM_TRAIN_DATA = 5000
|
29
|
+
training_input = training_dataset[:input][0..(NUM_TRAIN_DATA-1)]
|
30
|
+
training_supervisor = training_dataset[:output][0..(NUM_TRAIN_DATA-1)]
|
31
|
+
|
32
|
+
# use all pictures within test_dataset
|
33
|
+
test_input = test_dataset[:input]
|
34
|
+
test_supervisor = test_dataset[:output]
|
35
|
+
|
36
|
+
# network structure [784, 50, 10]
|
37
|
+
network = RubyBrain::Network.new([training_input.first.size, 50, training_supervisor.first.size])
|
38
|
+
# learning rate is 0.7
|
39
|
+
network.learning_rate = 0.7
|
40
|
+
# initialize network
|
41
|
+
network.init_network
|
42
|
+
|
43
|
+
network.learn(training_input, training_supervisor, max_training_count=100, tolerance=0.0004, monitoring_channels=[:best_params_training])
|
44
|
+
|
45
|
+
### turn on this snippet to print pictures as ascii art.
|
46
|
+
#
|
47
|
+
# test_input.each_with_index do |input, i|
|
48
|
+
# input.each_with_index do |e, j|
|
49
|
+
# print(e > 0.3 ? 'x' : ' ')
|
50
|
+
# puts if (j % 28) == 0
|
51
|
+
# end
|
52
|
+
# puts
|
53
|
+
# supervisor_label = test_supervisor[i].index(test_supervisor[i].max)
|
54
|
+
# predicated_output = network.get_forward_outputs(input)
|
55
|
+
# predicated_label = predicated_output.index(predicated_output.max)
|
56
|
+
# puts "test_supervisor: #{supervisor_label}"
|
57
|
+
# puts "predicate: #{predicated_label}"
|
58
|
+
# results << (supervisor_label == predicated_label)
|
59
|
+
# puts "------------------------------------------------------------"
|
60
|
+
# end
|
61
|
+
|
62
|
+
puts "accuracy: #{results.count(true).to_f/results.size}"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require "ruby_brain"
|
2
|
+
|
3
|
+
X = (0..1).step(0.01).to_a
|
4
|
+
Y_IDEAL = X.map {|x| (0.75 * Math.sin(x*2*Math::PI) - 0.2 * Math.cos(5*x*2*Math::PI - 0.023) + 1) / 2}
|
5
|
+
Y = [Y_IDEAL, Array.new(X.size) {rand(-0.05..0.05)}].transpose.map {|e| e.inject(:+)}
|
6
|
+
a_network = RubyBrain::Network.new([1, 13, 6, 1])
|
7
|
+
a_network.init_network
|
8
|
+
a_network.learning_rate = 0.5
|
9
|
+
a_network.learn(X.map{|e| [e]}, Y.map{|e| [e]}, max_tra2ining_count=40000, tolerance=0.0004, monitoring_channels=[:best_params_training])
|
10
|
+
Y_PREDICATED = X.map{|e| [e]}.map {|a| a_network.get_forward_outputs(a).first}
|
11
|
+
|
data/lib/ruby_brain.rb
CHANGED
data/lib/ruby_brain/network.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
module RubyBrain
|
2
2
|
class Network
|
3
|
-
extend Forwardable
|
4
|
-
def_delegators :@weights_set, :overwrite_weights, :get_weights_as_array
|
5
|
-
|
6
3
|
attr_accessor :learning_rate
|
7
4
|
|
8
5
|
# Constructor of Network class
|
@@ -138,7 +135,7 @@ module RubyBrain
|
|
138
135
|
raise RubyBrain::Exception::TrainingDataError if inputs_set.size != outputs_set.size
|
139
136
|
# raise "inputs_set and outputs_set has different size!!!!" if inputs_set.size != outputs_set.size
|
140
137
|
|
141
|
-
best_error =
|
138
|
+
best_error = Float::INFINITY
|
142
139
|
best_weights_array = []
|
143
140
|
max_training_count.times do |i_training|
|
144
141
|
accumulated_errors = 0.0 # for rms
|
data/lib/ruby_brain/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_brain
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- elgoog
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -87,7 +87,9 @@ files:
|
|
87
87
|
- examples/mnist.ipynb
|
88
88
|
- examples/mnist.rb
|
89
89
|
- examples/mnist2.rb
|
90
|
+
- examples/mnist_standalone.rb
|
90
91
|
- examples/wave_form.ipynb
|
92
|
+
- examples/wave_form_standalone.rb
|
91
93
|
- lib/ruby_brain.rb
|
92
94
|
- lib/ruby_brain/dataset/mnist/data.rb
|
93
95
|
- lib/ruby_brain/dataset/mnist/test_mnist.rb
|
@@ -120,9 +122,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
122
|
version: '0'
|
121
123
|
requirements: []
|
122
124
|
rubyforge_project:
|
123
|
-
rubygems_version: 2.
|
125
|
+
rubygems_version: 2.6.6
|
124
126
|
signing_key:
|
125
127
|
specification_version: 4
|
126
128
|
summary: NeuralNet/DeepLearning implement for Ruby
|
127
129
|
test_files: []
|
128
|
-
has_rdoc:
|