Neural network 在Dynet中添加numpy数组和表达式的正确方法?

Neural network 在Dynet中添加numpy数组和表达式的正确方法?,neural-network,nlp,dynet,Neural Network,Nlp,Dynet,在Dynet中添加参数和numpy生成的数组的正确方法是什么?例如,当我尝试以下操作时: 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.

在Dynet中添加参数和numpy生成的数组的正确方法是什么?例如,当我尝试以下操作时:

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)
TypeError: Argument 'y' has incorrect type (expected _dynet.Expression, got numpy.ndarray)
所以,我尝试了这个,而不是上面提到的

Layer = LayerA + cmult(LayerB.expr(),normal)
但它给了我以下的错误

TypeError: Argument 'x' has incorrect type (expected _dynet.Expression, got _dynet.Parameters)
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\u value()
的其他地方抱怨


.scalar\u value()
仅适用于单个值的表达式,请改用
.value()
。谢谢!很好的发现——关于转换本身:生成一个numpy数组然后将其转换为表达式似乎有点奇怪。可能有更好的方法吗?不,表达式运算只能在表达式对象之间进行(这就是为什么您还需要使用
LayerA.expr()
dy.parameter(LayerA))转换参数的原因
。对于numpy数组也是如此。表达式是计算图的组成部分,因此每次更新计算图时都需要进行此转换(
dy.renew\u cg()
)。我明白了-奇怪的问题:有没有办法将参数转换为表达式,然后再将其转换回参数?您可以计算表达式的值(以获取例如数组)并使用它初始化新的参数对象,但我认为您无法直接检索原始参数。您希望实现什么?