epoch,iteration,batch,batch_size
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
epoch,iteration,batch,batch_size