tensorflow - 为什么训练速度不随批大小成比例?

标签 tensorflow object-detection

我很惊讶增加批量大小并没有提高 GPU 的总处理速度。我的测量:

  • batch_size=1:0.33 秒/步
  • batch_size=2:0.6 秒/步
  • batch_size=3:0.8 秒/步
  • batch_size=4:1.0 秒/步

  • 我的期望是由于 GPU 上的并行化,该步骤的时间将保持(几乎)恒定。然而,它几乎与批量大小成线性比例。为什么?我是不是误会了什么?

    我正在使用 Tensorflow Object Detection API ,重新训练预训练的 fast_rcnn_resnet101_coco 模型,预定义的 batch_size 为 1,我们的 GPU(Nvidia 1080 Ti)最多可以处理 4 张图像,所以我想利用它来加速训练。

    最佳答案

    人们经常错误地提到批量学习与在线培训一样快或更快。事实上,批量学习只是改变权重一次,完整的数据集(批量)已经呈现给网络。因此,权重更新频率比较慢。这解释了为什么测量中的处理速度表现得像您观察到的那样。

    要进一步了解训练技术,请查看 2003 年的论文 The general inefficiency of batch training for gradient descent learning .它处理批处理和在线学习的比较。

    编辑:

    关于你的评论:

    我认为在单个 GPU 上不会发生模型或数据并行化。 GPU 将训练算法中涉及的向量和矩阵运算并行化,但批量学习算法仍然计算如下:

    loop maxEpochs times
      for each training item
        compute weights and bias deltas for curr item
        accumulate the deltas
      end for
      adjust weights and bias deltas using accumulated deltas
    end loop
    

    如您所见,虽然权重调整仅对整个批次应用一次,但仍然需要为批次中的每个元素计算权重和偏差增量。因此,恕我直言,与在线学习相比,批量学习算法没有很大的性能优势。

    关于tensorflow - 为什么训练速度不随批大小成比例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48267891/

    相关文章:

    opencv - Yolo 暗网 : How to label images

    javascript - 未知正则化器 : L2 in tensorflowjs

    opencv - 多脸检测

    python - 如何从网络摄像头 OpenCV 裁剪圆形图像并删除背景

    python - 图像处理 : Problem with Fish measuring

    python - OpenCV HOG 描述符参数

    python - 提高 I/O 绑定(bind) tensorflow 训练速度

    python - Keras 后端(tensorflow)与 Keras

    tensorflow - tf.compat 的目的是什么?

    python - TensorFlow Keras 在期望一个预测的同时返回多个预测