python - model.compile() 是否进入 MirroredStrategy
问题描述
我有一个用于迁移学习的网络,并且想在两个 GPU 上进行训练。到目前为止,我刚刚接受了一项培训,并且正在寻找加快速度的方法。关于如何最有效地使用它,我得到了相互矛盾的答案。
strategy = tf.distribute.MirroredStrategy(devices=["/gpu:0", "/gpu:1"])
with strategy.scope():
base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(200,200,3))
x = base_model.output
x = GlobalAveragePooling2D(name="class_pool")(x)
x = Dense(1024, activation='relu', name="class_dense1")(x)
types = Dense(20,activation='softmax', name='Class')(x)
model = Model(inputs=base_model.input, outputs=[types])
然后我设置可训练层:
for layer in model.layers[:160]:
layer.trainable=False
for layer in model.layers[135:]:
layer.trainable=True
然后我编译
optimizer = Adam(learning_rate=.0000001)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics='accuracy')
一切都应该嵌套在里面strategy.scope()
吗?
本教程显示compile
在内部,但本教程显示它在外部。第一个在外面显示
mirrored_strategy = tf.distribute.MirroredStrategy()
with mirrored_strategy.scope():
model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(1,))])
model.compile(loss='mse', optimizer='sgd')
但在这之后马上说
在此示例中,我们使用了 MirroredStrategy,因此我们可以在具有多个 GPU 的机器上运行它。strategy.scope() 向 Keras 指示用于分发训练的策略。在这个范围内创建模型/优化器/指标允许我们创建分布式变量而不是常规变量。设置完成后,您可以像往常一样安装模型。MirroredStrategy 负责在可用 GPU 上复制模型的训练、聚合梯度等。
解决方案
它去哪里都没有关系,因为在幕后,model.compile()
会在使用的策略范围内创建优化器、损失和准确性度量变量。然后你可以调用model.fit
which 也会在相同的策略范围内安排一个训练循环。
我建议进一步搜索,因为我的答案没有任何实验基础。这正是我的想法。
推荐阅读
- android - 如何在 Android Webview 中显示 Vimeo 视频?
- java - 如何在 Java 反射中获取字段值
- angular - 根据来自服务器的响应以角度类型转换多个响应
- android - 有没有更简单的方法来检查哪个下载已经完成?
- google-chrome-devtools - 服务工作者获取事件未列出根 index.html
- bash - 以特定格式“newik”的 Sed
- ruby-on-rails - 如何设置 Travis Rspec 以测试在 Rails 应用程序中访问的只读副本
- javascript - 将数组添加到 JSON 对象(如果它不存在)
- keyboard - AutoHotkey 中未使用的组合键列表
- sql - 尝试创建 SQL 表的备份