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

涉及到的基础概念有批数量,迭代次数,训练集数量。

打个比方吧,比如田径跑步。

一次只能8个人一起跑,这就是模型的批数量,也就是说batch number 为8

<img src=”https://pic4.zhimg.com/50/v2-2fb408c282532ce58e9ca71d36bcd21b_hd.jpg” data-caption=”” data-size=”normal” data-rawwidth=”500″ data-rawheight=”333″ data-default-watermark-src=”https://pic3.zhimg.com/50/v2-30948a00176aa4d85cb352fcf087726a_hd.jpg” class=”origin_image zh-lightbox-thumb” width=”500″ data-original=”https://pic4.zhimg.com/v2-2fb408c282532ce58e9ca71d36bcd21b_r.jpg”>

然后开始跑步,也就是说进行模型的前向传播,

<img src=”https://pic1.zhimg.com/50/v2-44b6e619ecdf1bfffd1a64713905cd4b_hd.jpg” data-caption=”” data-size=”normal” data-rawwidth=”500″ data-rawheight=”333″ data-default-watermark-src=”https://pic2.zhimg.com/50/v2-1e66271d1990e7fc596dfbcfc59682e1_hd.jpg” class=”origin_image zh-lightbox-thumb” width=”500″ data-original=”https://pic1.zhimg.com/v2-44b6e619ecdf1bfffd1a64713905cd4b_r.jpg”>

然后跑步到终点,一次迭代完成,这整个的一次过程称为模型的一次迭代。

<img src=”https://pic4.zhimg.com/50/v2-93e48cb814ce301da3247f936130dcfb_hd.jpg” data-caption=”” data-size=”normal” data-rawwidth=”720″ data-rawheight=”480″ data-default-watermark-src=”https://pic4.zhimg.com/50/v2-d281124149bdb01833509efcfea89205_hd.jpg” class=”origin_image zh-lightbox-thumb” width=”720″ data-original=”https://pic4.zhimg.com/v2-93e48cb814ce301da3247f936130dcfb_r.jpg”>

那么剩下的田径选手怎么办,继续从头开始跑,也就是说开始下一次的迭代。

<img src=”https://pic1.zhimg.com/50/v2-6d21c006815f1765511dd620a4179f44_hd.jpg” data-caption=”” data-size=”normal” data-rawwidth=”666″ data-rawheight=”500″ data-default-watermark-src=”https://pic3.zhimg.com/50/v2-d52350c34f3c23323be1f0e33c224f2a_hd.jpg” class=”origin_image zh-lightbox-thumb” width=”666″ data-original=”https://pic1.zhimg.com/v2-6d21c006815f1765511dd620a4179f44_r.jpg”>

所有的选手都跑完之后,也就是说数据集中的数据在模型中都训练完了,这就是一次epoch。

epoch与epoch之间是独立的,一次接一次的迭代,一个epoch接一个epoch。

版权声明:本文为wind-chaser原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wind-chaser/p/11359884.html