Итак, мне нужно объединить вход в сплющенный слой перед переходом в плотный слой.
Я использую Keras с TF в качестве бэкэнда.
model.add(Flatten())
aux_input = Input(shape=(1, ))
model.add(Concatenate([model, aux_input]))
model.add(Dense(512,kernel_regularizer=regularizers.l2(weight_decay)))
У меня есть такой сценарий: X_train, y_train, aux_train. Форма y_train и aux_train одинакова (1,). Изображение имеет правду и aux_input.
Как мне добавить этот aux_input к модели при выполнении model.fit?
Как и предлагалось в ответах, я сменил модель на функциональный API. Однако теперь я получаю следующую ошибку.
ValueError: Слой density_1 вызывался с входом, который
символический тензор. Полученный тип:. Полный ввод:
[]. Все
входы в слой должны быть тензорами.
Вот код этой части.
flatten = Flatten()(drop_5)
aux_rand = Input(shape=self.aux_shape)
concat = Concatenate([flatten, aux_input])
fc1 = Dense(512, kernel_regularizer=regularizers.l2(weight_decay))(concat)
Форма вспомогательного входа
aux_shape = (1,)
А затем вызывать модель следующим образом
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
aux_rand = np.random.rand(y_train.shape[0])
model_inst = cifar10vgg()
x_train_input = Input(shape=(32,32,3))
aux_input = Input(shape=(1,))
model = Model(inputs=[x_train_input, aux_input], output=model_inst.build_model())
model.fit(x=[x_train, aux_rand], y=y_train, batch_size=batch_size, steps_per_epoch=x_train.shape[0] // batch_size,
epochs=maxepoches, validation_data=(x_test, y_test),
callbacks=[reduce_lr, tensorboard], verbose=2)
model_inst.build_model () возвращает Activation('softmax')(fc2)
, который является выходом для подачи в модель (насколько я понял)