python - 如何在 Keras 中添加常量张量?
问题描述
我想要做的是在网络的输出中添加一个常量张量:
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)
这在 tensorflow 中是微不足道的,但在 Keras 中怎么做呢?
解决方案
似乎可以用 Lamda 层完成:
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)
推荐阅读
- .net - 使用Orleans,如何实现分布式数据存储的分布式计算?
- android - 匕首 2 视图模型和 ViewModelProvider.Factory
- vb.net - 使用 BindingSource 中的文本框搜索 DataGridView
- java - Intellij 如何不将标签放在单独的行上?
- javascript - 弹出窗口内的 Kendo React Grid:为什么 getComputedStyle 为 IE11 和 Edge 返回 null,而不是 Chrome、Opera 和 Firefox?
- c# - C# - 在 ReadAllBytes 之后清除 RAM
- java - 使用从 SQLite 概括的数据填充 RecyclerView/ListView
- ios - 我想将 Apple Pay 集成到我的应用中。Apple 会照顾收款方吗?
- swift - 在 Timer 中调用函数
- python - 我可以使用 pandas to_sql 方法添加约束吗?