【问题标题】:Variable length sequences with keras and masking layers带有 keras 和遮罩层的可变长度序列
【发布时间】:2019-01-10 17:04:20
【问题描述】:

我有一个在 keras 中设计的序列到序列模型来预测数字数据,但我的输入序列长度不同。序列存储在一个 numpy 数组中,其中不存在的值是 NaN

[[0, 1, 2, 3],
 [NaN, 1, 2, NaN]]

例如。如果有的话,NaN 总是在末端,数字总是在数据中不间断的序列,因此例如以下序列不会出现:

[NaN, 0, NaN, 3].

我想在我的模型中使用遮罩层,以便忽略这些 NaN 值,但是目前我所拥有的不起作用,因为我得到的损失始终是 NaN 输出。

encoder_inputs = Input(shape=(None, 1), name='encoder')
masker = Masking(mask_value=np.nan)
masker(encoder_inputs)
encoder = LSTM(units, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_inputs)

# Keep encoder states for decoder, discard outputs
encoder_states = [state_h, state_c]

# Set up the decoder taking the encoder_states to be the initial state vector of the decoder.
decoder_inputs = Input(shape=(None, 1), name='decoder')

# Full output sequences and internal states are returned.  Returned states are used in prediction / inference

decoder = LSTM(units, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder(decoder_inputs, initial_state=encoder_states)

# Gives continuous output at each time step
decoder_dense = Dense(1)
decoder_outputs = decoder_dense(decoder_outputs)

# create model that takes encoder_input_data and decoder_input_data and creates decoder_target_data
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)

我想我没有正确地将遮罩层添加到模型中,但我不确定如何添加它?

【问题讨论】:

    标签: python keras


    【解决方案1】:

    问题是我使用 np.nan 作为我的掩码值。在幕后,掩蔽是通过与导致 NaN 始终存在的二进制掩码相乘来执行的。由于我的数据是实数编号,我无法确定需要的范围,因此我将 mask_value 设置为 sys.float_info.max。

    【讨论】:

    • 所以,澄清一下 - np.nan 不应用作 keras 中的掩码值?
    • 这与 GitHub (github.com/keras-team/keras/issues/2819) 中的此问题类似,但问题出在 np.inf 而不是 np.nan - 这不应触发您建议的推理,如 np.inf等于np.inf,不能说np.nan
    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多