【问题标题】:Keras Multi-inputs AttributeError: 'NoneType' object has no attribute 'inbound_nodes'Keras 多输入 AttributeError:“NoneType”对象没有属性“inbound_nodes”
【发布时间】:2017-06-19 10:20:46
【问题描述】:

我正在尝试构建一个如下图所示的模型。这个想法是采用多个分类特征(一个热向量)并分别嵌入它们,然后将这些嵌入的向量与 LSTM 的 3D 张量结合起来。

使用 Keras2.0.2 中的以下代码,在创建具有多个输入的Model() 对象时,它会引发类似于thisAttributeError: 'NoneType' object has no attribute 'inbound_nodes' 问题。谁能帮我找出问题所在?

型号:

代码:

from keras.layers import Dense, LSTM, Input
from keras.layers.merge import concatenate
from keras import backend as K
from keras.models import Model

cat_feats_dims = [315, 14] # Dimensions of the cat_feats
emd_inputs = [Input(shape=(in_size,)) for in_size in cat_feats_dims]
emd_out = concatenate([Dense(20, use_bias=False)(inp) for inp in emd_inputs])
emd_out_3d = K.repeat(emd_out, 10)

lstm_input = Input(shape=(10,5))

merged = concatenate([emd_out_3d,lstm_input])

lstm_output = LSTM(32)(merged)
dense_output = Dense(1, activation='linear')(lstm_output)

model = Model(inputs=emd_inputs+[lstm_input], outputs=[dense_output])

#ERROR MESSAGE
Traceback (most recent call last):
  File "C:\Program Files\Anaconda2\envs\mle-env\lib\site-packages\IPython\core\interactiveshell.py", line 2881, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-a9da7f276aa7>", line 14, in <module>
    model = Model(inputs=emd_inputs+[lstm_input], outputs=[dense_output])
  File "C:\Program Files\Anaconda2\envs\mle-env\lib\site-packages\keras\legacy\interfaces.py", line 88, in wrapper
    return func(*args, **kwargs)
  File "C:\Program Files\Anaconda2\envs\mle-env\lib\site-packages\keras\engine\topology.py", line 1648, in __init__
    build_map_of_graph(x, seen_nodes, depth=0)
  File "C:\Program Files\Anaconda2\envs\mle-env\lib\site-packages\keras\engine\topology.py", line 1644, in build_map_of_graph
    layer, node_index, tensor_index)
  File "C:\Program Files\Anaconda2\envs\mle-env\lib\site-packages\keras\engine\topology.py", line 1644, in build_map_of_graph
    layer, node_index, tensor_index)
  File "C:\Program Files\Anaconda2\envs\mle-env\lib\site-packages\keras\engine\topology.py", line 1639, in build_map_of_graph
    next_node = layer.inbound_nodes[node_index]
AttributeError: 'NoneType' object has no attribute 'inbound_nodes'

【问题讨论】:

    标签: python deep-learning keras keras-2


    【解决方案1】:

    keras.backend.repeat 是一个函数,而不是一个层。尝试改用keras.layers.core.RepeatVector。它与函数具有相同的功能。

    emd_out_3d = RepeatVector(10)(emd_out)
    

    【讨论】:

      【解决方案2】:

      不仅针对这种情况,而且在一般情况下,如果您想在没有等效层实现的模型中添加一些函数,您可以将该函数作为 Lambda 层。

      例如,我需要将 axis=1 上的均值运算符添加到我的模型中。这是假设我当前名为 xinput 的张量和输出张量为输出的代码,代码应如下所示。

      # suppose my tensor named xinput
      meaner=Lambda(lambda x: K.mean(x, axis=1) )
      agglayer = meaner(xinput)    
      output = Dense(1, activation="linear", name="output_layer")(agglayer)
      

      不使用 Lambda 函数,而是直接添加 K.mean 函数,你会得到同样的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-23
        • 2021-09-01
        相关资源
        最近更新 更多