2017-06-12 146 views
0

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

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

这个问题似乎符合逻辑,因为在我们应用BP算法每一批的结束,具有较大批量大小意味着我们施加较小梯度下降所以逻辑上,我们应该有较少的执行时间。

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

这里是我的会话代码:

 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}) 
+0

忽略复杂汇聚东西(用不同的收敛行为time_per_epoch是不是一个有效的度量来思考它需要多长时间来培养我的模型):大批量=更多的并行化,因此更短的时间每时期(如果有足够的内存)。 – sascha

+0

向我们显示代码。我的第一个猜测是,你正在调用一个运行固定数量批处理的函数是一个时代,而不是一个固定数量的样本。 –

+0

@LukaszTracewski感谢您的评论,我不很明白你的意思,但在这里我将自己的代码 – Geek

回答

1

批大小基本上表明你希望多久调整权重的神经网络。 1的批量大小意味着你给NN 1输入和输出对,用输入传播网络,计算错误并调整权重。 如果你有一个批量大小与您的数据集的大小,神经网络将传播所有的输入输出对,并添加了错误,并最终调整权重。使用大批量通常会导致准确度较低的结果,但它们更适合平均值,可以说输出会变得模糊不清,以避免某些数据出现极大的错误,并为其他数据造成极小的错误。