【问题标题】:'NoneType' object has no attribute '_inbound_nodes' ? Keras seq2seq classification'NoneType' 对象没有属性 '_inbound_nodes' ? Keras seq2seq 分类
【发布时间】:2019-04-25 21:46:27
【问题描述】:

我在创建 Keras 模型时遇到问题。我找到了一个简单的编码器解码器并尝试如下修复它:

   # some encoder code ... .... above is not shown here, where it is too obvious
    encoder_outputs, state_h, state_c = encoder(encoder_inputs)

    encoder_states = [state_h, state_c]

    decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
    decoder_outputs, _, _ = decoder_lstm(encoder_outputs[-1:], initial_state=encoder_states)
    decoder_dense = Dense(num_decoder_tokens, activation='softmax')
    decoder_outputs = decoder_dense(decoder_outputs)

    model = Model(inputs=[encoder_inputs], outputs=decoder_outputs)

它将使用最后一个编码器输出作为解码器输入,并且仅用于单个输出。

我想知道为什么它会在以下位置产生这样的问题:

model = Model(inputs=[encoder_inputs], outputs=decoder_outputs)

并创建消息:

“NoneType”对象没有属性“_inbound_nodes”

我该如何解决?我试图找到类似问题的答案,但我没有找到一个好的答案来解决我的问题。

【问题讨论】:

    标签: python machine-learning keras classification lstm


    【解决方案1】:

    首先,encoder_outputs[-1:] 会给你最后一批,而不是每批的最后一个输出 encoder_outputs[:,-1:]

    其次,由于您需要将 Keras 张量传递给 Keras 中的层,因此您需要使用 Lambda 层进行切片:

    last_input = Lambda(lambda x: x[:,-1:])(encoder_inputs)
    decoder_outputs, _, _ = decoder_lstm(last_input,
                                         initial_state=encoder_states)
    

    【讨论】:

    • 好吧,很抱歉没有通知您解码器的输入类型 [不包括] 批量大小。输入形状为 [序列长度 x 特征长度]。所以你猜 encoder_outputs[-1:] 是最后一批是错误的。但无论如何,尽管我还需要测试一些东西,但 Lambda 似乎可以工作。一旦我对它有信心,我会回来接受你的回答。谢谢
    • @IsaacSim 哦,亲爱的! 批量轴不可能出现在张量中。要么您已使用batch_input_shape 明确设置批量大小,要么它是由 Keras 本身隐式添加的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2019-01-01
    • 2020-08-26
    相关资源
    最近更新 更多