精简版SGD理解随机梯度下降过程

北慕城南 提交于 2019-11-27 10:36:42
 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

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

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

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

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!