У меня две модели прогнозирования; детерминированность c и сеть глубокого обучения. Я хотел бы объединить две модели, в которых детерминированная c одна обеспечивает основу для прогнозирования, а глубокое обучение вносит необходимые корректировки. Это проблема регрессии с выходом с плавающей запятой.
Последний уровень сети глубокого обучения:
Dense(1, activation='linear',kernel_initializer=init) (previous_layer_output)
Таким образом, его выходная форма просто (?, 1). Форма вывода модели Deterministi c должна быть идентична, чтобы мой слой слияния работал.
Модель Deterministi c принимает входной слой, который имеет форму (?, 10, 1) и должен принимать максимальное значение 10 значений и вывод в форме (?, 1).
Код ниже, который берет 10 фрагментов и выполняет над ними Maximum (), работает отлично. Однако это выглядит громоздко, и я не думаю, что это правильный способ сделать это.
#print(x_test_scaled.shape[1:]) = (10, 1)
Det_Guess1 = Lambda(lambda x: x[:,0], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess2 = Lambda(lambda x: x[:,1], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess3 = Lambda(lambda x: x[:,2], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess4 = Lambda(lambda x: x[:,3], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess5 = Lambda(lambda x: x[:,4], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess6 = Lambda(lambda x: x[:,5], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess7 = Lambda(lambda x: x[:,6], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess8 = Lambda(lambda x: x[:,7], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess9 = Lambda(lambda x: x[:,8], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess10 = Lambda(lambda x: x[:,9], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess = Maximum()([Det_Guess1, Det_Guess2, Det_Guess3, Det_Guess4,
Det_Guess5, Det_Guess6, Det_Guess7, Det_Guess8,
Det_Guess9, Det_Guess10])
#print(Det_Guess.shape) = (?, 1)
Простая лямбда-функция ниже выглядит аккуратно, но не работает, поскольку ее результат имеет скалярную форму;
def find_max(x):
K.max(x)
return K.max(x)
Det_Guess= Lambda(find_max, input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
# print(Det_Guess.shape) = ()
Я попытался изменить форму, добавив размеры к этой более простой лямбда-функции, но не смог сохранить размерность образца (?), Я всегда теряю его, и вывод никогда не будет в форме (?, 1).
Как я могу создать аккуратно выглядящий слой с выполненной желаемой операцией, которая выводит в форме (?, 1)?