gpt4 book ai didi

python - 在 Keras 中使用 multi_gpu_model 恢复训练

转载 作者:行者123 更新时间:2023-11-28 18:15:49 24 4
gpt4 key购买 nike

我正在 Keras 中使用 multi_gpu_model 训练修改后的 InceptionV3 模型,我使用 model.save 保存整个模型。

然后我关闭并重新启动了 IDE,并使用 load_model 重新实例化了模型。

问题是我无法从中断的地方继续训练。

代码如下:

parallel_model = multi_gpu_model(model, gpus=2)

parallel_model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

history = parallel_model.fit_generator(generate_batches(path), steps_per_epoch = num_images/batch_size, epochs = num_epochs)

model.save('my_model.h5')

IDE关闭前,loss在0.8左右。

重启IDE,重新加载模型,重新运行上面的代码,loss变成了1.5。

但是,根据Keras FAQmodel_save 应该保存整个模型(架构 + 权重 + 优化器状态),load_model 应该返回一个与前一个模型相同的编译模型。

所以我不明白为什么恢复训练后loss变大了。

编辑:如果我不使用 multi_gpu_model 而只使用普通模型,我可以从我离开的地方继续。

最佳答案

当您调用 multi_gpu_model(...) 时,Keras 会自动将模型的权重设置为一些默认值(至少在我当前使用的 2.2.0 版本中是这样)。这就是为什么您无法在保存时的同一时间恢复训练。

我刚刚通过用顺序模型的权重替换并行模型的权重解决了这个问题:

parallel_model = multi_gpu_model(model, gpus=2)

parallel_model.layers[-2].set_weights(model.get_weights()) # you can check the index of the sequential model with parallel_model.summary()

parallel_model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

history = parallel_model.fit_generator(generate_batches(path), steps_per_epoch = num_images/batch_size, epochs = num_epochs)

希望对您有所帮助。

关于python - 在 Keras 中使用 multi_gpu_model 恢复训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48447371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com