class Mirlo::NeuronLayer
Attributes
activations[RW]
build_weight_function[RW]
errors[RW]
previous_layer[RW]
size[RW]
Public Class Methods
new(size)
click to toggle source
# File lib/mirlo/ann/neuron_layer.rb, line 4 def initialize(size) @size = size @errors = Array.new(size, 0) end
Public Instance Methods
activation_function(input)
click to toggle source
# File lib/mirlo/ann/neuron_layer.rb, line 26 def activation_function(input) 1.0/(1 + Math.exp(-input)) end
activation_matrix()
click to toggle source
# File lib/mirlo/ann/neuron_layer.rb, line 18 def activation_matrix inputs_matrix.collect { |i| activation_function(i) } end
build_weight()
click to toggle source
# File lib/mirlo/ann/neuron_layer.rb, line 50 def build_weight @build_weight_function ? @build_weight_function.call : rand(-0.5..0.5) end
calculate_activations()
click to toggle source
# File lib/mirlo/ann/neuron_layer.rb, line 14 def calculate_activations @activations = activation_matrix end
error_matrix()
click to toggle source
# File lib/mirlo/ann/neuron_layer.rb, line 22 def error_matrix Matrix.row_vector(@errors) end
inputs_matrix()
click to toggle source
# File lib/mirlo/ann/neuron_layer.rb, line 9 def inputs_matrix # debugger previous_layer.activation_matrix * weights end
update_weights(learning_rate, momentum = 0)
click to toggle source
# File lib/mirlo/ann/neuron_layer.rb, line 34 def update_weights(learning_rate, momentum = 0) has_momentum = @weights_update && momentum > 0 if has_momentum momentum_matrix = @weights_update.collect { |u| u * momentum } end @weights_update = learning_rate * (previous_layer.activation_matrix.transpose * errors) if has_momentum @weights_update = @weights_update + momentum_matrix end @weights = @weights + @weights_update end
weights()
click to toggle source
# File lib/mirlo/ann/neuron_layer.rb, line 30 def weights @weights ||= Matrix.build(previous_layer.size, size) { build_weight } end