嗨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)以防万一。
有人能指出我正确的方向吗?非常感谢。
答案 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}