Как инициализировать символьную переменную в mxnet

#variables #binding #initialization #symbols #mxnet

#переменные #привязка #инициализация #символы #mxnet

Вопрос:

Я попытался создать какой-то очень простой код mxnet, который должен только инициализировать переменную и выводить ее.

Проблема в том, что я не могу выполнить инициализацию.

Я передаю инициализатор в качестве параметра переменной, как указано в документах mxnet

Я уже пытался использовать разные инициализаторы, такие как 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]

Любая идея о том, что здесь происходит, приветствуется.

Ответ №1:

Вы используете самый низкий уровень API MXNet, символьный 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 и использовать инициализатор параметров и т.д., Вы можете использовать Module API. Однако я бы настоятельно рекомендовал использовать императивный MXNet Gluon API. Вы можете обратиться к списку руководств MXNet для получения дополнительной информации:http://mxnet.incubator.apache.org/api/python/docs/tutorials /