python - 使用多个 GPU 时如何保存模型?
问题描述
当我在 1 个 GPU 上进行训练时,我会调用model.save('test.model')
它,并且在训练结束时我会得到一个文件,test.model
然后我可以在预测代码中使用它。
现在我在 2 个 GPU 上进行训练,当我打电话时model.save('test_2gpus.model')
,我得到一个名为test_2gpus.model
. 在此文件夹中还有 2 个名为的文件夹:assets
和variables
,以及另一个名为saved_model.pb
. 较assets
旧的是空的,variables
文件夹中有 3 个文件:variables.data-00000-of-00002
、variables.data-00001-of-00002
和variables.index
.
使用超过 1 个 GPU 时,我是否必须以不同方式保存模型?
我应该得到一个.model
文件还是应该得到那个文件夹?如果我应该获取该文件夹,那么如何加载该文件夹?
*使用张量流版本 2.0.0
*使用import tensorflow.keras as keras
解决方案
使用超过 1 个 GPU 时,我是否必须以不同方式保存模型?
请参阅此处的教程https://www.tensorflow.org/tutorials/distribute/save_and_load
不,您可以使用 保存它model.save(path)
,然后使用 加载tf.keras.models.load_model(path)
。
我应该得到一个 .model 文件还是应该得到那个文件夹?如果我应该获取该文件夹,那么如何加载该文件夹?
您应该获得一个文件夹,然后通过引用该文件夹进行加载。
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
model = ... # build model
model.compile()
folder = "test_2gpus.model"
model.save(folder)
model_loaded = tf.keras.models.load_model(folder)
如果你得到一个unknown loss
错误,那是因为模型是在加载时编译的。tf.keras.models.load_model
有一个默认的关键字compile
参数True
。要绕过错误,请设置compile=False
,然后在model.compile
通话中设置您的损失。请记住,如果您只想使用模型进行预测,则不需要编译。
推荐阅读
- c++ - 是否值得使用 rdtsc() 进行速度测量?
- php - php 中的错误参数 imagefilter() 函数
- r - dist 函数中二元运算符的非数字参数
- javascript - 使用 TerserWebpackPlugin 将 sourceMap bundle.js.map 文件存储在特定位置
- c++ - 无法理解 vector.resize() 和 vector.shrink_to_fit() 的工作
- c# - 如何从另一个 tiff 图像向 C# 中的 tiff 添加额外的通道?
- typescript - Vue.js 测试 - 单击按钮后不显示横幅
- python - 获取测试覆盖率 Sphinx“testcode”指令
- google-oauth - Google OAuth 客户端 ID - 白名单
- flutter - 颤振错误资产:图像资源服务捕获的异常