本文介绍了如何在Keras中添加恒定张量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想做的是在网络输出中添加一个常数张量:
What I'm trying to do is to add a constant tensor to output of network:
inputs = Input(shape=(config.N_FRAMES_IN_SEQUENCE, config.IMAGE_H, config.IMAGE_W, config.N_CHANNELS))
cnn = VGG16(include_top=False, weights='imagenet', input_shape=(config.IMAGE_H, config.IMAGE_W, config.N_CHANNELS))
x = TimeDistributed(cnn)(inputs)
x = TimeDistributed(Flatten())(x)
x = LSTM(256)(x)
x = Dense(config.N_LANDMARKS * 2, activation='linear')(x)
mean_landmarks = np.array(config.MEAN_LANDMARKS, np.float32)
mean_landmarks = mean_landmarks.flatten()
mean_landmarks_tf = tf.convert_to_tensor(mean_landmarks)
x = x + mean_landmarks_tf
model = Model(inputs=inputs, outputs=x)
optimizer = Adadelta()
model.compile(optimizer=optimizer, loss='mae')
但是我得到了错误:
ValueError: Output tensors to a Model must be the output of a Keras `Layer` (thus holding past layer metadata). Found: Tensor("add:0", shape=(?, 136), dtype=float32)
它在张量流中是微不足道的,但是如何在Keras中实现呢?
It's trivial in tensorflow, but how to do it in Keras?
推荐答案
似乎可以通过Lamda层完成:
Seems it can be done with Lamda layer:
from keras.layers import Lambda
def add_mean_landmarks(x):
mean_landmarks = np.array(config.MEAN_LANDMARKS, np.float32)
mean_landmarks = mean_landmarks.flatten()
mean_landmarks_tf = tf.convert_to_tensor(mean_landmarks)
x = x + mean_landmarks_tf
return x
x = Lambda(add_mean_landmarks)(x)
这篇关于如何在Keras中添加恒定张量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!