Итак, один вход моей нейронной сети в Керасе - это массив из 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.