У меня есть данные 18 функций и 2 классов.У меня есть рабочая сверточная сеть Keras для этих данных, и она отлично работает.Сейчас я пытаюсь настроить сеть начального модуля на те же данные.Когда я пытаюсь сделать это, на этапе объединения что-то идет не так.
Я попытался объединить башни из слоев Conv1D
, как я делал для слоев Conv2D
, но это не сработало.
Рабочая простая сверточная модель выглядит следующим образом:
model = Sequential()
model.add(Conv1D(32, (5), strides = (1), input_shape = (18, 1), activation = 'tanh'))
model.add(MaxPooling1D(pool_size = (2), strides = (2)))
model.add(Conv1D(32, (3), strides = (1), input_shape = (18, 1), activation = 'tanh'))
model.add(Flatten())
model.add(Dense(300, activation = 'tanh'))
model.add(Dense(300, activation = 'tanh'))
model.add(Dropout(rate = 0.5))
model.add(Dense(num_classes, activation = 'softmax', name = "preds"))
model.compile(loss = "categorical_crossentropy", optimizer = "nadam", metrics = ['accuracy'])
Теперь начальная модель с тремя сверточными башнями выглядит следующим образом:
inputs = Input((18, 1))
tower_1 = MaxPooling1D(pool_size=(3), strides=(2), padding='same')(inputs)
tower_1 = Conv1D(32, (1), activation='tanh', border_mode='same')(tower_1)
tower_2 = Conv1D(32, (1), activation='tanh', border_mode='same')(inputs)
tower_2 = Conv1D(32, (3), activation='tanh', border_mode='same')(tower_2)
tower_3 = Conv1D(32, (1), activation='tanh', border_mode='same')(inputs)
tower_3 = Conv1D(32, (5), activation='tanh', border_mode='same')(tower_3)
x = concatenate([tower_1, tower_2, tower_3], axis=3)
x = Flatten()(x)
x = Dense(50, activation='tanh')(x)
preds = Dense(num_classes, activation='softmax', name='preds')(x)
model = Model(input=inputs, output=preds)
model.compile(loss='categorical_crossentropy', optimizer='nadam', metrics =['accuracy'])
Когда я пытаюсьзапустите последний, я получаю следующий вывод, и я не уверен, почему:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-22-1dbf3d2822ae> in <module>()
6 tower_3 = Conv1D(32, (1), activation='tanh', border_mode='same')(inputs)
7 tower_3 = Conv1D(32, (5), activation='tanh', border_mode='same')(tower_3)
----> 8 x = concatenate([tower_1, tower_2, tower_3], axis=3)
9 x = Flatten()(x)
10 #x = Dense(50, activation='tanh')(x)
/usr/local/lib/python3.6/dist-packages/keras/layers/merge.py in concatenate(inputs, axis, **kwargs)
639 A tensor, the concatenation of the inputs alongside axis `axis`.
640 """
--> 641 return Concatenate(axis=axis, **kwargs)(inputs)
642
643
/usr/local/lib/python3.6/dist-packages/keras/engine/base_layer.py in __call__(self, inputs, **kwargs)
429 'You can build it manually via: '
430 '`layer.build(batch_input_shape)`')
--> 431 self.build(unpack_singleton(input_shapes))
432 self.built = True
433
/usr/local/lib/python3.6/dist-packages/keras/layers/merge.py in build(self, input_shape)
346 shape_set = set()
347 for i in range(len(reduced_inputs_shapes)):
--> 348 del reduced_inputs_shapes[i][self.axis]
349 shape_set.add(tuple(reduced_inputs_shapes[i]))
350 if len(shape_set) > 1:
IndexError: list assignment index out of range
Друзья, товарищи, вы можете подсказать мне, почему это может происходить и как это можно исправить?