【发布时间】: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