Erlang产生过程错误(人工神经网络)

时间:2015-02-18 10:25:33

标签: process erlang

嗨Erlang初学者试图在Wil Chung的this tutorial之后实现一个基本的ANN(人工神经网络)。代码与他的github repo完全相同。

运行此:

  

1> ann_test:run()的

导致一堆(准确的五个)错误,如下所示:

  

=错误报告==== 2015年2月18日:: 07:11:49   ===过程中的错误< 0.60.0>退出值:{undef,[{ann,perceptron,[[],[],[]],[]}]}
  =错误报告==== 2015年2月18日:: 07:11:49   ===过程中的错误< 0.61.0>退出值:{undef,[{ann,perceptron,[[],[],[]],[]}]}

以某种方式在 ann_test.erl 中产生流程:

  

X1_pid = spawn(ann,perceptron,[[],[],[]]),

导致麻烦,但我不确定如何追踪它。尝试使用redbug将问题定位到 ann_test:运行 ann:perceptron ,但它没有显示任何内容。还尝试将 process_flag(trap_exit,true)添加到run()中,但没有再添加。还尝试添加 -compile(export_all)以防万一。

有人能指出我正确的方向吗?非常感谢。

2 个答案:

答案 0 :(得分:3)

此代码存在错误。此错误表示没有与参数匹配的导出函数ann:perceptron/3。只有ann:perceptron/4。它已在ann_test:setup/0中正确使用,因此要修复它,只需添加另一个空列表:

run() -> 
  ann_graph:start(),
  X1_pid = spawn(ann, perceptron, [[],[],[]]),
  X2_pid = spawn(ann, perceptron, [[],[],[]]),
  H1_pid = spawn(ann, perceptron, [[],[],[]]),
  H2_pid = spawn(ann, perceptron, [[],[],[]]),

  O_pid = spawn(ann, perceptron,  [[],[],[]]),

更改为:

run() -> 
  ann_graph:start(),
  X1_pid = spawn(ann, perceptron, [[],[],[],[]]),
  X2_pid = spawn(ann, perceptron, [[],[],[],[]]),
  H1_pid = spawn(ann, perceptron, [[],[],[],[]]),
  H2_pid = spawn(ann, perceptron, [[],[],[],[]]),

  O_pid = spawn(ann, perceptron,  [[],[],[],[]]),

请注意,执行后此代码不会清除,并且在同一会话中最终重新执行后会出现错误。要取消已注册的流程ann_grapher,您可以使用exit(whereis(ann_grapher), kill).

答案 1 :(得分:1)

您可以通过以下方式阅读此错误消息{undef,[{ann,perceptron,[[],[],[]],[]}]}

  • 没有功能(undef
  • 模块ann 中的
  • 名为perceptron
  • 有三个参数,都是空列表[[], [], []]

这是正确的,因为只有一个定义,需要4个参数,而不是3个。在ann_test:setup中,perceptron产生了四个空列表。你可以试试。

换句话说,错误massege中的元组具有结构{Module, Function, ListOfArguments, NotSureWhatThatIs}