class Noggin::Network
Constants
- DEFAULTS
Attributes
forward_input[RW]
forward_output[RW]
layers[RW]
options[RW]
Public Class Methods
new(**opts)
click to toggle source
# File lib/noggin/network.rb, line 15 def initialize **opts @options = DEFAULTS.merge opts @layers = [] @ready = false end
Public Instance Methods
input_set_size()
click to toggle source
# File lib/noggin/network.rb, line 119 def input_set_size forward_input.first[:input].size end
pretty_print()
click to toggle source
# File lib/noggin/network.rb, line 123 def pretty_print Noggin::PrettyPrinter.print_network self end
run(input)
click to toggle source
# File lib/noggin/network.rb, line 41 def run input setup_input input run_forwards input layers.last.neurons.first.forward_output end
run_backwards()
click to toggle source
# File lib/noggin/network.rb, line 56 def run_backwards layers.reverse[1..-1].each(&:backward_activate!) end
run_for_error(input)
click to toggle source
# File lib/noggin/network.rb, line 47 def run_for_error input run_forwards input layers.last.neurons.inject(0){ |sum, neuron| sum += neuron.forward_error_output } end
run_forwards(input)
click to toggle source
# File lib/noggin/network.rb, line 52 def run_forwards input layers[1..-1].each(&:forward_activate!) end
setup_backwards()
click to toggle source
# File lib/noggin/network.rb, line 108 def setup_backwards layers.last.neurons.each do |output_neuron| output_neuron.backward_activate_error! output_neuron.backward_activate! end end
setup_expected(expected)
click to toggle source
# File lib/noggin/network.rb, line 115 def setup_expected expected layers.last.neurons.each { |neuron| neuron.expected = expected } end
setup_input(set)
click to toggle source
# File lib/noggin/network.rb, line 98 def setup_input set layers.first.neurons.each_with_index do |neuron, i| neuron.forward_input = neuron.forward_output = set[i] neuron.dests.each do |edge| edge.forward_input = neuron.forward_output edge.forward_activate! end end end
setup_input_layer()
click to toggle source
# File lib/noggin/network.rb, line 76 def setup_input_layer input_layer = Layer.new input_layer.neurons = Array.new(input_set_size){ Noggin::Neuron.new } layers << input_layer end
setup_layers()
click to toggle source
# File lib/noggin/network.rb, line 69 def setup_layers setup_input_layer setup_hidden_layers setup_output_layer @ready = true end
setup_output_layer()
click to toggle source
# File lib/noggin/network.rb, line 91 def setup_output_layer output_layer = Layer.new output_layer.neurons = [ Noggin::Neuron.new ] Noggin::Layer.connect_layers layers.last, output_layer, options[:momentum] layers << output_layer end
train(data_set)
click to toggle source
# File lib/noggin/network.rb, line 21 def train data_set @forward_input = data_set setup_layers unless @ready error = Float::INFINITY laps = 0 until laps >= options[:training_laps] || error < options[:min_training_error] do laps += 1 error = 0 data_set.each do |set| setup_input set[:input] setup_expected set[:expected] error += run_for_error set[:input] setup_backwards run_backwards update_weights end end { total_error: error, training_laps_needed: laps } end
update_weights()
click to toggle source
# File lib/noggin/network.rb, line 60 def update_weights layers.each do |layer| layer.bias.learn! if layer.bias layer.neurons.each do |neuron| neuron.dests.each(&:learn!) end end end