【问题标题】:How to initialize a Symbol Variable in mxnet如何在 mxnet 中初始化符号变量
【发布时间】:2019-04-05 16:14:29
【问题描述】:

我尝试创建一些非常基本的 mxnet 代码,它应该只初始化一个变量并输出相同的内容。

问题是,我无法完成初始化。

我将初始化程序作为参数传递给变量,如mxnet docs 中所示

我已经尝试使用不同的初始化器,例如 Xavier、One、Uniform,但所有结果都是相同的 [0,0,0,0] 输出。

import mxnet as mx
cst = mx.init.Constant(value=2)
a = mx.sym.Variable('A', init=cst)
executor = a.simple_bind(ctx=mx.cpu(), A=(1,4))
executor.forward()

输出:

 [[ 0.  0.  0.  0.]]
 <NDArray 1x4 @cpu(0)>]

但我希望输出为 [2, 2, 2, 2]

欢迎任何关于这里发生的事情的想法。

【问题讨论】:

    标签: variables binding initialization symbols mxnet


    【解决方案1】:

    您正在使用最低级别的 MXNet API,即符号 API。您混淆了初始化程序,通常用于初始化模块 API 中的参数,以及计算图的输入。如果您没有在 .forward() 函数中定义它们,您的图形变量将被初始化为 0。

    import mxnet as mx
    
    a = mx.sym.Variable('A')
    executor = a.simple_bind(ctx=mx.cpu(), A=(1,4))
    executor.forward(A=np.ones((1,4))*2)
    
    [
     [[2. 2. 2. 2.]]
     <NDArray 1x4 @cpu(0)>]
    

    如果你想使用符号 API 并使用参数初始化器等,你可以使用模块 API。但是,我强烈推荐命令式 MXNet Gluon API。更多信息可以参考MXNet教程列表:http://mxnet.incubator.apache.org/api/python/docs/tutorials/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 2019-12-07
      • 2012-10-11
      相关资源
      最近更新 更多