Python 如何使用theano或lasagne在特定位置将权重值保持为零?
我是西亚诺和千层面的使用者 我在处理输入矩阵的可变长度时遇到了一个问题 i、 (e) 所以,我试着使用填充物Python 如何使用theano或lasagne在特定位置将权重值保持为零?,python,neural-network,theano,lasagne,Python,Neural Network,Theano,Lasagne,我是西亚诺和千层面的使用者 我在处理输入矩阵的可变长度时遇到了一个问题 i、 (e) 所以,我试着使用填充物 matrix_padding_embedding = [ [ 0.1, 0.2, 0.3], [ 0.4, 0.5, 0.6], [ 0.2, 0.3, 0.5], [ 0.5, 0.6, 0.7],
matrix_padding_embedding = [ [ 0.1, 0.2, 0.3],
[ 0.4, 0.5, 0.6],
[ 0.2, 0.3, 0.5],
[ 0.5, 0.6, 0.7],
[ 0.0, 0.0, 0.0] ]
x1 = [0, 1, 3]
x2 = [1, 2, -1]
matrix_embedding[x1] = [
[ 0.1, 0.2, 0.3],
[ 0.4, 0.5, 0.6],
[ 0.5, 0.6, 0.7]
]
matrix_embedding[x2] = [
[ 0.4, 0.5, 0.6],
[ 0.2, 0.3, 0.5],
[ 0.0, 0.0, 0.0] ]
但是,经过处理后,theano会更新参数matrix_padding_embedding,因此matrix_padding_embedding[-1]不再是0
如何在矩阵填充嵌入[-1]中保持权重值为零
或者,是否有其他处理可变长度的方法?您可以通过连接两个矩阵来创建填充矩阵,如
import theano as the
import theano.tensor as ten
import numpy as np
matrix_embedding = the.shared(np.asarray([[0.1, 0.2, 0.3],
[0.4, 0.5, 0.6],
[0.2, 0.3, 0.5],
[0.5, 0.6, 0.7]]))
matrix_padding_embedding = ten.concatenate((matrix_embedding, ten.zeros((1, 3))))
x = ten.lvector()
y = ten.sum(matrix_padding_embedding[x])
grad = the.grad(y, matrix_embedding)
fn = the.function([x], [matrix_padding_embedding, grad])
x2 = [1, 2, -1]
p, g = fn(x2)
print p
print g
结果是
# [[ 0.1 0.2 0.3]
# [ 0.4 0.5 0.6]
# [ 0.2 0.3 0.5]
# [ 0.5 0.6 0.7]
# [ 0. 0. 0. ]]
#
# [[ 0. 0. 0.]
# [ 1. 1. 1.]
# [ 1. 1. 1.]
# [ 0. 0. 0.]]
谢谢,非常有用!!。
# [[ 0.1 0.2 0.3]
# [ 0.4 0.5 0.6]
# [ 0.2 0.3 0.5]
# [ 0.5 0.6 0.7]
# [ 0. 0. 0. ]]
#
# [[ 0. 0. 0.]
# [ 1. 1. 1.]
# [ 1. 1. 1.]
# [ 0. 0. 0.]]