首页 文章

训练神经网络时的Epoch vs Iteration

提问于
浏览
295

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

9 回答

  • 6

    在神经网络术语中:

    • one epoch =所有训练样例的一个前向传递和一个后向传递

    • batch size =一个前进/后退传递中的训练样例数 . 批量大小越大,您需要的内存空间就越大 .

    • iterations =通过次数,每次通过使用[批量大小]数量的示例 . 要清楚,一次传递=一次向前传递一次向后传球(我们不计算前向传球和后传传球作为两次不同传球) .

    示例:如果您有1000个训练样例,并且批量大小为500,则需要2次迭代才能完成1个时期 .

    仅供参考:Tradeoff batch size vs. number of iterations to train a neural network


    术语"batch"含糊不清:有些人用它来指定整个训练集,有些人用它来指代一个前进/后退传递中的训练样例数(正如我在这个答案中所做的那样) . 为了避免这种模糊性并明确批次对应于一个前向/后向传递中的训练样例的数量,可以使用术语 mini-batch .

  • 7

    时代和迭代描述了不同的东西 .


    大纪元

    时期描述算法查看整个数据集的次数 . 因此,每次算法查看数据集中的所有样本时,都会完成一个时期 .

    迭代

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


    示例

    一个例子可能会使它更清晰 .

    假设您有10个示例(或示例)的数据集 . 您的批处理大小为2,并且您已指定希望算法运行3个历元 .

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

  • 2

    许多神经网络训练算法涉及将整个数据集多次呈现给神经网络 . 通常,整个数据集的单个表示被称为“时期” . 相反,一些算法一次将单个案例的数据呈现给神经网络 .

    “迭代”是一个更通用的术语,但由于你将它与“epoch”一起询问,我认为你的来源是指将单个案例呈现给神经网络 .

  • 4

    你有一个训练数据,你可以随机抽取并从中挑选小批量 . 当您使用一个小批量调整权重和偏差时,您已完成一次迭代 . 一旦你用完了迷你批次,你就完成了一个时代 . 然后你再次洗牌你的训练数据,再次挑选你的迷你批次,并再次遍历所有这些 . 这将是你的第二个时代 .

  • 6

    通常情况下,您将测试集分成小批量供网络学习,并逐步完成培训,逐层应用渐变下降 . 所有这些小步骤都可以称为迭代 .

    一个纪元对应于整个网络中的整个训练集一次 . 限制这种情况可能很有用,例如:打架过度拟合 .

  • 451

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

  • 19

    据我所知,当您需要训练NN时,您需要一个涉及许多数据项的大型数据集 . 当训练NN时,数据项逐个进入NN,称为迭代;当整个数据集通过时,它被称为时代 .

  • 99

    我相信迭代相当于批量SGD中的单批前向后推 . Epoch正在经历整个数据集一次(正如其他人提到的那样) .

  • 8

    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有效也在页面中解释 . 请看一下 .

相关问题