class NeuralNetwork
Attributes
biases[RW]
names[RW]
neurons[RW]
weights[RW]
Public Class Methods
from_hash(hash)
click to toggle source
# File lib/neural-network.rb, line 41 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
new(sizes)
click to toggle source
# File lib/neural-network.rb, line 5 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
Public Instance Methods
[](name)
click to toggle source
# File lib/neural-network.rb, line 88 def [](name) @neurons[@names[name][0]][@names[name][1]] end
[]=(name, value)
click to toggle source
# File lib/neural-network.rb, line 91 def []=(name, value) @neurons[@names[name][0]][@names[name][1]] = value end
feed_forward()
click to toggle source
# File lib/neural-network.rb, line 73 def feed_forward (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 (0..@neurons[i].length - 1).each do |j| @neurons[i][j] = sigmoid(outputs[j, 0]) end end outputs end
inputs()
click to toggle source
# File lib/neural-network.rb, line 67 def inputs @neurons.length > 0 ? @neurons[0] : [] end
name_neuron(i, j, name)
click to toggle source
# File lib/neural-network.rb, line 85 def name_neuron(i, j, name) @names[name] = [i, j] end
outputs()
click to toggle source
# File lib/neural-network.rb, line 64 def outputs @neurons.length > 0 ? @neurons[-1] : [] end
sizes()
click to toggle source
# File lib/neural-network.rb, line 94 def sizes s = [] @neurons.each do |layer| s << layer.length end s end
think()
click to toggle source
# File lib/neural-network.rb, line 70 def think feed_forward end
to_hash()
click to toggle source
# File lib/neural-network.rb, line 30 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
Private Instance Methods
sigmoid(x)
click to toggle source
# File lib/neural-network.rb, line 104 def sigmoid(x) 1.0 / (1.0 + Math::E ** (-x.to_f)) end