训练多层感知器时,历元和迭代的区别是什么?
当前回答
epoch是用于训练的样本子集的迭代,例如,神经网络中的梯度下降算法。一个很好的参考:http://neuralnetworksanddeeplearning.com/chap1.html
请注意,该页面有一个使用epoch的梯度下降算法的代码
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是有效的,也解释了这一页。请看一看。
其他回答
通常,你会把你的测试集分成小批,让网络从中学习,并让训练在你的层数中一步一步地进行,一直应用梯度下降。所有这些小步骤都可以称为迭代。
一个epoch对应于整个训练集通过整个网络一次。限制这种情况是很有用的,例如对抗过拟合。
在神经网络术语中:
一个epoch =所有训练示例的一个向前传递和一个向后传递 批大小=一次向前/向后传递中训练示例的数量。批处理大小越大,所需的内存空间就越大。 迭代次数=通过次数,每次通过使用[批大小]示例的数量。需要明确的是,一次传球=一次向前传球+一次向后传球(我们不把向前传球和向后传球算作两次不同的传球)。
例如:如果你有1000个训练样本,你的批处理大小是500,那么将需要2次迭代来完成1个epoch。
供参考:权衡批大小和迭代次数来训练神经网络
术语“批处理”是模棱两可的:有些人用它来表示整个训练集,有些人用它来指代一次向前/向后传递中的训练示例的数量(就像我在这个回答中所做的那样)。为了避免这种歧义,并明确batch对应于一次正向/向后传递中训练示例的数量,可以使用术语mini-batch。
根据谷歌的机器学习术语表,一个纪元被定义为
“对整个数据集进行完整的训练,以便每个示例都被看到一次。因此,一个epoch表示N/batch_size训练迭代,其中N是示例的总数。”
如果你正在训练10个epoch的模型,批大小为6,给定总共12个样本,这意味着:
该模型将能够在2次迭代(12 / 6 = 2)即单个epoch中看到整个数据集。 总的来说,该模型将有2 X 10 = 20个迭代(每个epoch的迭代X无epoch) 每次迭代后,将对损失和模型参数进行重新评估!
许多神经网络训练算法都涉及到将整个数据集多次呈现给神经网络。通常,整个数据集的单一表示被称为“epoch”。相比之下,一些算法一次只向神经网络提供一个案例的数据。
“迭代”是一个更一般的术语,但既然你和“epoch”一起问了这个词,我假设你的来源是指一个单一案例对神经网络的呈现。
一个epoch包含几个迭代。这就是这个时代。让我们把epoch定义为训练神经网络时在数据集上的迭代次数。
推荐文章
- 如何从scikit-learn决策树中提取决策规则?
- 数据挖掘中分类和聚类的区别?
- 主体、使用者和主体之间的意义和区别是什么?
- 什么是分片,为什么它很重要?
- 我在哪里调用Keras的BatchNormalization函数?
- 编程中的术语“上下文”?
- model.eval()在pytorch中做什么?
- 为什么binary_crossentropy和categorical_crossentropy对同一个问题给出不同的性能?
- 覆盖或覆盖
- 火灾vs. Webservice
- 为什么使用softmax而不是标准归一化?
- 为什么两个不同的概念都叫“堆”?
- 一般来说,应该选择哪种机器学习分类器?
- Keras,如何得到每一层的输出?
- 缓冲区是什么意思?