代码之家  ›  专栏  ›  技术社区  ›  Siladittya

将4D张量重塑为5D张量

  •  0
  • Siladittya  · 技术社区  · 4 年前

    我有一个VGG预训练模型。我将形状(160120,3)的图像传递给它,批量大小为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,10,5,3,512)

    0 回复  |  直到 4 年前
        1
  •  0
  •   Siladittya    4 年前
    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