neuro 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit/ui/console/testrunner'
4
+ require 'test/unit/testsuite'
5
+ $:.unshift File.expand_path(File.dirname($0))
6
+ require 'test_parity'
7
+ require 'test_even_odd'
8
+
9
+ class TS_AllTests
10
+ def self.suite
11
+ suite = Test::Unit::TestSuite.new
12
+ suite << TC_Parity.suite
13
+ suite << TC_EvenOdd.suite
14
+ suite
15
+ end
16
+ end
17
+ Test::Unit::UI::Console::TestRunner.run(TS_AllTests)
18
+ # vim: set et sw=2 ts=2:
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Stupid little test, that finds out if 5-bit numbers are even or odd.
4
+ #
5
+ require 'test/unit'
6
+ require 'neuro'
7
+
8
+ class TC_EvenOdd < Test::Unit::TestCase
9
+ include Neuro
10
+
11
+ @@even = [
12
+ [ 0, 0, 1, 1, 0 ],
13
+ [ 1, 1, 0, 1, 0 ],
14
+ [ 1, 0, 1, 1, 0 ],
15
+ [ 0, 1, 0, 1, 0 ],
16
+ [ 1, 0, 1, 0, 0 ],
17
+ [ 0, 1, 0, 1, 0 ],
18
+ ]
19
+
20
+ @@odd = [
21
+ [ 1, 0, 0, 1, 1 ],
22
+ [ 1, 1, 1, 0, 1 ],
23
+ [ 0, 0, 0, 1, 1 ],
24
+ [ 0, 1, 0, 0, 1 ],
25
+ [ 0, 1, 0, 1, 1 ],
26
+ [ 1, 1, 1, 1, 1 ],
27
+ ]
28
+
29
+ def setup
30
+ @eta = 0.2
31
+ filename = 'test_even_odd.rb.dump'
32
+ if File.exist?(filename)
33
+ File.open(filename) do |f|
34
+ @network = Network.load(f)
35
+ end
36
+ else
37
+ @network = Network.new(5, 2, 1)
38
+ @network.debug = STDERR
39
+ @network.debug_step = 1000
40
+ max_error = 1.0E-5
41
+ max_count = (@@even.size + @@odd.size) * 10
42
+ count = max_count
43
+ until count < max_count
44
+ count = 0
45
+ desired = [ 0.9 ]
46
+ @@even.each do |sample|
47
+ count += @network.learn(sample, desired, max_error, @eta)
48
+ end
49
+ desired = [ 0.1 ]
50
+ @@odd.each do |sample|
51
+ count += @network.learn(sample, desired, max_error, @eta)
52
+ end
53
+ end
54
+ File.open(filename, 'wb') do |f|
55
+ @network.dump(f)
56
+ end
57
+ end
58
+ end
59
+
60
+ def test_hypothesis
61
+ for x in 0..31
62
+ vector = (0..4).map { |i| x[i] }.reverse
63
+ result, = @network.decide vector
64
+ bit = (result - 0.9).abs < @eta ? 0 : 1
65
+ assert_equal x[0], bit
66
+ end
67
+ end
68
+ end
69
+ # vim: set et sw=2 ts=2:
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'neuro'
5
+
6
+ class TC_Parity < Test::Unit::TestCase
7
+ include Neuro
8
+
9
+ MAX_BITS = 4
10
+ def setup
11
+ filename = 'test_parity.rb.dump'
12
+ if File.exist?(filename)
13
+ File.open(filename) do |f|
14
+ @network = Network.load(f)
15
+ end
16
+ else
17
+ @network = Network.new(MAX_BITS, MAX_BITS * 2, 1)
18
+ @network.debug = STDERR
19
+ @network.debug_step = 1000
20
+ eta = 0.2
21
+ max_error = 1.0E-6
22
+ vectors = all_vectors
23
+ max_count = vectors.size * 10
24
+ count = max_count
25
+ until count < max_count
26
+ count = 0
27
+ vectors.sort_by { rand }.each do |sample|
28
+ desired = [ parity(sample) == 1 ? 0.9 : 0.1 ]
29
+ count += @network.learn(sample, desired, max_error, eta)
30
+ end
31
+ end
32
+ File.open(filename, 'wb') do |f|
33
+ @network.dump(f)
34
+ end
35
+ end
36
+ end
37
+
38
+ def parity(vector)
39
+ (vector.inject(1) { |s,x| s * (x < 0.5 ? -1 : 1) }) < 0 ? 1 : 0
40
+ end
41
+
42
+ def all_vectors
43
+ vectors = []
44
+ for x in 0...(2 ** MAX_BITS)
45
+ vectors << (0...MAX_BITS).map { |i| x[i].zero? ? 0.0 : 1.0 }.reverse
46
+ end
47
+ vectors
48
+ end
49
+
50
+ def test_parities
51
+ all_vectors.each do |vector|
52
+ result, = @network.decide vector
53
+ result_parity = result > ((0.9 - 0.1) / 2) ? 1 : 0
54
+ assert_equal parity(vector), result_parity
55
+ end
56
+ end
57
+ end
58
+ # vim: set et sw=2 ts=2:
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.11
3
+ specification_version: 1
4
+ name: neuro
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.4.0
7
+ date: 2005-10-03 00:00:00 +02:00
8
+ summary: Neural Network Extension for Ruby
9
+ require_paths:
10
+ - ext
11
+ email: flori@ping.de
12
+ homepage: http://neuro.rubyforge.org
13
+ rubyforge_project: neuro
14
+ description: "A Ruby extension that provides a 2-Layer Back Propagation Neural Network, which
15
+ can be used to categorize datasets of arbitrary size."
16
+ autorequire: neuro
17
+ default_executable:
18
+ bindir: bin
19
+ has_rdoc: true
20
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
21
+ requirements:
22
+ -
23
+ - ">"
24
+ - !ruby/object:Gem::Version
25
+ version: 0.0.0
26
+ version:
27
+ platform: ruby
28
+ signing_key:
29
+ cert_chain:
30
+ authors:
31
+ - Florian Frank
32
+ files:
33
+ - examples
34
+ - Rakefile
35
+ - VERSION
36
+ - install.rb
37
+ - ext
38
+ - lib
39
+ - tests
40
+ - examples/ocr.rb
41
+ - ext/extconf.rb
42
+ - ext/neuro.c
43
+ - lib/neuro
44
+ - lib/neuro/display.rb
45
+ - tests/runner.rb
46
+ - tests/test_even_odd.rb
47
+ - tests/test_parity.rb
48
+ test_files:
49
+ - tests/runner.rb
50
+ rdoc_options:
51
+ - "--main"
52
+ - Neuro
53
+ extra_rdoc_files:
54
+ - ext/neuro.c
55
+ executables: []
56
+ extensions:
57
+ - ext/extconf.rb
58
+ requirements: []
59
+ dependencies: []