class Ai::Neat::Layer

Attributes

activationfunc[RW]
bias[RW]
node_type[RW]
nodes[RW]

Public Class Methods

new(node_count, node_type, activationfunc) click to toggle source
# File lib/ai/neat/layer.rb, line 8
def initialize(node_count, node_type, activationfunc)
  @nodes = []
  @bias = nil
  @node_type = node_type
  @activationfunc = activationfunc

  (1..node_count).each do |_i|
    @nodes.push(Node.new)
  end

  @bias = Node.new if @node_type != :output
end

Public Instance Methods

connect(count) click to toggle source
# File lib/ai/neat/layer.rb, line 21
def connect(count)
  @nodes.each do |node|
    node.initWeights(count)
  end

  @bias&.initWeights(count)
end
feed_forward(layer) click to toggle source
# File lib/ai/neat/layer.rb, line 29
def feed_forward(layer)
  (0..(@bias.weights.count - 1)).each do |i|
    layer.nodes[i].value = 0
  end

  @nodes.each do |node|
    (0..(node.weights.count - 1)).each do |w|
      layer.nodes[w].value += node.value * node.weights[w]
    end
  end

  (0..(@bias.weights.count - 1)).each do |w|
    layer.nodes[w].value += @bias.weights[w]
  end

  if layer.activationfunc != :softmax
    layer.nodes.each do |node|
      node.value = Ai::Neat.activationfunc(layer.activationfunc, node.value)
    end
  else
    layer.values = Ai::Neat.activationfunc(layer.activationfunc, layer.values)
  end
end
values() click to toggle source
# File lib/ai/neat/layer.rb, line 53
def values
  result = []

  @nodes.each do |node|
    result.push(node.value)
  end

  result
end
values=(values) click to toggle source
# File lib/ai/neat/layer.rb, line 63
def values=(values)
  (0..(@nodes.count - 1)).each do |i|
    @nodes[i].value = values[i]
  end
end