AttributeError при использовании слоя keras.concatenate - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь построить нейронную сеть на основе архитектуры Inception, используемой для изображений, но для одномерных векторов.

Я основал модель, которую создал на этой модели, из руководства по началу работы с keras изэта ссылка https://keras.io/getting-started/functional-api-guide/:

tf.keras.backend.clear_session()
logger = tf.get_logger()
logger.setLevel(logging.ERROR)

input_vector = Input(shape=(71276,1),)

tower_1 = tf.keras.layers.Conv1D(filters=64, kernel_size=1, padding='same', activation='relu', name='conv_1')(input_vector)
tower_1 = tf.keras.layers.Conv1D(filters=64, kernel_size=3, padding='same', activation='relu', name='conv_2')(tower_1)

tower_2 = tf.keras.layers.Conv1D(filters=64, kernel_size=1, padding='same', activation='relu', name='conv_3')(input_vector)
tower_2 = tf.keras.layers.Conv1D(filters=64, kernel_size=1, padding='same', activation='relu', name='conv_4')(tower_2)

tower_3 = tf.keras.layers.MaxPooling1D(pool_size=3, strides=1, padding='same')(input_vector)
tower_3 = tf.keras.layers.Conv1D(filters=64, kernel_size=1, padding='same', activation='relu', name='conv_4')(tower_3)

output = tf.keras.layers.concatenate([tower_1, tower_2, tower_3])

model = tf.keras.models.Model(inputs=input_vector, outputs=output)
model.compile(loss='mse',
              optimizer=tf.keras.optimizers.Adam(lr=0.001),
              metrics=['mae'])

model.summary()

Это мой код:

from keras.layers import Conv1D, MaxPooling1D, Input
from keras.models import Model

tf.keras.backend.clear_session()
logger = tf.get_logger()
logger.setLevel(logging.ERROR)

input_vector = Input(shape=(71276,1),)

tower_1 = Conv1D(filters=64, kernel_size=1, padding='same', activation='relu', name='conv_1')(input_vector)
tower_1 = Conv1D(filters=64, kernel_size=3, padding='same', activation='relu', name='conv_1')(tower_1)

tower_2 = Conv1D(filters=64, kernel_size=1, padding='same', activation='relu', name='conv_1')(input_vector)
tower_2 = Conv1D(filters=64, kernel_size=1, padding='same', activation='relu', name='conv_1')(tower_2)

tower_3 = MaxPooling1D(pool_size=3, strides=1, padding='same')(input_vector)
tower_3 = Conv1D(filters=64, kernel_size=1, padding='same', activation='relu', name='conv_1')(tower_3)

output = tf.keras.layers.concatenate([tower_1, tower_2, tower_3])

model = Model(inputs=input_vector, outputs=output)
model.compile(loss='mse',
              optimizer=tf.keras.optimizers.Adam(lr=0.001),
              metrics=['mae'])

model.summary()

При выполнении я получаю следующую ошибку и не совсем понимаю, почему:

AttributeError                            Traceback (most recent call last)
<ipython-input-9-2931ae837421> in <module>()
      6 input_vector = Input(shape=(71276,1),)
      7 
----> 8 tower_1 = tf.keras.layers.Conv1D(filters=64, kernel_size=1, padding='same', activation='relu', name='conv_1')(input_vector)
      9 tower_1 = tf.keras.layers.Conv1D(filters=64, kernel_size=3, padding='same', activation='relu', name='conv_2')(tower_1)
     10 

5 frames
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/base_layer.py in <lambda>(t)
   2056             `call` method of the layer at the call that created the node.
   2057     """
-> 2058     inbound_layers = nest.map_structure(lambda t: t._keras_history.layer,
   2059                                         input_tensors)
   2060     node_indices = nest.map_structure(lambda t: t._keras_history.node_index,

AttributeError: 'tuple' object has no attribute 'layer'

У меня нет большого опыта работы со сверточными слоями, поэтому вполне возможно, что я допустил очень очевидную ошибку. Поиск в Интернете Я не смог найти кого-то еще с такой же проблемой.

Я запускаю это в Google Colab Laboratory, во время выполнения Python 3.

Любая помощь будет признательна,спасибо!

1 Ответ

2 голосов
/ 20 октября 2019

Несколько вещей:

  • Все ваши слои имеют одинаковые названия? Бьюсь об заклад, это может привести к множеству странных ошибок
  • tower_3 не имеет такую ​​же форму, как две другие башниЭто невозможно объединить. (Вы используете MaxPooling1D, проверьте сводку для подтверждения.)
  • Вы смешиваете keras и tf.keras, что, безусловно, является огромной проблемой. Выберите только один.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...