将卷积层的 4D 张量输出重塑为 5D 张量以馈送到 ConvLSTM2D 层

Reshape a 4D Tensor output of a Convolutional Layer to 5D Tensor to be fed to a ConvLSTM2D layer

我有一个 VGG 预训练模型。我将形状为 (160,120,3) 的图像传递给它,批量大小为 10。批量中的每个帧代表一个时间步长。

我知道 VGG 网络的输出形状为 (10,5,3,512) 因为我已经通过了批量大小 10。但是当我 运行 vggnet.output.shape 我显然得到 (None,5,3,512)

接下来,我想将 VGGnet 的输出提供给 ConvLSTM2D 层。但是为此我想把它转换成 5D 张量。

当我使用 X = tf.keras.layers.Reshape((-1,10,5,3,512))(X) 时,我在训练时遇到错误。 错误是

InvalidArgumentError:  Input to reshape is a tensor with 76800 values, but the requested shape has 768000
     [[node ds_model/reshape_2/Reshape (defined at <ipython-input-40-4fa9476bf8a0>:1) ]] [Op:__inference_train_function_5897]

Function call stack:
train_function

如何解决这个错误?有什么方法可以将4D张量整形为5D吗??

我想将 (None,5,3,512) 转换为 (None,10,5,3,512)

from tensorflow.keras.layers import Layer

NUM_FRAMES = 16

class ReshapeLayer(Layer):
    def call(self,inputs):
        nshape = (BATCH_SIZE,NUM_FRAMES) + inputs.shape[1:]
        return tf.reshape(inputs,nshape)


inp = Input(shape = (H,W,C))
out = ReshapeLayer()(inp)

以上代码用于将 4D 输入重塑为提供的 5D 输入,4D 输入包含 BATCH_SIZE x NUM_FRAMES x H x W x C 个元素。

BATCH_SIZE 用于模型的 LSTM 部分