Попытка разделить входной слой 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.