epoch:训练时,所有训练图像通过网络训练一次(一次前向传播+一次后向传播);测试时,所有测试图像通过网络一次(一次前向传播)。Caffe不用这个参数。
batch_size:1个batch包含的图像数目,通常设为2的n次幂,常用的包括64,128,256。 网络较小时选用256,较大时选用64。
iteration:训练时,1个batch训练图像通过网络训练一次(一次前向传播+一次后向传播),每迭代一次权重更新一次;测试时,1个batch测试图像通过网络一次(一次前向传播)。
三者之间的关系:iterations = epochs×(images / batch_size),所以1个epoch包含的 iteration次数=样本数量/batch_size;
以Caffe的mnist为例(具体参数见相应的prototxt文件):
training_images=60k,batch_size=64, maximum_iterations= 10k,test _images=10k,batch_size=100, test_iterations=100:
在这个参数设置下,训练时经历了10.6个epoch,测试时100次iteration(1个epoch)恰好可以遍历整个测试集。
注意:上面例子中如果训练时maximum_iterations= 10k,那么将会有10k×64=640k幅图像参与训练,乍一看这个是错的,因为640k远远大于训练集60k。事实上这是没问题的,当剩余的训练样本不够一个batch时,Caffe会带着这些剩余的样本然后重头开始再取一个batch。所以在设置Training和Testing的参数时需要注意,训练的某些参数可以不整除(比如10.6个epoch),但测试时设置的参数最好要能整除(测试网络时正好遍历完所有测试样本是最理想的情况)。
测试的时候,test_batch_size×test_iterations>number of test images也不会出错,甚至这样做也可以(这种情况下已经测试过的图像会组成新的batch重复测试),不过设置参数时最好还是test_batch_size×test_iterations=number of test images。
在caffe中很多预训练好的模型的iteration都是40000,fast_rcnn那个代码也是40000