【问题标题】:Batch size when running tf.Strategy vs. tf.data batch()运行 tf.Strategy 与 tf.data batch() 时的批处理大小
【发布时间】:2020-06-11 19:05:29
【问题描述】:

我想在运行 tf.distribute 策略时显示批量大小。我通过这样创建自定义 Keras 层来做到这一点:

class DebugLayer(tf.keras.layers.Layer):
    def __init__(self):
        super().__init__()

    def build(self, input_shape):
        pass

    def call(self, inputs):
        print_op = tf.print("******Shape is:", tf.shape(inputs) , name='shapey')
        #print_op = tf.print("Debug output:", loss, y_true, y_true.shape)
        with tf.control_dependencies([print_op]):
            return tf.identity(inputs)

Q1:每个工人每批次的示例数

如果我与一名工人一起运行,它会给出 128 的批量大小,这是我在我的 tf.data 数据集流 .batch(128) 中设置的。

如果我与两个工人一起运行,每个工人输出 128。我想知道每个工人上运行了多少示例? 同时运行多少个示例

Q2:正确的steps_per_epoch

在我的Model.fit() 调用中,我指定steps_per_epoch 并在我的数据流中有一个.repeat。如果我的训练集包含 1024 个样本,我有 2 个工人,并且我的 .batch 设置为 128,那么 steps_per_epoch 应该设置为一个 epoch?

【问题讨论】:

    标签: tensorflow training-data tf.keras


    【解决方案1】:

    当使用tf.data 操作时,有一个.batch() 方法通常应用于数据。假设该值为 128。这将是每批将运行的示例总数,而与工人数量无关。如果...

    • 使用 1 个 worker,每个训练步骤将运行 128 个示例。
    • 使用了 2 个工作人员,每个工作人员每个训练步骤将运行 64 个示例。
    • 使用 3 名工作人员,每个工作人员每个训练步骤将运行大约 42 个示例。

    对于 3 名工人的情况,我不确定 确切的数字,因为 128/3 不是整数值。

    对于设置steps_per_epoch,将样本总数除以您在.batch() 中设置的批量大小。因此,对于我在问题中的示例,它将是 8,即 1024/128。

    这有点不方便,因为您需要知道训练示例的数量,如果它们发生变化,您需要调整 steps_per_epoch 值。此外,如果不是整数倍,您需要决定是否应该对 steps_per_epoch 值进行四舍五入、下限或上限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多