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

时间:2020-10-05 16:37:53

标签: python keras mask masking

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

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

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

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

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

    import keras
    from keras import layers

    input = keras.Input(shape=input_shape) #input_shape is (1,5,5,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)

0 个答案:

没有答案