我有一个使用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)
我猜我没有正确地将遮罩层添加到模型中,但我不确定如何添加它?
np.nan
不应该作为keras
中的掩码值使用? - Itamar Mushkin