ruby-fann 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -1,7 +0,0 @@
1
- task :ruby_env do
2
- RUBY_APP = if RUBY_PLATFORM =~ /java/
3
- "jruby"
4
- else
5
- "ruby"
6
- end unless defined? RUBY_APP
7
- end
@@ -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]
@@ -1,3 +0,0 @@
1
- 1 3 1
2
- 0.200000 0.300000 0.400000
3
- 3.140000
@@ -1,2 +0,0 @@
1
- require 'test/unit'
2
- require File.dirname(__FILE__) + '/../lib/ruby_fann'
@@ -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
@@ -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
-