【问题标题】:How does batch size impact time execution in neural networks?批量大小如何影响神经网络中的时间执行?
【发布时间】:2023-03-22 09:44:02
【问题描述】:

我正在使用 CNN(卷积神经网络)模型来训练 cifar10。 我尝试在每次执行时更改批处理大小以查看其对时间的影响

我的结论是:批量越大,执行模型所需的时间就越多。

这看起来是否合乎逻辑,因为在每个批次结束时我们都会应用反向传播算法,这意味着随着批次大小的增加,我们应用的梯度下降越少,因此从逻辑上讲,我们应该有更少的执行时间。

我发现相反。你们觉得怎么样 ! 谢谢

这是我的会话代码:

       with tf.Session() as sess:
         sess.run(init)
         summary_writer =tf.summary.FileWriter(logs_path,graph=tf.get_default_graph())
        start_time = time.time()
        for i in range(iteration_number):
          j = (i - epoch) * batch_size % number_of_examples
          k= (i - epoch + 1) * batch_size % number_of_examples
          if (k < j): # THE END OF DATA SET ------------------------
            k = number_of_examples
            batch_x = train_images[j:number_of_examples, :]
            batch_y = train_labels[j:number_of_examples, :]
            print("Iter " + str(i) + ", epoch Loss= " + \
                    "{:.6f}".format(loss) + ", Training Accuracy= " + \
                    "{:.5f}".format(acc))

            data = numpy.concatenate((train_images, train_labels), axis=1)
            numpy.random.shuffle(data)
            train_images = data[:, :3072]
            train_labels = data[:, 3072:3082]
            epoch = i + 1

          else:
            batch_x = train_images[j:k, :]
            batch_y = train_labels[j:k, :]
            loss, acc, summary = sess.run([cost, accuracy, merged_summary_op], feed_dict={x: batch_x,
                                                        y: batch_y,
                                                        keep_prob: 0.3})
            summary_writer.add_summary(summary)

            sess.run(optimizer, feed_dict={x: batch_x, y: batch_y,
                                        keep_prob: dropout})

【问题讨论】:

  • 忽略复杂的收敛东西(具有不同的收敛行为 time_per_epoch 不是推断训练我的模型需要多长时间的有效指标):更大的批次 = 更多的并行化,因此每个 epoch 的时间更少(如果有足够的内存)。
  • 向我们展示代码。我的第一个猜测是,您调用的函数运行固定数量的批次是一个时期,而不是固定数量的样本。
  • @LukaszTracewski 感谢您的评论,我不太明白您的意思,但在这里我添加了我的代码
  • @sascha 非常感谢!更多并行化是什么意思?
  • (i - epoch) * batch_size % number_of_examples - 你想在这里实现什么?模的左边比右边小,所以反过来你总是得到 (i - epoch) * batch_size。此外,从代码(对不起,但它相当混乱)看来,增加批量大小并不会降低迭代次数。您只需在每个 epoch 拍摄更多图像,而这个过程需要更长的时间。

标签: python machine-learning deep-learning convolution


【解决方案1】:

批量大小基本上表明您希望调整神经网络权重的频率。批量大小为 1 意味着您提供 NN 1 输入和输出对,使用输入传播网络,计算误差并调整权重。 如果您的批量大小与数据集大小相同,则 NN 将传播所有输入输出对并将误差相加并最终调整权重。使用大的批量通常会给您带来不太准确的结果,但它们更适合平均值,您可以说输出有点模糊,以避免某些数据出现极大的错误,而其他数据的错误则极小。

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 1970-01-01
    • 2023-02-01
    • 2012-03-15
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2021-02-11
    • 2014-10-10
    相关资源
    最近更新 更多