我有一个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)
答案 0 :(得分:0)
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部分