Попытка разделить входной слой Keras, по-разному обрабатывать оба субтензора и соединять их последний в слой LSTM.

Итак, один вход моей нейронной сети в Керасе - это массив из 10 элементов. Вопрос в том, что первые 9 элементов - это числа, а последний - это матрица, которая будет объединена. То, что я пытаюсь сделать, это:

  • Получить вход
  • Разделить вход, разделяя записи [0:8] и [9]
  • Отправка [9] записи в ряд слоев свертки
  • Завершение его в слой LSTM, который получит записи [0:8] напрямую, а также выходные данные уровней свертки

Я понимаю, что придется использовать входной слой:

shape = (10,)
input = Input(shape=shape , name='input', dtype='float32')

У меня также уже есть слои свертки:

conv = Convolution1D(nb_filter=nb_filter, filter_length=filter_kernels[0],
                     border_mode='valid', activation='relu',
                     input_shape=(maxlen, vocab_size),
                     kernel_initializer=initializer)(text_input)
conv = MaxPooling1D(pool_length=3)(conv)

conv1 = Convolution1D(nb_filter=nb_filter, filter_length=filter_kernels[1],
                      border_mode='valid', activation='relu',                                                                                                         kernel_initializer=initializer)(conv)
conv1 = MaxPooling1D(pool_length=3)(conv1)

conv2 = Convolution1D(nb_filter=nb_filter, filter_length=filter_kernels[2],
                      border_mode='valid', activation='relu', kernel_initializer=initializer)(conv1)

conv3 = Convolution1D(nb_filter=nb_filter, filter_length=filter_kernels[3],
                      border_mode='valid', activation='relu', kernel_initializer=initializer)(conv2)

conv4 = Convolution1D(nb_filter=nb_filter, filter_length=filter_kernels[4],
                      border_mode='valid', activation='relu', kernel_initializer=initializer)(conv3)

conv5 = Convolution1D(nb_filter=nb_filter, filter_length=filter_kernels[5],
                      border_mode='valid', activation='relu', kernel_initializer=initializer)(conv4)
conv5 = MaxPooling1D(pool_length=3)(conv5)
conv5 = Flatten()(conv5)
conv5 = Dropout(0.5)(Dense(dense_outputs, activation='relu', kernel_initializer=initializer)(conv5))

Я также знаю, что мне придется объединить их позже и добавить в слой LSTM:

concat_lstm2 = Concatenate()([first, second])
Dropout(0.5)(LSTM(lstm_size, return_sequences=True, name='lstm')(concat_lstm2))

Вопрос состоит в том, как разделить запись, чтобы обрабатывать вложенные записи в разных слоях, чтобы последние объединяли их обратно в уровень LSTM.

0 ответов

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