首页 > 解决方案 > 使用 multi_gpu_model 和 layers.trainable = True 时,keras 微调预训练模型不会改变权重

问题描述

我正在加载 VGG16 预训练模型,添加几个密集层并微调基本 VGG16 的最后 5 层。我正在使用多个 gpus 训练我的模型。我在训练前后保存了模型。尽管有layers.trainable = True,但权重是相同的。

请帮忙!

这是代码

    from keras import applications
    from keras import Model
    <import other relevant Keras layers, etc.>


    model = applications.VGG16(weights = "imagenet", include_top = False, input_shape = (224,224,3))

    model.save('./before_training')

    for layer in model.layers:
        layer.trainable = False

    for layer in model.layers[-5:]:
        layer.trainable = True

     x = model.output
     x = Flatten()(x)
     x = Dense(1024, activation = "relu")(x)
     x = Dropout(0.5)(x)
     x = Dense(1024, activation = "relu")(x)
     predictions = Dense(2, activation = "softmax")(x)
     model_final = Model(input = model.input, output = predictions)


     from keras.utils import multi_gpu_model
     parallel_model = multi_gpu_model(model_final, gpus = 4)
     parallel_model.compile(loss = "categorical_crossentropy" ..... )


     datagen = ImageDataGenerator(....)


     early = EarlyStopping(...)

     train_generator = datagen.flow_from_directory(train_data_dir,...)
     validation_generator = datagen.flow_from_directory(test_data_dir,...)

     parallel_model.fit_generator(train_generator, validation_data = valiudation_generator,...)

     model_final.save('./after_training)

before_training 和 after_training 模型中的权重是一样的!!!这不是我所期望的!

标签: pythontensorflowkerasmulti-gpu

解决方案


推荐阅读