Как инициализировать символьную переменную в mxnet - PullRequest
0 голосов
/ 05 апреля 2019

Я попытался создать какой-то очень простой код 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 Ответ

1 голос
/ 12 апреля 2019

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

...