Class: NeuralNetwork
- Inherits:
-
Object
- Object
- NeuralNetwork
- Defined in:
- lib/neural-network.rb
Instance Attribute Summary collapse
-
#biases ⇒ Object
Returns the value of attribute biases.
-
#names ⇒ Object
Returns the value of attribute names.
-
#neurons ⇒ Object
Returns the value of attribute neurons.
-
#weights ⇒ Object
Returns the value of attribute weights.
Class Method Summary collapse
Instance Method Summary collapse
- #[](name) ⇒ Object
- #[]=(name, value) ⇒ Object
- #feed_forward ⇒ Object
-
#initialize(sizes) ⇒ NeuralNetwork
constructor
A new instance of NeuralNetwork.
- #inputs ⇒ Object
- #name_neuron(i, j, name) ⇒ Object
- #outputs ⇒ Object
- #sizes ⇒ Object
- #think ⇒ Object
- #to_hash ⇒ Object
Constructor Details
#initialize(sizes) ⇒ NeuralNetwork
Returns a new instance of NeuralNetwork.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/neural-network.rb', line 3 def initialize(sizes) @weights = [] @biases = [] @neurons = [] @names = {} @@rng = Distribution::Normal.rng num_layers = sizes.length (0..num_layers - 1).each do |i| @neurons << [] unless i == 0 @biases << [] @weights << [] end (0..sizes[i] - 1).each do |j| @neurons[-1] << 0.0 unless i == 0 @biases[-1] << @@rng.call @weights[-1] << [] (0..sizes[i - 1] - 1).each do |k| @weights[-1][j] << @@rng.call end end end end end |
Instance Attribute Details
#biases ⇒ Object
Returns the value of attribute biases.
2 3 4 |
# File 'lib/neural-network.rb', line 2 def biases @biases end |
#names ⇒ Object
Returns the value of attribute names.
2 3 4 |
# File 'lib/neural-network.rb', line 2 def names @names end |
#neurons ⇒ Object
Returns the value of attribute neurons.
2 3 4 |
# File 'lib/neural-network.rb', line 2 def neurons @neurons end |
#weights ⇒ Object
Returns the value of attribute weights.
2 3 4 |
# File 'lib/neural-network.rb', line 2 def weights @weights end |
Class Method Details
.from_hash(hash) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/neural-network.rb', line 39 def self.from_hash(hash) sizes = [] hash['neurons'].each do |layer| sizes << layer.length end n = NewNeuralNetwork.new(sizes) (0..n.neurons.length - 1).each do |i| (0..n.neurons[i].length - 1).each do |j| n.neurons[i][j] = hash['neurons'][i][j] end end (0..n.weights.length - 1).each do |i| (0..n.weights[i].length - 1).each do |j| (0..n.neurons[i].length - 1).each do |k| n.weights[i][j][k] = hash['weights'][i][j][k] end end end hash['names'].each do |key, value| n.names[key] = value end n end |
Instance Method Details
#[](name) ⇒ Object
88 89 90 |
# File 'lib/neural-network.rb', line 88 def [](name) @neurons[@names[name][0]][@names[name][1]] end |
#[]=(name, value) ⇒ Object
91 92 93 |
# File 'lib/neural-network.rb', line 91 def []=(name, value) @neurons[@names[name][0]][@names[name][1]] = value end |
#feed_forward ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/neural-network.rb', line 71 def feed_forward zs = [] (1..@neurons.length - 1).each do |i| a = Matrix.rows(@weights[i - 1], false) b = Matrix.columns([@neurons[i - 1]]) c = Matrix.columns([@biases[i - 1]]) outputs = a * b + c zs << outputs (0..@neurons[i].length - 1).each do |j| @neurons[i][j] = Util.sigmoid(outputs[j, 0]) end end outputs end |
#inputs ⇒ Object
65 66 67 |
# File 'lib/neural-network.rb', line 65 def inputs @neurons.length > 0 ? @neurons[0] : [] end |
#name_neuron(i, j, name) ⇒ Object
85 86 87 |
# File 'lib/neural-network.rb', line 85 def name_neuron(i, j, name) @names[name] = [i, j] end |
#outputs ⇒ Object
62 63 64 |
# File 'lib/neural-network.rb', line 62 def outputs @neurons.length > 0 ? @neurons[-1] : [] end |
#sizes ⇒ Object
94 95 96 97 98 99 100 |
# File 'lib/neural-network.rb', line 94 def sizes s = [] @neurons.each do |layer| s << layer.length end s end |
#think ⇒ Object
68 69 70 |
# File 'lib/neural-network.rb', line 68 def think feed_forward end |
#to_hash ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/neural-network.rb', line 28 def to_hash hash = {} hash['weights'] = Marshal.load(Marshal.dump(@weights)) hash['biases'] = Marshal.load(Marshal.dump(@biases)) hash['neurons'] = Marshal.load(Marshal.dump(@neurons)) hash['names'] = {} names.each do |key, value| hash['names'][key] = value end hash end |