训练神经网络时的时代与迭代
artificial-intelligence
deep-learning
machine-learning
neural-network
22
1

训练多层感知器时, 时代迭代之间有什么区别?

参考资料:
Stack Overflow
收藏
评论
共 10 个回答
高赞 时间 活跃

许多神经网络训练算法都涉及将整个数据集多次呈现给神经网络。通常,整个数据集的单个表示形式称为“时代”。相反,某些算法一次只将一个案例提供给神经网络。

“迭代”是一个更为通用的术语,但是由于您与“历元”一起询问了该问题,因此我认为您的资料来源是指将单个案例呈现给神经网络。

收藏
评论

我相信迭代等效于批处理SGD中的单个批处理正向+反向传播。 Epoch一次遍历整个数据集(如其他人所述)。

收藏
评论

通常,您将测试集分成小批供网络学习,然后逐步进行训练,遍历您的层数,并一直向下进行渐变下降。所有这些小步骤都可以称为迭代

一个时期对应于一次遍历整个网络的整个训练集。限制这一点很有用,例如,对抗过度拟合。

收藏
评论

据我了解,当您需要训练神经网络时,您需要一个包含许多数据项的大型数据集。在训练NN时,数据项一个接一个地进入NN,这称为迭代;当整个数据集通过时,称为纪元。

收藏
评论

在神经网络术语中:

  • 一个历元 =一个直传和所有的训练例子之一向后通
  • 批次大小 =一次向前/向后传递中的训练示例数。批处理大小越大,您将需要更多的内存空间。
  • 迭代次数 =遍数,每遍都使用[批量大小]示例数。明确地说,一次通过=一次向前通过+一次向后通过(我们不将向前和向后计算为两个不同的通过)。

示例:如果您有1000个培训示例,并且批量大小为500,那么将需要2次迭代才能完成1个纪元。

仅供参考: 权衡批次大小与迭代次数以训练神经网络


“批处理”一词含糊不清:有人用它来指定整个训练集,有些人用它来指代一次向前/向后通过中的训练示例数(就像我在此答案中所做的那样)。为了避免这种歧义并清楚地表明批次与一次向前/向后遍历中的训练示例数量相对应,可以使用术语mini-batch

收藏
评论

一个纪元包含一些迭代。这实际上就是这个“时代”。让我们将“ epoch”定义为数据集上的迭代次数,以训练神经网络。

收藏
评论

要了解它们之间的区别,您必须了解梯度下降算法及其变体

在开始实际答案之前,我想建立一些背景。

批次是完整的数据集。它的大小是可用数据集中训练示例的总数。

最小批量大小是学习算法在一次遍历中(向前和向后)处理的示例数。

小批量是给定小批量大小的数据集的一小部分。

迭代次数是算法看到的数据批处理数量(或简单来说是算法在数据集上完成的传递次数)。

时代是次数的学习算法看到完整的数据集。现在,这可能不等于迭代次数 ,因为数据集也可以按小批处理。本质上, 单遍可能只处理数据集的一部分。在这种情况下, 迭代次数不等于epochs的次数。

在批次梯度下降的情况下,整个批次将在每个训练遍上进行处理。因此,梯度下降优化器的收敛性比Mini-batch梯度下降更平滑,但是花费的时间更多。如果存在梯度梯度下降,可以保证找到最佳值。

随机梯度下降是小批量梯度下降的一种特殊情况,其中小批量大小1

批次梯度下降与迷你批次梯度下降

批量,随机和小批量梯度下降的比较。

收藏
评论

时代迭代描述了不同的事物。


时代

一个时期描述了算法看到整个数据集的次数。因此,每次算法看到数据集中的所有样本时,一个纪元就完成了。

迭代

迭代描述了一批数据通过算法的次数。在神经网络的情况下,这意味着前进后退 。因此,每次通过NN传递一批数据时,就完成了一次迭代


一个例子可能会更清楚。

假设您有一个包含10个示例(或示例)的数据集。您的批处理大小为2,并且已指定要让算法运行3个纪元。

因此,在每个时期中,您有5个批次(10/2 = 5)。每个批次都会通过算法,因此每个时期有5次迭代。由于您指定了3个时期,因此总共需要进行15次迭代(5 * 3 = 15)进行训练。

收藏
评论

历元是用于训练的样本子集的迭代,例如中性网络中的梯度下降算法。一个很好的参考是: 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)

看代码。对于每个时期,我们随机生成梯度下降算法的输入子集。该页还说明了为什么纪元有效。请看一下。

收藏
评论

您拥有一个训练数据,可以从其中进行洗牌并从中挑选迷你批次。当您使用一个迷你批次调整权重和偏差时,您已经完成了一次迭代。迷你批次用完后,您便完成了一个纪元。然后,您再次重新整理训练数据,再次选择您的迷你批次,然后再次遍历所有批次。那将是您的第二个时代。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号