【问题标题】:Queries regarding Symbolic API in MXNet in JuliaJulia 中有关 MXNet 中符号 API 的查询
【发布时间】:2017-01-29 07:43:19
【问题描述】:

我很难理解 Julia 中 MXNet 的符号 API 细微差别。我在 MXNet 文档中看到了一个示例,其中包含以下行:

act1 = mx.Activation(data = fc1, name=:relu1, act_type=:relu)

为什么act_type 被分配符号:relu

:relu 是函数指针吗?如果不是,那么我们在哪里将值分配给:relu 符号?为什么数据没有分配符号?为什么名称被分配一个符号而不是一个字符串?

【问题讨论】:

    标签: julia mxnet


    【解决方案1】:

    符号是“符号”类型的变量的有效值。我的猜测是,内部有一个 switch 样式语句,它根据传递的符号应用特定的子例程,或者,正如您所说,符号本身用于调用特定函数。它是一个符号而不是字符串这一事实可能只是设计问题。没有什么能阻止我们定义这样一个函数,比如接受一个字符串参数,然后使用该字符串调用一个函数。

    请注意,符号与“函数句柄”不同(我认为这是您所混淆的)。换句话说,不,您没有使用这种语法将“函数指针”作为参数传递。

    数据没有分配符号,因​​为大概你应该在调用函数时将实际数据作为第一个参数传递。

    【讨论】:

    • 当您说根据传递的符号执行的 switch 样式语句 - 这是否意味着可以检查 :relu 符号的某些名称。 typeof(:relu) 将给出结果 -Symbol。那么我们如何检查传递了哪种类型的符号
    • 是的。它可能像if name == :relu; callrelu(); elseif name == :expo; callexpo(); end 这样简单。话虽如此,查看源代码,MXNet 库似乎是基于 python 的。有时在 PyCall 中使用符号来调用 python 模块的各个成员。例如如果在 python 中你有mx.relu,在 julia 中通常变成mx[:relu]。这很可能就是这里发生的事情,relumx python 模块的成员或类似的东西。
    • 正如我所怀疑的,它是 PyCall 语法。查看 python 中的等效文档。 (例如,使用 pip 安装 mxnet,然后在 python 中执行 import mxnet 然后 help(mxnet.symbol.Activation) )。请注意(只要安装了 python 模块),您可以通过 using PyCallmxnet = pyimport("mxnet");pybuiltin("help")(mxnet[:symbol][:Activation]) 通过 julia 获得相同的信息
    • 感谢您的解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多