训练多层感知器时, 纪元和迭代之间有什么区别? html
一般状况下,您将测试集分红小批量供网络学习,并逐步完成培训,逐层应用渐变降低。 全部这些小步骤均可以称为迭代 。 算法
一个纪元对应于整个网络一次经过的整个训练集。 限制这一点多是有用的,例如对抗过分拟合。 网络
我相信迭代至关于批量SGD中的单批前向+后推。 Epoch正在经历整个数据集一次(正如其余人提到的那样)。 dom
在神经网络术语中: ide
示例:若是您有1000个训练示例,而且批量大小为500,则须要2次迭代才能完成1个时期。 学习
仅供参考: 权衡批量大小与训练神经网络的迭代次数 测试
术语“批处理”含糊不清:有些人用它来指定整个训练集,有些人用它来指代一个前进/后退中的训练样例数(正如我在这个答案中所作的那样)。 为了不这种模糊性并明确批次对应于一个前向/后向传递中的训练样本的数量,可使用术语小批量 。 lua
epoch是用于训练的样本子集的迭代,例如,中性网络中的梯度降低算法。 一个很好的参考是: http : //neuralnetworksanddeeplearning.com/chap1.html spa
请注意,该页面具备使用纪元的梯度降低算法的代码 code
def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None): """Train the neural network using mini-batch stochastic gradient descent. The "training_data" is a list of tuples "(x, y)" representing the training inputs and the desired outputs. The other non-optional parameters are self-explanatory. If "test_data" is provided then the network will be evaluated against the test data after each epoch, and partial progress printed out. This is useful for tracking progress, but slows things down substantially.""" if test_data: n_test = len(test_data) n = len(training_data) for j in xrange(epochs): random.shuffle(training_data) mini_batches = [ training_data[k:k+mini_batch_size] for k in xrange(0, n, mini_batch_size)] for mini_batch in mini_batches: self.update_mini_batch(mini_batch, eta) if test_data: print "Epoch {0}: {1} / {2}".format( j, self.evaluate(test_data), n_test) else: print "Epoch {0} complete".format(j)
看看代码。 对于每一个时期,咱们随机生成梯度降低算法的输入子集。 为何epoch有效也在页面中解释。 请看一下。
时代和迭代描述了不一样的东西。
时期描述了算法查看整个数据集的次数。 所以,每次算法查看数据集中的全部样本时,都会完成一个时期。
迭代描述了一批数据经过算法的次数。 在神经网络的状况下,这意味着向前传递和向后传递 。 所以,每次经过NN传递一批数据时,都会完成迭代 。
一个例子可能会让它更清晰。
假设您有10个示例(或示例)的数据集。 批量大小为2,而且您已指定但愿算法运行3个时期。
所以,在每一个时代,你有5批(10/2 = 5)。 每一个批次都经过算法,所以每一个时期有5次迭代。 因为您已指定3个时期,所以您总共须要15次迭代(5 * 3 = 15)进行训练。