训练多层感知器时, 纪元和迭代之间有什么区别?
#1楼
通常情况下,您将测试集分成小批量供网络学习,并逐步完成培训,逐层应用渐变下降。 所有这些小步骤都可以称为迭代 。
一个纪元对应于整个网络一次通过的整个训练集。 限制这一点可能是有用的,例如对抗过度拟合。
#2楼
我相信迭代相当于批量SGD中的单批前向+后推。 Epoch正在经历整个数据集一次(正如其他人提到的那样)。
#3楼
在神经网络术语中:
- 所有训练样例的一个时期 =一个前进和一个后退
- 批量大小 =一个前向/后向传递中的训练样本数。 批量大小越大,您需要的内存空间就越大。
- 迭代次数 =次数,每次通过使用[批量大小]数量的示例。 要清楚,一次传球=一次前进传球+一次后传传球(我们不计算前进传球和后传传球作为两次不同传球)。
示例:如果您有1000个训练示例,并且批量大小为500,则需要2次迭代才能完成1个时期。
仅供参考: 权衡批量大小与训练神经网络的迭代次数
术语“批处理”含糊不清:有些人用它来指定整个训练集,有些人用它来指代一个前进/后退中的训练样例数(正如我在这个答案中所做的那样)。 为了避免这种模糊性并明确批次对应于一个前向/后向传递中的训练样本的数量,可以使用术语小批量 。
#4楼
epoch是用于训练的样本子集的迭代,例如,中性网络中的梯度下降算法。 一个很好的参考是: http : //neuralnetworksanddeeplearning.com/chap1.html
请注意,该页面具有使用纪元的梯度下降算法的代码
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有效也在页面中解释。 请看一下。
#5楼
时代和迭代描述了不同的东西。
时代
时期描述了算法查看整个数据集的次数。 因此,每次算法查看数据集中的所有样本时,都会完成一个时期。
迭代
迭代描述了一批数据通过算法的次数。 在神经网络的情况下,这意味着向前传递和向后传递 。 因此,每次通过NN传递一批数据时,都会完成迭代 。
例
一个例子可能会让它更清晰。
假设您有10个示例(或示例)的数据集。 批量大小为2,并且您已指定希望算法运行3个时期。
因此,在每个时代,你有5批(10/2 = 5)。 每个批次都通过算法,因此每个时期有5次迭代。 由于您已指定3个时期,因此您总共需要15次迭代(5 * 3 = 15)进行训练。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3168542