如何解决当您在多台设备机器上训练时,是有多个模型还是单个模型?
我正在关注 Single-host,multi-device synchronous training 上的 Keras 教程。为了进行此类培训,我们必须:
- 实例化 MirroredStrategy,可选择配置您要使用的特定设备(默认情况下,该策略将使用所有可用的 GPU)。
- 使用策略对象打开一个范围,并在此范围内创建您需要的所有包含变量的 Keras 对象。通常,这意味着在分发范围内创建和编译模型。
- 像往常一样通过 fit() 训练模型。
示意图如下:
# Create a MirroredStrategy.
strategy = tf.distribute.MirroredStrategy()
print('Number of devices: {}'.format(strategy.num_replicas_in_sync))
# Open a strategy scope.
with strategy.scope():
# Everything that creates variables should be under the strategy scope.
# In general this is only model construction & `compile()`.
model = Model(...)
model.compile(...)
# Train the model on all available devices.
model.fit(train_dataset,validation_data=val_dataset,...)
# Test the model on all available devices.
model.evaluate(test_dataset)
我不清楚在 Keras 级别,是否有一个或多个模型?我会认为只有一个(即使在幕后,数据并行发生)但是当我查看张量板标量图(纪元损失)时,这似乎不是真的(图混乱)。此外,如果我在每个时期保存一个模型(带有时期编号和时间戳),我可以看到我在每个时期提出了多个模型。正常不正常?我怎么知道哪一个是好的?我是否必须在代码中的某处指定保存只能在特定类型的设备上完成? (例如 cpu:0)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。