【发布时间】:2019-01-15 17:39:34
【问题描述】:
我有一个用例,我需要在 Keras 中将 2D 张量连接到 3D 张量。 3D 张量的维度是动态的(例如,3D 张量可以是形状为[batch_size, num_timesteps, num_features], 的LSTM 层的输出,其中batch_size 和num_timesteps 是动态的)。
在与 3D 张量“合并”操作之前,我使用 RepeatVector 重复 2D 张量的值。
但是,就我而言,“合并”操作会引发错误(错误详情如下)。我在下面分享了我试图实现的操作的代表性代码以及错误。
我怀疑这里的问题是动态形状的 RepeatVector。或者,我是否遗漏了一些更基本的东西?有没有办法可以正确实现这一点?
我正在使用带有 Tensorflow 后端 v1.8.0 的 Keras v2.1.6。
import keras
from keras.layers import *
input_3D = Input(shape=(None,100,), dtype='int32', name='input_3D')
input_2D = Input(shape=(100,), dtype='int32', name='input_2D')
input_2D_repeat = RepeatVector(K.shape(input_3D)[1])(input_2D)
merged = merge([input_3D, input_2D_repeat], name="merged", mode='concat')
上述代码在“合并”操作中抛出以下错误:
ValueError:“concat”模式只能合并具有匹配输出的层 除 concat 轴外的形状。图层形状:[(无,无,100), (无, , 100)]
我可以看到input_3D 中的第二个维度是None,但input_2D_repeat 中的第二个维度是tf.Tensor 'strided_slice:0' shape=() dtype=int32。
我该如何解决这个问题?
【问题讨论】:
标签: python tensorflow keras keras-layer