1 #精簡版SGD 2 def SGD(self, training_data, epochs, mini_batch_size, eta,): 3 n = len(training_data) 4 # 進行epochs次主循環來計算weights和biases 5 for j in xrange(epochs): 6 # 每個主循環走一遍所有訓練數據,並shuffle一下提供好的隨機性 7 random.shuffle(training_data) 8 # 對於每個計算隨機梯度的具體事件,設置一個mini_batch,用這mini_batch_size個樣本來計算隨機梯度 9 mini_batches = [ 10 training_data[k:k+mini_batch_size] 11 for k in xrange(0, n, mini_batch_size)] 12 # 計算隨機梯度,更新weights和biases,eta是學習率 13 for mini_batch in mini_batches: 14 self.update_mini_batch(mini_batch, eta)
知乎上看到一個直觀的解釋...
鏈接:https://www.zhihu.com/question/43673341/answer/730181826
鏈接:https://www.zhihu.com/question/43673341/answer/730181826
涉及到的基礎概念有批數量,迭代次數,訓練集數量。
打個比方吧,比如田徑跑步。
一次只能8個人一起跑,這就是模型的批數量,也就是說batch number 為8

然后開始跑步,也就是說進行模型的前向傳播,

然后跑步到終點,一次迭代完成,這整個的一次過程稱為模型的一次迭代。

那么剩下的田徑選手怎么辦,繼續從頭開始跑,也就是說開始下一次的迭代。

所有的選手都跑完之后,也就是說數據集中的數據在模型中都訓練完了,這就是一次epoch。
epoch與epoch之間是獨立的,一次接一次的迭代,一個epoch接一個epoch。