#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 /