“withstrategy.scope():”或“withtf.distribute.experimental.TPUStrategy(tpu).scope():”对神经网络的创建有什么作用?

use*_*129 5 tensorflow tpu tensorflow2.0

在此处的代码中: https: //www.kaggle.com/ryanholbrook/detecting-the-higgs-boson-with-tpus

在编译模型之前,使用以下代码制作模型:

with strategy.scope():
    # Wide Network
    wide = keras.experimental.LinearModel()

    # Deep Network
    inputs = keras.Input(shape=[28])
    x = dense_block(UNITS, ACTIVATION, DROPOUT)(inputs)
    x = dense_block(UNITS, ACTIVATION, DROPOUT)(x)
    x = dense_block(UNITS, ACTIVATION, DROPOUT)(x)
    x = dense_block(UNITS, ACTIVATION, DROPOUT)(x)
    x = dense_block(UNITS, ACTIVATION, DROPOUT)(x)
    outputs = layers.Dense(1)(x)
    deep = keras.Model(inputs=inputs, outputs=outputs)
    
    # Wide and Deep Network
    wide_and_deep = keras.experimental.WideDeepModel(
        linear_model=wide,
        dnn_model=deep,
        activation='sigmoid',
    )
Run Code Online (Sandbox Code Playgroud)

我不明白with strategy.scope()这里有什么作用以及它是否以任何方式影响模型。它到底有什么作用?

将来我怎样才能弄清楚这是做什么的?我需要寻找哪些资源才能解决这个问题?

小智 6

分布策略作为 TF2 的一部分引入,以帮助在多个 GPU、多台机器或 TPU 上分布训练,并且代码更改最少。我向初学者推荐这份分布式培训指南。

具体来说,在 下创建模型TPUStrategy将以复制(每个核心上的权重相同)的方式将模型放置在 TPU 上,并通过添加适当的集体通信(全部减少梯度)来保持副本权重同步。有关更多信息,请查看TPUStrategy 上的 API 文档以及 TF2 colab 笔记本中的 TPU 介绍。