视频帧预测Keras序列模型过度拟合最后一个输入帧

视频帧预测Keras序列模型过度拟合最后一个输入帧,keras,neural-network,conv-neural-network,lstm,tensorflow2.0,Keras,Neural Network,Conv Neural Network,Lstm,Tensorflow2.0,我正在开发一个帧预测模型,其中我使用生成器输入5帧,并希望预测下一帧。Atm下面的模型在对比度方面对我来说运行良好,但是正如您所注意到的,它看起来与最后一个输入帧相似(车辆和前面的物体没有变得更近)。你知道如何通过修改当前模型来解决这个问题吗?提前谢谢你的建议。我不太喜欢干草 # Conv2DLSTM with Gaussian Noise from keras.layers import Lambda, Reshape, Permute, Input, add, Conv3D, Ga

我正在开发一个帧预测模型,其中我使用生成器输入5帧,并希望预测下一帧。Atm下面的模型在对比度方面对我来说运行良好,但是正如您所注意到的,它看起来与最后一个输入帧相似(车辆和前面的物体没有变得更近)。你知道如何通过修改当前模型来解决这个问题吗?提前谢谢你的建议。我不太喜欢干草

    # Conv2DLSTM with Gaussian Noise

from keras.layers import Lambda, Reshape, Permute, Input, add, Conv3D, GaussianNoise, concatenate
from keras.layers import ConvLSTM2D, BatchNormalization, TimeDistributed, Add
from keras.models import Model

c=5

hyperparams['num_epochs'] = 100

x =(ConvLSTM2D(filters=c, kernel_size=(3,3),padding='same',name='conv_lstm1', return_sequences=True))(x)
x =(ConvLSTM2D(filters=c, kernel_size=(3,3),padding='same',name='conv_lstm2', return_sequences=True))(x)
c1 = (ConvLSTM2D(filters=c, kernel_size=(3,3),padding='same',name='c1', return_sequences=True))(x)
c1=(BatchNormalization())(c1)

x = Dropout(0.2)(x)
x =(TimeDistributed(MaxPooling2D(pool_size=(2,2))))(c1)


x =(ConvLSTM2D(filters=2*c,kernel_size=(3,3),padding='same',name='conv_lstm3',return_sequences=True))(x)
x =(ConvLSTM2D(filters=2*c,kernel_size=(3,3),padding='same',name='conv_lstm4',return_sequences=True))(x)
c2=(ConvLSTM2D(filters=2*c,kernel_size=(3,3),padding='same',name='conv_lstm5',return_sequences=True))(x)
c2=(BatchNormalization())(c2)

x = Dropout(0.2)(x)
x =(TimeDistributed(MaxPooling2D(pool_size=(2,2))))(c2)

x =(ConvLSTM2D(filters=2*c,kernel_size=(3,3),padding='same',name='conv_lstm6',return_sequences=True))(x)
x =(ConvLSTM2D(filters=2*c,kernel_size=(3,3),padding='same',name='conv_lstm7',return_sequences=True))(x)
c3 = (ConvLSTM2D(filters=2*c,kernel_size=(3,3),padding='same',name='conv_lstm8',return_sequences=True))(x)
c3=(BatchNormalization())(c3)

x = Dropout(0.2)(x)
x = TimeDistributed(UpSampling2D((2,2)))(c3)
x=(BatchNormalization())(x)
x = concatenate([c2, x])

x = TimeDistributed(Conv2D(c, (3, 3), padding='same'))(x)
#use TimeDistributed to apply a Conv2D layer to each of the 5 timesteps(frames), independently

x = Dropout(0.2)(x)
x = TimeDistributed(UpSampling2D((2,2)))(x)
x=(BatchNormalization())(x)
x = concatenate([c1, x])

x = TimeDistributed(Conv2D(3, (3, 3), padding='same', activation='relu'))(x)
x = Dropout(0.2)(x)
x = TimeDistributed(UpSampling2D((2,2)))(x)


x = TimeDistributed(Conv2D(3, (3, 3), padding='same', activation='relu'))(x)
x = Dropout(0.2)(x)
x = TimeDistributed(MaxPooling2D((2,2)))(x)


output = Conv3D(3, (3, 3, 3), padding='same', activation='relu')(x)
output = Lambda(lambda x: x[:, 4:, :, :, :])(output)

final = Lambda(lambda x: x[:, 4:, :, :, :])(x)

final = concatenate([output, final])

result = Conv2D(3, (3, 3), padding='same', activation='relu')(final)


model=Model(inputs=[inp], outputs=[result])

model.compile(optimizer='adam', loss='mse', metrics=[diff])

model.fit_generator(my_generator())