我正在尝试学习神经网络并编写一个简单的反向传播神经网络,该网络使用S形激活函数,随机权重初始化和学习/梯度动量.
当配置2个输入,2个隐藏节点和1时,它无法学习XOR和AND.但是,它会正确学习OR.
我没有看到我做错了什么,所以任何帮助都将不胜感激.
谢谢
编辑:如上所述,我测试了2个隐藏节点,但下面的代码显示了3的配置.我只是忘了在使用3个隐藏节点运行测试后将其更改回2.
network.rb:
module Neural
class Network
attr_accessor :num_inputs, :num_hidden_nodes, :num_output_nodes, :input_weights, :hidden_weights, :hidden_nodes,
:output_nodes, :inputs, :output_error_gradients, :hidden_error_gradients,
:previous_input_weight_deltas, :previous_hidden_weight_deltas
def initialize(config)
initialize_input(config)
initialize_nodes(config)
initialize_weights
end
def initialize_input(config)
self.num_inputs = config[:inputs]
self.inputs = Array.new(num_inputs+1)
self.inputs[-1] = -1
end
def initialize_nodes(config)
self.num_hidden_nodes = config[:hidden_nodes]
self.num_output_nodes = config[:output_nodes]
# treat threshold as an additional input/hidden node with no incoming inputs and a value of -1
self.output_nodes = Array.new(num_output_nodes)
self.hidden_nodes = Array.new(num_hidden_nodes+1)
self.hidden_nodes[-1] = -1
end
def initialize_weights
# …Run Code Online (Sandbox Code Playgroud)