python - 使用 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 模型中的权重是一样的!!!这不是我所期望的!
解决方案
推荐阅读
- c - 如何估计多项式根的多重性?
- python - 如何在我的测试部分传递 None 值?
- pipeline - IO2I微架构的流水线图
- linux - 配置成功后在 linxu 上启动 oracle XE 时出现问题
- ruby-on-rails - 如何在 Ruby on Rails 的 GET API 中传递数组数组
- node.js - Node.js 从磁盘读取文件
- pandas - 将时间序列重塑为多个特征,每个特征对应于一天的过程
- node.js - 模块构建失败(来自 ./node_modules/html-loader/dist/cjs.js):
- android - 片段中的 Android 按钮不会被触发
- angular - Typescript Angular变量在组件中为空