递归神经网络中的epoch和iteration有什么区别?

3
我正在查看使用RNN和LSTM的Keras的text generation example,但仍然困惑于术语“epoch”和“iteration”的区别。
即使这里有一个之前关于同样问题的问题,我也不能理解答案,或者这个答案与我的理解不同,也与下面的示例处理方式不同。根据这个答案,它说

一个 epoch = 所有训练样本的一次正向传递和反向传递

迭代次数 = 经过的次数,每次经过使用 [batch size] 个样本。

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

总结一下:(#训练样例/批次大小) = (#迭代次数/#纪元数)

然而,根据我理解,以下示例与先前的结论不同。

# train the model, output generated text after each iteration
for iteration in range(1, 60):
    print()
    print('-' * 50)
    print('Iteration', iteration)
    model.fit(X, y, batch_size=128, nb_epoch=1)

    start_index = random.randint(0, len(text) - maxlen - 1)

    for diversity in [0.2, 0.5, 1.0, 1.2]:
        print()
        print('----- diversity:', diversity)

        generated = ''
        sentence = text[start_index: start_index + maxlen]
        generated += sentence
        print('----- Generating with seed: "' + sentence + '"')
        sys.stdout.write(generated)

        for i in range(400):
            x = np.zeros((1, maxlen, len(chars)))
            for t, char in enumerate(sentence):
                x[0, t, char_indices[char]] = 1.

            preds = model.predict(x, verbose=0)[0]
            next_index = sample(preds, diversity)
            next_char = indices_char[next_index]

            generated += next_char
            sentence = sentence[1:] + next_char

            sys.stdout.write(next_char)
            sys.stdout.flush()
        print()

这里,迭代60时期的数量设置为1,这让我很困惑。看起来,有60个迭代,如for iteration in range(1, 60)所述。对于每个迭代,都会执行一个时期,如model.fit(X, y, batch_size=128, nb_epoch=1)中每个循环。再次提醒,在这里,batch_size=128。那么迭代到底是什么意思呢?
能否有人根据这个例子解释迭代时期之间的区别?

在RNN中,“Epoch”一词与多层感知器或CNN不同,这里的“Epoch”在RNN的训练中涉及单个字符串的时间连续输入输出响应对。 - Raja Rajan
2个回答

3

我认为在这个例子中,迭代的意义有所不同:您正在通过学习过程进行迭代,并且在每个时期之后,您都会对部分学习的模型进行某些操作。您正在进行迭代,并且这就是为什么使用迭代一词的原因。


在RNN中,“Epoch”一词与多层感知器或CNN不同,这里的“Epoch”在RNN的训练中涉及单个字符串的时间连续输入输出响应对。 - Raja Rajan

1
在这种情况下,迭代仅用于显示中间结果。我们可以删除此代码:
for diversity in [0.2, 0.5, 1.0, 1.2]:
    print()
    print('----- diversity:', diversity)

    generated = ''
    sentence = text[start_index: start_index + maxlen]
    generated += sentence
    print('----- Generating with seed: "' + sentence + '"')
    sys.stdout.write(generated)

    for i in range(400):
        x = np.zeros((1, maxlen, len(chars)))
        for t, char in enumerate(sentence):
            x[0, t, char_indices[char]] = 1.

        preds = model.predict(x, verbose=0)[0]
        next_index = sample(preds, diversity)
        next_char = indices_char[next_index]

        generated += next_char
        sentence = sentence[1:] + next_char

        sys.stdout.write(next_char)
        sys.stdout.flush()
    print()

而且改为:
for iteration in range(1, 60):
  model.fit(X, y, batch_size=128, nb_epoch=1)

write:

model.fit(X, y, batch_size=128, nb_epoch=60)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接