ruby-fann 1.1.3 → 1.2.0
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.
- data/ext/ruby_fann/extconf.rb +2 -2
- data/ext/ruby_fann/{neural_network.c → ruby_fann.c} +1 -1
- data/lib/ruby-fann.rb +1 -0
- data/lib/ruby_fann.rb +3 -3
- data/lib/ruby_fann/neurotica.rb +2 -2
- data/lib/ruby_fann/version.rb +2 -2
- metadata +59 -148
- data/History.txt +0 -76
- data/License.txt +0 -20
- data/Manifest.txt +0 -63
- data/README.txt +0 -30
- data/Rakefile +0 -4
- data/config/hoe.rb +0 -71
- data/config/requirements.rb +0 -17
- data/ext/ruby_fann/MANIFEST +0 -3
- data/ext/ruby_fann/Makefile +0 -181
- data/neurotica1.png +0 -0
- data/neurotica2.vrml +0 -304
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/script/txt2html +0 -74
- data/setup.rb +0 -1585
- data/tasks/deployment.rake +0 -34
- data/tasks/environment.rake +0 -7
- data/tasks/website.rake +0 -17
- data/test/test.train +0 -3
- data/test/test_helper.rb +0 -2
- data/test/test_neurotica.rb +0 -39
- data/test/test_ruby_fann.rb +0 -444
- data/test/test_ruby_fann_functional.rb +0 -89
- data/verify.train +0 -3
- data/website/index.html +0 -114
- data/website/index.txt +0 -93
- data/website/javascripts/rounded_corners_lite.inc.js +0 -285
- data/website/stylesheets/screen.css +0 -138
- data/website/template.rhtml +0 -47
- data/xor.train +0 -9
- data/xor_cascade.net +0 -34
- data/xor_float.net +0 -34
data/tasks/deployment.rake
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
desc 'Release the website and new gem version'
|
2
|
-
task :deploy => [:check_version, :website, :release] do
|
3
|
-
puts "Remember to create SVN tag:"
|
4
|
-
puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
|
5
|
-
"svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
|
6
|
-
puts "Suggested comment:"
|
7
|
-
puts "Tagging release #{CHANGES}"
|
8
|
-
end
|
9
|
-
|
10
|
-
desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
|
11
|
-
task :local_deploy => [:website_generate, :install_gem]
|
12
|
-
|
13
|
-
task :check_version do
|
14
|
-
unless ENV['VERSION']
|
15
|
-
puts 'Must pass a VERSION=x.y.z release version'
|
16
|
-
exit
|
17
|
-
end
|
18
|
-
unless ENV['VERSION'] == VERS
|
19
|
-
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
20
|
-
exit
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
|
25
|
-
task :install_gem_no_doc => [:clean, :package] do
|
26
|
-
sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
|
27
|
-
end
|
28
|
-
|
29
|
-
namespace :manifest do
|
30
|
-
desc 'Recreate Manifest.txt to include ALL files'
|
31
|
-
task :refresh do
|
32
|
-
`rake check_manifest | patch -p0 > Manifest.txt`
|
33
|
-
end
|
34
|
-
end
|
data/tasks/environment.rake
DELETED
data/tasks/website.rake
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
desc 'Generate website files'
|
2
|
-
task :website_generate => :ruby_env do
|
3
|
-
(Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
|
4
|
-
sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
desc 'Upload website files to rubyforge'
|
9
|
-
task :website_upload do
|
10
|
-
host = "#{rubyforge_username}@rubyforge.org"
|
11
|
-
remote_dir = "/var/www/gforge-projects/#{PATH}/"
|
12
|
-
local_dir = 'website'
|
13
|
-
sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
|
14
|
-
end
|
15
|
-
|
16
|
-
desc 'Generate and upload website files'
|
17
|
-
task :website => [:website_generate, :website_upload, :publish_docs]
|
data/test/test.train
DELETED
data/test/test_helper.rb
DELETED
data/test/test_neurotica.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require "rubygems"
|
3
|
-
require "graphviz"
|
4
|
-
require 'ruby_fann/neural_network'
|
5
|
-
require 'ruby_fann/neurotica'
|
6
|
-
|
7
|
-
class NeuroticaTest < Test::Unit::TestCase
|
8
|
-
def test_basic_output
|
9
|
-
neurotica = RubyFann::Neurotica.new
|
10
|
-
|
11
|
-
train = RubyFann::TrainData.new(
|
12
|
-
:inputs=>[[0.3, 0.4, 0.5, 1.0, -1.0], [0.1, 0.2, 0.3, 1.0, 1.0], [0.6, 0.74, 0.58, -1.0, -1.0], [0.109, 0.677, 0.21, -1.0, 1.0]],
|
13
|
-
:desired_outputs=>[[0.7, 0.4, 0.9], [0.8, -0.2, -0.5], [-0.33, 0.34, -0.22], [0.129, -0.87, 0.25]])
|
14
|
-
|
15
|
-
neural_net = RubyFann::Standard.new(:num_inputs=>3, :hidden_neurons=>[4, 2, 1], :num_outputs=>3)
|
16
|
-
neural_net.train_on_data(train, 100, 20, 0.01)
|
17
|
-
|
18
|
-
neurotica.graph(neural_net, "neurotica1.png")
|
19
|
-
|
20
|
-
# train = RubyFann::TrainData.new(:inputs=>[[0.3, 0.4, 0.5], [0.1, 0.2, 0.3]], :desired_outputs=>[[0.7], [0.8]])
|
21
|
-
neural_net = RubyFann::Shortcut.new(:num_inputs=>3, :num_outputs=>3)
|
22
|
-
neural_net.cascadetrain_on_data(train, 5, 10, 0.1)
|
23
|
-
neural_net.train_on_data(train, 5, 10, 0.1)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
neurotica.graph(neural_net, "neurotica2.png")
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_3d_output
|
31
|
-
train = RubyFann::TrainData.new(:inputs=>[[0.3, 0.4, 0.5], [0.1, 0.2, 0.3]], :desired_outputs=>[[0.7], [0.8]])
|
32
|
-
#neural_net = RubyFann::Shortcut.new(9, 5, [2, 4, 12, 8, 4, 3, 4], 1)
|
33
|
-
neural_net = RubyFann::Shortcut.new(:num_inputs=>4, :num_outputs=>1)
|
34
|
-
neural_net.cascadetrain_on_data(train, 1000, 100, 0.1)
|
35
|
-
neurotica = RubyFann::Neurotica.new
|
36
|
-
neurotica.graph(neural_net, "neurotica2.vrml", :three_dimensional=>true)
|
37
|
-
assert(File.exist?('neurotica2.vrml'))
|
38
|
-
end
|
39
|
-
end
|
data/test/test_ruby_fann.rb
DELETED
@@ -1,444 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require 'rubygems'
|
3
|
-
require 'ruby_fann/neural_network'
|
4
|
-
|
5
|
-
class MyShortcut < RubyFann::Shortcut
|
6
|
-
def initialize
|
7
|
-
super(:num_inputs=>5, :num_outputs=>1)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
class MyFann < RubyFann::Standard
|
12
|
-
attr_accessor :callback_invoked
|
13
|
-
# def initialize
|
14
|
-
# super(:num_inputs=>5, :num_outputs=>1)
|
15
|
-
# end
|
16
|
-
def training_callback(args)
|
17
|
-
puts "ARGS: #{args.inspect}"
|
18
|
-
@callback_invoked=true
|
19
|
-
0
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
class RubyFannTest < Test::Unit::TestCase
|
27
|
-
def test_create_standard
|
28
|
-
fann = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)
|
29
|
-
assert(fann)
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_create_shortcut
|
33
|
-
fann = RubyFann::Shortcut.new(:num_inputs=>5, :num_outputs=>1)
|
34
|
-
|
35
|
-
assert(fann)
|
36
|
-
|
37
|
-
assert_equal(2, fann.get_num_layers)
|
38
|
-
assert_equal(5, fann.get_num_input)
|
39
|
-
assert_equal(1, fann.get_num_output)
|
40
|
-
|
41
|
-
fann2 = RubyFann::Shortcut.new(:num_inputs=>1, :num_outputs=>2)
|
42
|
-
assert(fann2)
|
43
|
-
assert_equal(2, fann2.get_num_layers)
|
44
|
-
assert_equal(1, fann2.get_num_input)
|
45
|
-
assert_equal(2, fann2.get_num_output)
|
46
|
-
assert_equal(:shortcut, fann.get_network_type)
|
47
|
-
|
48
|
-
sc = MyShortcut.new
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_raises
|
52
|
-
fann = nil
|
53
|
-
assert_raises(TypeError) { fann = RubyFann::Standard.new(:num_inputs=>'foo', :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)}
|
54
|
-
assert_nil(fann)
|
55
|
-
assert_raises(ArgumentError) { fann = RubyFann::Standard.new(4, 1, [3, 4], 1) }
|
56
|
-
assert_nil(fann)
|
57
|
-
assert_nothing_raised { fann = RubyFann::Standard.new(:num_inputs=>4, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1) }
|
58
|
-
assert(fann)
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_run
|
62
|
-
fann = RubyFann::Standard.new(:num_inputs=>4, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)
|
63
|
-
outputs = fann.run([3.0, 2.0, 3.0, 4.0])
|
64
|
-
assert_equal(1, outputs.length)
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_print_parameters
|
68
|
-
fann = RubyFann::Standard.new(:num_inputs=>4, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)
|
69
|
-
fann.print_parameters
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_accessors
|
73
|
-
fann = RubyFann::Standard.new(:num_inputs=>4, :hidden_neurons=>[3, 4, 3], :num_outputs=>1)
|
74
|
-
assert_equal(5, fann.get_num_layers)
|
75
|
-
assert_equal(4, fann.get_num_input)
|
76
|
-
assert_equal(1, fann.get_num_output)
|
77
|
-
puts "TN: #{fann.get_total_neurons}"
|
78
|
-
puts "TC: #{fann.get_total_connections}"
|
79
|
-
fann.print_parameters
|
80
|
-
assert_equal(19, fann.get_total_neurons)
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_randomize_weights
|
84
|
-
fann = RubyFann::Standard.new(:num_inputs=>4, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)
|
85
|
-
fann.randomize_weights(-1.0, 1.0)
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_init_weights
|
89
|
-
fann = RubyFann::Standard.new(:num_inputs=>4, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)
|
90
|
-
training = RubyFann::TrainData.new(:filename=>'test/test.train')
|
91
|
-
fann.init_weights(training)
|
92
|
-
end
|
93
|
-
|
94
|
-
|
95
|
-
def test_print_connections
|
96
|
-
fann = RubyFann::Standard.new(:num_inputs=>4, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)
|
97
|
-
fann.print_connections
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_connection_rate
|
101
|
-
fann = RubyFann::Standard.new(:num_inputs=>4, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)
|
102
|
-
cr = fann.get_connection_rate
|
103
|
-
assert_equal(1, cr)
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_layer_array
|
107
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
108
|
-
layers = fann.get_layer_array
|
109
|
-
assert_equal([5, 2, 8, 4, 3, 4, 1], layers)
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_bias_array
|
113
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 4, 3, 4], :num_outputs=>1)
|
114
|
-
bias = fann.get_bias_array
|
115
|
-
assert_equal([1, 1, 1, 1, 1, 0], bias)
|
116
|
-
end
|
117
|
-
|
118
|
-
|
119
|
-
def test_get_network_type
|
120
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
121
|
-
assert_equal(:layer, fann.get_network_type)
|
122
|
-
puts "fann.get_network_type: #{fann.get_network_type}"
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_train_file
|
126
|
-
training = RubyFann::TrainData.new(:filename=>'test/test.train')
|
127
|
-
training.save('verify.train')
|
128
|
-
assert(File.exist?('verify.train'))
|
129
|
-
test_train_txt = File.read('test/test.train')
|
130
|
-
verify_train_txt = File.read('verify.train')
|
131
|
-
assert_equal(verify_train_txt, test_train_txt)
|
132
|
-
end
|
133
|
-
|
134
|
-
def test_train_creation_data
|
135
|
-
training = RubyFann::TrainData.new(:inputs=>[[0.3, 0.4, 0.5], [0.1, 0.2, 0.3]], :desired_outputs=>[[0.7], [0.8]])
|
136
|
-
training.save('verify.train')
|
137
|
-
verify_lines = File.readlines('verify.train')
|
138
|
-
assert_equal(5, verify_lines.length)
|
139
|
-
assert_match(/2 3 1/, verify_lines[0])
|
140
|
-
assert_match(/0.30* 0.40* 0.50*/, verify_lines[1])
|
141
|
-
assert_match(/0.7/, verify_lines[2])
|
142
|
-
assert_match(/0.10* 0.20* 0.30*/, verify_lines[3])
|
143
|
-
assert_match(/0.8/, verify_lines[4])
|
144
|
-
end
|
145
|
-
|
146
|
-
def test_train_on_data
|
147
|
-
train = RubyFann::TrainData.new(:inputs=>[[0.3, 0.4, 0.5], [0.1, 0.2, 0.3]], :desired_outputs=>[[0.7], [0.8]])
|
148
|
-
fann = RubyFann::Standard.new(:num_inputs=>3, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
149
|
-
fann.train_on_data(train, 1000, 10, 0.1)
|
150
|
-
outputs = fann.run([3.0, 2.0, 3.0])
|
151
|
-
puts "OUTPUT FROM RUN WAS #{outputs.inspect}"
|
152
|
-
end
|
153
|
-
|
154
|
-
def test_train_callback
|
155
|
-
puts "train callback"
|
156
|
-
train = RubyFann::TrainData.new(:inputs=>[[0.3, 0.4, 0.5], [0.1, 0.2, 0.3]], :desired_outputs=>[[0.7], [0.8]])
|
157
|
-
fann = MyFann.new(:num_inputs=>3, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
158
|
-
|
159
|
-
assert(!fann.callback_invoked)
|
160
|
-
fann.train_on_data(train, 1000, 1, 0.01)
|
161
|
-
assert(fann.callback_invoked)
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_train_bug
|
165
|
-
require 'rubygems'
|
166
|
-
require 'ruby_fann/neural_network'
|
167
|
-
training_data = RubyFann::TrainData.new(
|
168
|
-
:inputs=>[[0.3, 0.4, 0.5], [0.1, 0.2, 0.3]],
|
169
|
-
:desired_outputs=>[[0.7], [0.8]])
|
170
|
-
|
171
|
-
fann = RubyFann::Standard.new(
|
172
|
-
:num_inputs=>3,
|
173
|
-
:hidden_neurons=>[2, 8, 4, 3, 4],
|
174
|
-
:num_outputs=>1)
|
175
|
-
|
176
|
-
fann.train_on_data(training_data, 1000, 1, 0.1)
|
177
|
-
end
|
178
|
-
|
179
|
-
def test_activation_function
|
180
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
181
|
-
fann.set_activation_function(:linear, 1, 2)
|
182
|
-
assert_raises(TypeError) { fann.set_activation_function('linear', 1, 2) }
|
183
|
-
end
|
184
|
-
|
185
|
-
def test_activation_function_hidden
|
186
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
187
|
-
fann.set_activation_function_hidden(:linear)
|
188
|
-
assert_raises(RuntimeError) { fann.set_activation_function_hidden(:fake) }
|
189
|
-
fann.set_activation_function_hidden(:elliot)
|
190
|
-
end
|
191
|
-
|
192
|
-
def test_activation_function_layer
|
193
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
194
|
-
fann.set_activation_function_layer(:linear, 1)
|
195
|
-
assert_raises(RuntimeError) { fann.set_activation_function_layer(:fake, 0) }
|
196
|
-
assert_equal(:linear, fann.get_activation_function(1, 0))
|
197
|
-
end
|
198
|
-
|
199
|
-
def test_activation_function_output
|
200
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
201
|
-
fann.set_activation_function_output(:linear)
|
202
|
-
assert_raises(RuntimeError) { fann.set_activation_function_output(:fake) }
|
203
|
-
fann.set_activation_function_output(:elliot)
|
204
|
-
end
|
205
|
-
|
206
|
-
def test_activation_steepness
|
207
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
208
|
-
fann.set_activation_steepness(0.2, 2, 3)
|
209
|
-
assert_equal(0.2, fann.get_activation_steepness(2, 3))
|
210
|
-
end
|
211
|
-
|
212
|
-
def test_activation_steepness_hidden
|
213
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
214
|
-
fann.set_activation_steepness_hidden(0.345)
|
215
|
-
1.upto(5) {|i|assert_equal(0.345, fann.get_activation_steepness(i, 1)) }
|
216
|
-
end
|
217
|
-
|
218
|
-
def test_activation_steepness_layer
|
219
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
220
|
-
fann.set_activation_steepness_layer(0.7000, 3)
|
221
|
-
assert_equal(0.7000, fann.get_activation_steepness(3, 1))
|
222
|
-
end
|
223
|
-
|
224
|
-
def test_activation_steepness_output
|
225
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
226
|
-
fann.set_activation_steepness_output(0.888)
|
227
|
-
assert_equal(0.888, fann.get_activation_steepness(6, 1))
|
228
|
-
end
|
229
|
-
|
230
|
-
def test_training_function
|
231
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
232
|
-
fann.set_train_error_function(:tanh)
|
233
|
-
assert_equal(:tanh, fann.get_train_error_function())
|
234
|
-
|
235
|
-
fann2 = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
236
|
-
fann2.set_train_error_function(:linear)
|
237
|
-
assert_equal(:linear, fann2.get_train_error_function())
|
238
|
-
assert_raises(RuntimeError) { fann2.set_train_error_function(:fake) }
|
239
|
-
end
|
240
|
-
|
241
|
-
def test_training_stop
|
242
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
243
|
-
fann.set_train_stop_function(:mse)
|
244
|
-
assert_equal(:mse, fann.get_train_stop_function())
|
245
|
-
|
246
|
-
fann2 = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
247
|
-
fann2.set_train_stop_function(:bit)
|
248
|
-
assert_equal(:bit, fann2.get_train_stop_function())
|
249
|
-
|
250
|
-
assert_raises(RuntimeError) { fann2.set_train_stop_function(:fake) }
|
251
|
-
end
|
252
|
-
|
253
|
-
def test_save
|
254
|
-
fann = RubyFann::Standard.new(:num_inputs=>5, :hidden_neurons=>[2, 8, 4, 3, 4], :num_outputs=>1)
|
255
|
-
fann.save('foo.net')
|
256
|
-
assert(File.exist?('foo.net'))
|
257
|
-
File.delete('foo.net')
|
258
|
-
end
|
259
|
-
|
260
|
-
def test_training_algorithm
|
261
|
-
verify_fann_attribute(:training_algorithm, :rprop)
|
262
|
-
end
|
263
|
-
|
264
|
-
def test_bit_fail_limit
|
265
|
-
verify_fann_attribute(:bit_fail_limit, 0.743)
|
266
|
-
end
|
267
|
-
|
268
|
-
def test_quickprop_decay
|
269
|
-
verify_fann_attribute(:quickprop_decay, 0.211)
|
270
|
-
end
|
271
|
-
|
272
|
-
def test_quickprop_mu
|
273
|
-
verify_fann_attribute(:quickprop_mu, 0.912)
|
274
|
-
end
|
275
|
-
|
276
|
-
def test_rprop_increase_factor
|
277
|
-
verify_fann_attribute(:rprop_increase_factor, 0.743)
|
278
|
-
end
|
279
|
-
|
280
|
-
def test_rprop_decrease_factor
|
281
|
-
verify_fann_attribute(:rprop_decrease_factor, 0.190)
|
282
|
-
end
|
283
|
-
|
284
|
-
def test_rprop_delta_min
|
285
|
-
verify_fann_attribute(:rprop_delta_min, 0.277)
|
286
|
-
end
|
287
|
-
|
288
|
-
def test_rprop_delta_max
|
289
|
-
verify_fann_attribute(:rprop_delta_max, 0.157)
|
290
|
-
end
|
291
|
-
|
292
|
-
def test_rprop_delta_zero
|
293
|
-
verify_fann_attribute(:rprop_delta_zero, 0.571)
|
294
|
-
end
|
295
|
-
|
296
|
-
def test_learning_momentum
|
297
|
-
verify_fann_attribute(:learning_momentum, 0.231)
|
298
|
-
end
|
299
|
-
|
300
|
-
def test_learning_rate
|
301
|
-
verify_fann_attribute(:learning_rate, 0.012)
|
302
|
-
end
|
303
|
-
|
304
|
-
def test_cascade_train
|
305
|
-
train = RubyFann::TrainData.new(:inputs=>[[0.3, 0.4, 0.5], [0.1, 0.2, 0.3]], :desired_outputs=>[[0.7], [0.8]])
|
306
|
-
fann = RubyFann::Shortcut.new(:num_inputs=>5, :num_outputs=>1) # RubyFann::Shortcut.new(7, 5, [2, 8, 4, 3, 4], 1)
|
307
|
-
fann.cascadetrain_on_data(train, 1000, 10, 0.1)
|
308
|
-
end
|
309
|
-
|
310
|
-
def test_get_neurons
|
311
|
-
train = RubyFann::TrainData.new(:inputs=>[[0.3, 0.4, 0.5], [0.1, 0.2, 0.3]], :desired_outputs=>[[0.7, 0.3], [0.8, 0.4]])
|
312
|
-
fann = RubyFann::Shortcut.new(:num_inputs=>5, :num_outputs=>2) # RubyFann::Shortcut.new(7, 5, [2, 8, 4, 3, 4], 1)
|
313
|
-
fann.cascadetrain_on_data(train, 30, 10, 0.0000000000001)
|
314
|
-
neurons = fann.get_neurons()
|
315
|
-
assert_equal(38, neurons.length)
|
316
|
-
neurons.each_with_index {|n, i| puts "NEURON[#{i}]: #{n.inspect}" }
|
317
|
-
end
|
318
|
-
|
319
|
-
def test_cascade_output_change_fraction
|
320
|
-
verify_fann_attribute(:cascade_output_change_fraction, 0.222, true)
|
321
|
-
end
|
322
|
-
|
323
|
-
def test_cascade_output_stagnation_epochs
|
324
|
-
verify_fann_attribute(:cascade_output_stagnation_epochs, 4, true)
|
325
|
-
end
|
326
|
-
|
327
|
-
def test_cascade_candidate_change_fraction
|
328
|
-
verify_fann_attribute(:cascade_candidate_change_fraction, 0.987, true)
|
329
|
-
end
|
330
|
-
|
331
|
-
def test_cascade_candidate_stagnation_epochs
|
332
|
-
verify_fann_attribute(:cascade_candidate_stagnation_epochs, 5, true)
|
333
|
-
end
|
334
|
-
|
335
|
-
def test_cascade_weight_multiplier
|
336
|
-
verify_fann_attribute(:cascade_weight_multiplier, 0.754, true)
|
337
|
-
end
|
338
|
-
|
339
|
-
def test_cascade_candidate_limit
|
340
|
-
verify_fann_attribute(:cascade_candidate_limit, 0.222, true)
|
341
|
-
end
|
342
|
-
|
343
|
-
def test_cascade_cascade_max_out_epochs
|
344
|
-
verify_fann_attribute(:cascade_max_out_epochs, 77, true)
|
345
|
-
end
|
346
|
-
|
347
|
-
def test_cascade_max_cand_epochs
|
348
|
-
verify_fann_attribute(:cascade_max_cand_epochs, 66, true)
|
349
|
-
end
|
350
|
-
|
351
|
-
def test_cascade_num_candidate_groups
|
352
|
-
verify_fann_attribute(:cascade_num_candidate_groups, 6, true)
|
353
|
-
end
|
354
|
-
|
355
|
-
def test_cascade_num_candidates
|
356
|
-
fann = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1) # RubyFann::Standard.new(7, 5, [2, 8, 4, 3, 4], 1)
|
357
|
-
x = fann.get_cascade_activation_functions_count
|
358
|
-
y = fann.get_cascade_activation_steepnesses_count
|
359
|
-
z = fann.get_cascade_num_candidate_groups
|
360
|
-
assert_equal((x * y * z), fann.get_cascade_num_candidates)
|
361
|
-
end
|
362
|
-
|
363
|
-
def test_cascade_activation_functions
|
364
|
-
fann = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1) # RubyFann::Standard.new(7, 5, [2, 8, 4, 3, 4], 1)
|
365
|
-
fann.set_cascade_activation_functions([:threshold, :sigmoid])
|
366
|
-
assert_equal(2, fann.get_cascade_activation_functions_count)
|
367
|
-
assert_equal([:threshold, :sigmoid], fann.get_cascade_activation_functions)
|
368
|
-
end
|
369
|
-
|
370
|
-
def test_cascade_activation_steepness
|
371
|
-
fann = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1) # RubyFann::Standard.new(7, 5, [2, 8, 4, 3, 4], 1)
|
372
|
-
fann.set_cascade_activation_steepnesses([0.1, 0.3, 0.7, 0.5])
|
373
|
-
assert_equal(4, fann.get_cascade_activation_steepnesses_count)
|
374
|
-
assert_equal([0.1, 0.3, 0.7, 0.5], fann.get_cascade_activation_steepnesses)
|
375
|
-
end
|
376
|
-
|
377
|
-
def test_train_exception
|
378
|
-
# Mismatched inputs & outputs
|
379
|
-
assert_raises(RuntimeError) {
|
380
|
-
RubyFann::TrainData.new(
|
381
|
-
{
|
382
|
-
:inputs=>[[0.2, 0.3, 0.4], [0.8, 0.9, 0.7]],
|
383
|
-
:desired_outputs=>[[3.14]]
|
384
|
-
}
|
385
|
-
)
|
386
|
-
}
|
387
|
-
|
388
|
-
# Wrong arg type:
|
389
|
-
assert_raises(TypeError) { RubyFann::TrainData.new('not_a_hash') }
|
390
|
-
|
391
|
-
# Bad key in hash:
|
392
|
-
assert_raises(RuntimeError) { RubyFann::TrainData.new({:not_a_real_value=>1}) }
|
393
|
-
|
394
|
-
# Bad value in hash:
|
395
|
-
assert_raises(RuntimeError) { RubyFann::TrainData.new({:inputs=>1, :desired_outputs=>2}) }
|
396
|
-
|
397
|
-
# Inconsistent inputs
|
398
|
-
assert_raises(RuntimeError) {
|
399
|
-
RubyFann::TrainData.new(
|
400
|
-
{
|
401
|
-
:inputs=>[[0.2, 0.3, 0.4], [0.8]],
|
402
|
-
:desired_outputs=>[[3.14], [4.33]]
|
403
|
-
}
|
404
|
-
)
|
405
|
-
}
|
406
|
-
|
407
|
-
# Inconsistent outputs
|
408
|
-
assert_raises(RuntimeError) {
|
409
|
-
RubyFann::TrainData.new(
|
410
|
-
{
|
411
|
-
:inputs=>[[0.2, 0.3, 0.4], [0.5, 0.8, 0.7]],
|
412
|
-
:desired_outputs=>[[3.14], [0.4, 0.5]]
|
413
|
-
}
|
414
|
-
)
|
415
|
-
}
|
416
|
-
|
417
|
-
# No errors:
|
418
|
-
assert_nothing_raised(){
|
419
|
-
RubyFann::TrainData.new(
|
420
|
-
{
|
421
|
-
:inputs=>[[0.2, 0.3, 0.4], [0.8, 0.9, 0.7]],
|
422
|
-
:desired_outputs=>[[3.14], [6.33]]
|
423
|
-
}
|
424
|
-
)
|
425
|
-
}
|
426
|
-
|
427
|
-
end
|
428
|
-
|
429
|
-
private
|
430
|
-
# Set & get fann attribute & verify:
|
431
|
-
def verify_fann_attribute(attr, val, shortcut=false)
|
432
|
-
fann = nil
|
433
|
-
if shortcut
|
434
|
-
fann = RubyFann::Shortcut.new(:num_inputs=>1, :num_outputs=>1)
|
435
|
-
else
|
436
|
-
fann = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)
|
437
|
-
end
|
438
|
-
fann.send("set_#{attr}", val)
|
439
|
-
retrieved_val = fann.send("get_#{attr}")
|
440
|
-
assert_equal(val, retrieved_val)
|
441
|
-
end
|
442
|
-
|
443
|
-
end
|
444
|
-
|