Tensorflow keras中的自定义线性变换
我想在keras中构建一个定制层,对最后一层的输出进行线性变换。 例如,我从上一层得到一个输出X,我的新层将输出X.dot(W)+b W的形状是Tensorflow keras中的自定义线性变换,tensorflow,machine-learning,keras,Tensorflow,Machine Learning,Keras,我想在keras中构建一个定制层,对最后一层的输出进行线性变换。 例如,我从上一层得到一个输出X,我的新层将输出X.dot(W)+b W的形状是(49,10),X的形状应该是(64,49),b的形状是(10,) 然而,X的形状是(?,7,7,64),当我试图重塑它时,它变成形状=(64,?)。问号是什么意思?您能告诉我对最后一层的输出进行线性变换的正确方法吗?问号通常表示批量大小,这对模型架构没有影响 您应该能够使用keras.layers.reformate((64,49))(X)重塑您的X
(49,10)
,X的形状应该是(64,49)
,b的形状是(10,)
然而,X的形状是
(?,7,7,64)
,当我试图重塑它时,它变成形状=(64,?)
。问号是什么意思?您能告诉我对最后一层的输出进行线性变换的正确方法吗?问号通常表示批量大小,这对模型架构没有影响
您应该能够使用keras.layers.reformate((64,49))(X)
重塑您的X
您可以将任意tensorflow操作(如tf.matmul
)包装在一个层中,以便在Keras模型中包含自定义层。实现此技巧的最小工作示例:
import tensorflow as tf
from keras.layers import Dense, Lambda, Input
from keras.models import Model
W = tf.random_normal(shape=(128,20))
b = tf.random_normal(shape=(20,))
inp = Input(shape=(10,))
x = Dense(128)(inp)
y = Lambda(lambda x: tf.matmul(x, W) + b)(x)
model = Model(inp, y)
最后:请参阅关于如何使用可训练权重编写自定义层的说明。如何使用模型学习线性变换的权重?您需要编写自定义层。这里的第一个示例基本上涵盖了它: