Как загрузить точно настроенную модель keras - PullRequest
2 голосов
/ 04 ноября 2019

Я следую этому учебнику, чтобы попробовать тонкую настройку с использованием модели VGG16, я обучил модель и сохранил файл .h5 с использованием model.save_weights и

vgg_conv = VGG16(include_top=False, weights='imagenet', input_shape=(image_size, image_size, 3))

    # Freeze the layers except the last 4 layers
    for layer in vgg_conv.layers[:-4]:
        layer.trainable = False

    model = Sequential()
    model.add(vgg_conv)
    model.add(Flatten())
    model.add(Dense(256, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(11, activation='softmax'))

Затем я попыталсячтобы перестроить архитектуру и загрузить весовые коэффициенты, используя приведенные ниже

def create_model(self):
    model = Sequential()
    vgg_model = VGG16(include_top=False, weights='imagenet', input_shape=(150, 150, 3))
    model.add(vgg_model)
    model.add(Flatten())
    model.add(Dense(256, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(11, activation='softmax'))
    model.load_weights(self.top_model_weights_path) # throws error
    return model

, но затем выдает эту ошибку

ValueError: Cannot feed value of shape (512, 512, 3, 3) for Tensor 'Placeholder:0', which has shape '(3, 3, 3, 64)'

что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

Я не уверен, как интерпретировать ошибку, но вы можете попробовать сохранить архитектуру модели и веса вместе model.save("model.h5") после тонкой настройки.

Чтобы загрузить модель, вы можете набрать

model = load_model('model.h5')
# summarize model.
model.summary()

Я думаю, что это имеет преимущество в том, что нет необходимости перестраивать модель и требует только одной строки для достижения той же цели.

0 голосов
/ 04 ноября 2019

Проблема заключается в обучаемом различии между двумя моделями. Если вы заморозите 4 последних слоя в функции create_model, это сработает.

Но, как сказал Игна, model.save и model.load_model проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...