Neural network 矩阵向量乘法的Keras-Lambda层
我试图在keras中有一个lambda层,它执行向量矩阵乘法,然后将它传递到另一层。矩阵是固定的(我不想学习它)。代码如下:Neural network 矩阵向量乘法的Keras-Lambda层,neural-network,deep-learning,keras,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>)} model.add(退出(0.1)) model.add(Lam
model.add(Dropout(0.1))
model.add(Lambda(lambda x: x.dot(A)))
model.add(Dense(output_shape, activation='softmax'))
model.compile(<stuff here>)}
model.add(退出(0.1))
model.add(Lambda(Lambda x:x.dot(A)))
添加(密集(输出_形,激活='softmax'))
model.compile()}
A是固定矩阵,我想做x.dot(A)
当我运行此操作时,会出现以下错误:
“张量”对象没有属性“点”
当我用matmul替换dot时出现相同的错误(我使用的是tensorflow后端)
最后,当我将lambda层替换为
model.add(Lambda(Lambda x:x*A))
我得到以下错误:
model.add(Lambda(Lambda x:x*G))
model.add(密集型(输出_形,activation='softmax'))
AttributeError:“tuple”对象没有属性“\u dims”
我是Keras的新手,所以任何帮助都将不胜感激。谢谢我认为您可以添加一个
密集
层,初始权重为矩阵a
,并设置参数trainable=False
和use_bias=False
。这一层相当于一个固定的矩阵乘法
model.add(密集型(A.shape[1],trainable=False,weights=A,use_bias=False))
为lambda创建一个函数:
import keras.backend as K
import numpy as np
numpyA = np.array(define A correctly here, with 2 dimensions)
def multA(x):
A = K.variable(numpyA)
return K.dot(x,A)
model.add(Lambda(multA))
这似乎是合理的,我试过了,但得到了以下结果:层权重形状(1265)与提供的权重形状(265265)不兼容。265是A.shape[1](它是一个方阵)您能提供
model.summary()
?似乎前一层的输出尺寸等于1。如果前一层的输出形状是(None,265,1)
,那么我认为您可以通过添加展平
层来删除额外的轴。不,前一层是(None,265)。我实现了@Daniel的方法,但这对我来说很有效