У меня есть тренировочные данные в виде пустых массивов, которые я буду использовать в ConvLSTM.
Ниже приведены размеры массива.
trainX = (5000, 200, 5)
, где 5000 - количество образцов. 200 - временные шаги на выборку, а 8 - количество элементов на временном шаге. (выборки, временные шаги, функции).
из этих 8 функций 3 функции остаются одинаковыми во всех временных шагах в выборке (другими словами, эти функции напрямую связаны с выборками). например, день недели, номер месяца, день недели (эти изменения от образца к образцу). Чтобы уменьшить сложность, Я хочу отделить эти три функции от начального обучающего набора и объединить их с выводом слоя convlstm перед применением плотного слоя для классификации (активация softmax). например
Размер начального обучающего набора будет (7000, 200, 5)
, а размеры вспомогательных входных данных, которые будут объединены, будут (7000, 3)
->, потому что эти 3 функции напрямую связаны с выборкой. Как я могу реализовать это с помощью keras?
Ниже приведен мой код, который я пишу с использованием Functional API, но не знаю, как объединить эти два входа.
#trainX.shape=(7000,200,5)
#trainy.shape=(7000,4)
#testX.shape=(3000,200,5)
#testy.shape=(3000,4)
#trainMetadata.shape=(7000,3)
#testMetadata.shape=(3000,3)
verbose, epochs, batch_size = 1, 50, 256
samples, n_features, n_outputs = trainX.shape[0], trainX.shape[2], trainy.shape[1]
n_steps, n_length = 4, 50
input_shape = (n_steps, 1, n_length, n_features)
model_input = Input(shape=input_shape)
clstm1 = ConvLSTM2D(filters=64, kernel_size=(1,3), activation='relu',return_sequences = True)(model_input)
clstm1 = BatchNormalization()(clstm1)
clstm2 = ConvLSTM2D(filters=128, kernel_size=(1,3), activation='relu',return_sequences = False)(clstm1)
conv_output = BatchNormalization()(clstm2)
metadata_input = Input(shape=trainMetadata.shape)
merge_layer = np.concatenate([metadata_input, conv_output])
dense = Dense(100, activation='relu', kernel_regularizer=regularizers.l2(l=0.01))(merge_layer)
dense = Dropout(0.5)(dense)
output = Dense(n_outputs, activation='softmax')(dense)
model = Model(inputs=merge_layer, outputs=output)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit([trainX, trainMetadata], trainy, validation_data=([testX, testMetadata], testy), epochs=epochs, batch_size=batch_size, verbose=verbose)
_, accuracy = model.evaluate(testX, testy, batch_size=batch_size, verbose=0)
y = model.predict(testX)
но я получаю сообщение об ошибке в выражении merge_layer. Ниже приведена ошибка ValueError
ValueError: zero-dimensional arrays cannot be concatenated