在keras中使用ConvLSTM2D,Dense,Dropout层实现遮罩层

问题描述

我正在尝试在模型中实现Masking层,但是它不起作用,并且不明白为什么...

我想根据一些连续的网格化数据(预测变量)预测一个连续的时间序列(预测变量)。我的预报和变量未连续记录,因此我的训练/验证数据中存在一些难点。

为避免此问题,我看到人们可以实现一个Masking层并跳过这些有问题的时间步骤。每当时间序列中存在nan值时,我都会将输入数据更改为掩码值(此处为9999)。但是当我运行下面的代码时,出现以下错误:

ValueError:两个形状中的尺寸1必须相等,但必须为5和25。形状为[?,5,5,8]和[?,25,25,8]。对于输入形状为[?,25,8],[?,8]的'conv_lst_m2d_1 / while / Select'(op:'Select')。

我认为这是由于遮罩层的形状与输入数据的形状不同。但是我不知道怎么回事,因为我给出了输入数据的维数。我在做什么错了?

    import keras
    from keras import layers

    input = keras.Input(shape=input_shape) #input_shape is (1,1)
    mask = layers.Masking(mask_value=9999,input_shape=input_shape).compute_mask(input)
    lay_convlstm = layers.ConvLSTM2D(filters=8,kernel_size=(3,3),padding="same",return_sequences=True,activation='relu')(input,mask=mask)  # This will not work 
    pool_out = layers.MaxPooling3D(pool_size=(1,2,2))(lay_convlstm)
    flat = layers.Flatten()(pool_out)
    hidden = layers.Dense(neurons,activation='relu',kernel_regularizer=keras.regularizers.l1_l2(l1=0,l2=0.01))(flat)
    hidden = layers.Dropout(0.5)(hidden)
    outputs = layers.Dense(1)(hidden)

    model = keras.Model(inputs=input,outputs=outputs)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...