Правильный способ добавить массив Numpy и выражение в Dynet? - PullRequest
0 голосов
/ 22 мая 2018

Как правильно добавить параметр и сгенерированный массив в Dynet?Например, когда я пытаюсь сделать следующее:

from dynet import *
import numpy as np
import numpy.matlib as npm

model = ParameterCollection()
....
LayerA = model.add_parameters((1, 100))
LayerA = model.add_parameters((1, 100))
...
normal = np.random.normal(npm.zeros((1, 100)), npm.ones((1, 100)))
Layer = LayerA + cmult(LayerB,normal) # cmult is Dynet component-wise multiplication
...
output = Layer.expr() * activation(...)

выдает следующую ошибку:

TypeError: Argument 'x' has incorrect type (expected _dynet.Expression, got _dynet.Parameters)

Итак, я попробовал это вместо того, что у меня было выше,

Layer = LayerA + cmult(LayerB.expr(),normal)

Но это дает мне следующую ошибку:

TypeError: Argument 'y' has incorrect type (expected _dynet.Expression, got numpy.ndarray)

Так что я подумал, что мне может понадобиться преобразовать массив numpy в выражение dynet,

Layer = LayerA.expr() + cmult(LayerB.expr(),inputTensor(normal))
...
output = Layer * activation(...)

, и он пройдетбезо всякой ошибки, но жалуется куда-то еще, где я звоню output.scalar_value(),

terminate called after throwing an instance of 'std::runtime_error'
what():  Input tensor has more than one element, cannot convert to scalar.
Aborted (core dumped)
...