用于矩阵向量乘法的 Keras Lambda 层

NSR*_*NSR 1 neural-network deep-learning keras

我试图在 keras 中有一个 lambda 层,在将其传递到另一层之前执行向量矩阵乘法。矩阵是固定的(我不想学习它)。代码如下:

model.add(Dropout(0.1))    
model.add(Lambda(lambda x: x.dot(A)))
model.add(Dense(output_shape, activation='softmax'))
model.compile(<stuff here>)}
Run Code Online (Sandbox Code Playgroud)

A 是固定矩阵,我想做 x.dot(A)

当我运行这个时,我收到以下错误:

'Tensor' object has no attribute 'dot'

当我用 matmul 替换 dot 时出现同样的错误(我使用的是张量流后端)

最后,当我将 lambda 层替换为

model.add(Lambda(lambda x: x*A))

我收到以下错误:

model.add(Lambda(lambda x: x*G))

model.add(Dense(output_shape, activation='softmax'))

AttributeError: 'tuple' object has no attribute '_dims'

我是 Keras 新手,因此我们将不胜感激。谢谢

Yu-*_*ang 5

我认为您可以添加一个Dense初始权重为矩阵的层A,并设置参数trainable=Falseuse_bias=False。这一层相当于一个固定的矩阵乘法。

model.add(Dense(A.shape[1], trainable=False, weights=[A], use_bias=False))
Run Code Online (Sandbox Code Playgroud)