【问题标题】:Erlang spawn process error (artificial neural network)Erlang spawn 过程错误(人工神经网络)
【发布时间】:2015-04-19 07:29:34
【问题描述】:

您好 Erlang 初学者,这里尝试按照 Wil Chung 的 this tutorial 实现一个基本的 ANN(人工神经网络)。代码与他的github repo 完全相同。

运行这个:

1> ann_test:run().

导致一堆(准确地说是五个)这样的错误:

=错误报告==== 2015 年 2 月 18 日::07:11:49 === 进程 出错,退出值:{undef,[{ann,perceptron,[[],[],[]],[]}]}
=错误报告==== 2015 年 2 月 18 日::07:11:49 === 进程 出错,退出值:{undef,[{ann,perceptron,[[],[],[]],[]}]}

以某种方式在 ann_test.erl 中生成进程:

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

造成了麻烦,但我不知道如何追踪它。尝试使用 redbug 将其指向 ann_test:runann:perceptron 来定位问题,但它没有显示任何内容。还尝试将 process_flag(trap_exit, true) 添加到 run() 中,但又没有。还尝试添加 -compile(export_all) 以防万一。

谁能指出我正确的方向?非常感谢。

【问题讨论】:

    标签: process erlang


    【解决方案1】:

    此代码存在错误。此错误意味着没有与参数匹配的导出函数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).

    【讨论】:

    • 不知道我是怎么错过的,但非常感谢您的帮助。现在可以了。还要感谢重新杀死进程,已经偶然发现了这一点。
    【解决方案2】:

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

    • 没有功能(undef)
    • 在模块ann
    • perceptron
    • 接受三个参数,都是空列表[[], [], []]

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

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

    【讨论】:

    • 非常感谢您的帮助以及如何阅读错误消息的说明。添加了另一个“[]”,现在可以使用了。
    猜你喜欢
    • 2017-09-01
    • 2011-11-19
    • 1970-01-01
    • 2011-01-22
    • 2011-07-13
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多