Keras Multi-input AttributeError: у объекта 'NoneType' нет атрибута 'inbound_nodes'

Я пытаюсь построить модель, как показано на диаграмме ниже. Идея состоит в том, чтобы взять более чем одну категориальную особенность (один горячий вектор) и внедрить их отдельно, а затем объединить эти встроенные векторы с трехмерным тензором для LSTM.

С помощью следующего кода в Keras2.0.2 при создании Model() объект с несколькими входами, это вызывает AttributeError: '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'

1 ответ

Решение

keras.backend.repeat - это функция, а не слой. Попробуйте вместо этого использовать keras.layers.core.RepeatVector. Он имеет ту же функциональность, что и функция.

emd_out_3d = RepeatVector(10)(emd_out)

Не только для этого случая, но и в общем случае, если вы хотите добавить в свою модель какую-либо функцию, у которой нет эквивалентной реализации уровня, вы можете сделать эту функцию как уровень Lambda.

например, мне нужно было добавить в мою модель оператор среднего на оси =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 напрямую, вы получите ту же ошибку.

Другие вопросы по тегам