keras中的自定义线性变换

时间:2018-07-25 16:03:31

标签: tensorflow machine-learning keras

我想在keras中构建一个自定义层,以便对最后一层的输出进行线性变换。 例如,我从最后一层获得输出X,我的新层将输出X.dot(W)+ b。

W的形状为(49,10),X的形状应为(64,49),b的形状为(10,)

但是,X的形状为(?, 7, 7, 64),当我尝试重塑形状时,它的形状为shape=(64, ?)。问号是什么意思?您能告诉我在最后一层的输出上进行线性变换的正确方法吗?

1 个答案:

答案 0 :(得分:1)

问号通常代表批量大小,这对模型体系结构没有影响。

您应该可以用X重塑keras.layers.Reshape((64,49))(X)的形状。

您可以在Lambda层中包装任意张量流操作,例如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)