Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keras seq2seq模型如何在培训时屏蔽验证中的填充零?_Keras_Lstm_Masking - Fatal编程技术网

Keras seq2seq模型如何在培训时屏蔽验证中的填充零?

Keras seq2seq模型如何在培训时屏蔽验证中的填充零?,keras,lstm,masking,Keras,Lstm,Masking,我正在做一个基于这个伟大教程的项目 我不得不用零填充输入和输出序列的末尾,以保持它们的长度不变,例如 [72 1 62 0 68 4 72 0 63 0 68 5 83 3 87 1 86 1 84 3 86 13 74 0 71 2 87 5 90 3 63 0 66 0 76 2 36 1 38 1 67 0 34 0 61 4 89 4 62 0 40 0 63 0 31 1 39 5 88 4 68 0 68 0 72 3 71 0 78 3

我正在做一个基于这个伟大教程的项目

我不得不用零填充输入和输出序列的末尾,以保持它们的长度不变,例如

[72 1 62 0 68 4 72 0 63 0 68 5 83 3 87 1 86 1 84 3 86 13 74 0 71 2 87 5 90 3 63 0 66 0 76 2 36 1 38 1 67 0 34 0 61 4 89 4 62 0 40 0 63 0 31 1 39 5 88 4 68 0 68 0 72 3 71 0 78 3 67 1 66 0 64 5 63 1 67 2 61 0 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[77 77 5 76 2 77 78 71 1 79 1 77 76 79 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

然而,这意味着在训练/验证过程中,模型将得到比它应该得到的更高的验证结果,因为它将很容易学会匹配序列的零元素

我在编码器输入和解码器输入中添加了下面的屏蔽功能,但在进行修改后,我得到了错误

encoder_inputs = Input(shape=(None, n_in))
encoder_inputs = Masking(mask_value=0)(encoder_inputs) #****** TEST *****

....

decoder_inputs = Input(shape=(None, n_out))
decoder_inputs = Masking(mask_value=0)(decoder_inputs) #****** TEST *****
ValueError:图形已断开连接:无法获取层“input_14”处的张量张量(“input_14:0”,shape=(None,None,80),dtype=float32)的值。访问以下以前的层时没有问题:['input_13']

def define_models(n_in, n_out, n_units):
# define encoder
encoder_inputs = Input(shape=(None, n_in))
encoder_inputs = Masking(mask_value=0)(encoder_inputs) #****** TEST *****
encoder = LSTM(n_units, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_inputs)
encoder_states = [state_h, state_c]
# define decoder
decoder_inputs = Input(shape=(None, n_out))
decoder_inputs = Masking(mask_value=0)(decoder_inputs) #****** TEST *****
decoder_lstm = LSTM(n_units, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_inputs, initial_state=encoder_states)
decoder_dense = Dense(n_out, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
# define inference encoder
encoder_model = Model(encoder_inputs, encoder_states)
# define inference decoder
decoder_state_input_h = Input(shape=(n_units,))
decoder_state_input_c = Input(shape=(n_units,))
decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]
decoder_outputs, state_h, state_c = decoder_lstm(decoder_inputs, initial_state=decoder_states_inputs)
decoder_states = [state_h, state_c]
decoder_outputs = decoder_dense(decoder_outputs)
decoder_model = Model([decoder_inputs] + decoder_states_inputs, [decoder_outputs] + decoder_states)
# return all models
return model, encoder_model, decoder_model
你知道如何调整它,使新的屏蔽功能工作吗


谢谢

定义图层时请注意不要覆盖图层,尤其是输入

def define_models(n_in, n_out, n_units):

    # define encoder
    enc_inputs = Input(shape=(None, n_in))
    encoder_inputs = Masking(mask_value=0)(enc_inputs) #****** TEST *****
    encoder = LSTM(n_units, return_state=True)
    encoder_outputs, state_h, state_c = encoder(encoder_inputs)
    encoder_states = [state_h, state_c]

    # define decoder
    dec_inputs = Input(shape=(None, n_out))
    decoder_inputs = Masking(mask_value=0)(dec_inputs) #****** TEST *****
    decoder_lstm = LSTM(n_units, return_sequences=True, return_state=True)
    decoder_outputs, _, _ = decoder_lstm(decoder_inputs, initial_state=encoder_states)
    decoder_dense = Dense(n_out, activation='softmax')
    decoder_outputs = decoder_dense(decoder_outputs)
    model = Model([enc_inputs, dec_inputs], decoder_outputs)

    # define inference encoder
    encoder_model = Model(enc_inputs, encoder_states)

    # define inference decoder
    decoder_state_input_h = Input(shape=(n_units,))
    decoder_state_input_c = Input(shape=(n_units,))
    decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]
    decoder_outputs, state_h, state_c = decoder_lstm(decoder_inputs, initial_state=decoder_states_inputs)
    decoder_states = [state_h, state_c]
    decoder_outputs = decoder_dense(decoder_outputs)
    decoder_model = Model([dec_inputs] + decoder_states_inputs, [decoder_outputs] + decoder_states)

    # return all models
    return model, encoder_model, decoder_model

对不起,它确实起作用了。我犯了一个不同的错误。谢谢