тонкая настройка модели с помощью Keras Functional API - PullRequest
0 голосов
/ 07 февраля 2019

Я использую VGG16 для точной настройки своего набора данных.

Вот модель:

def finetune(self, aux_input):
        model = applications.VGG16(weights='imagenet', include_top=False)
        # return model

        drop_5 = Input(shape=(7, 7, 512))
        flatten = Flatten()(drop_5)
        # aux_input = Input(shape=(1,))
        concat = Concatenate(axis=1)([flatten, aux_input])

        fc1 = Dense(512, kernel_regularizer=regularizers.l2(self.weight_decay))(concat)
        fc1 = Activation('relu')(fc1)
        fc1 = BatchNormalization()(fc1)

        fc1_drop = Dropout(0.5)(fc1)
        fc2 = Dense(self.num_classes)(fc1_drop)
        top_model_out = Activation('softmax')(fc2)

        top_model = Model(inputs=drop_5, outputs=top_model_out)

        output = top_model(model.output)

        complete_model = Model(inputs=[model.input, aux_input], outputs=output)

        return complete_model

У меня есть два входа для модели.В вышеупомянутой функции я использую Concatenate для уплощенного массива и моего aux_input.Я не уверен, будет ли это работать с весами imagenet.

Когда я запускаю это, я получаю ошибку:

ValueError: График отключен: невозможно получить значение для тензорного тензора ("aux_input: 0", shape = (?, 1), dtype = float32) на уровне "aux_input".Следующие предыдущие слои были доступны без проблем: ['input_2', 'flatten_1']

Не знаю, где я ошибаюсь.

Если это имеет значение, это подходящая функция:

model.fit(x={'input_1': x_train, 'aux_input': y_aux_train}, y=y_train, batch_size=batch_size,
                    epochs=maxepoches, validation_data=([x_test, y_aux_test], y_test),
                    callbacks=[reduce_lr, tensorboard], verbose=2)

Но я получаю сообщение об ошибке перед этой fit функцией при вызове model.summary().

1 Ответ

0 голосов
/ 07 февраля 2019

Проблема в том, что вы используете aux_input в вашем top_model, но вы не указываете его как вход в вашем определении top_model.Попробуйте заменить определение top_model и output следующим:

top_model = Model(inputs=[drop_5, aux_input], outputs=top_model_out)
output = top_model([model.output, aux_input])
...