循环神经网络中的纪元与迭代



我正在查看使用 RNN 和 LSTM 的 Keras 文本生成示例,但仍然对术语 epoch迭代之间的区别感到困惑。

即使,这里有一个上一个问题问同样的事情,但我无法理解答案,或者这个答案与我的理解不同,也与以下示例的处理方式不同。基于这个答案,据说

一个 epoch = 所有训练示例的一次正向传递和一次向后传递

迭代次数 = 传递次数,每次传递使用 [批量大小] 示例数。

示例

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

结论是:(#training examples/batch size) = (#iterations/#epochs) .

但是,据我了解,以下示例与之前的结论不同。

# 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)所述.对于每次迭代,每个 for 循环都按照所述model.fit(X, y, batch_size=128, nb_epoch=1)完成一个纪元。再一次,在这里,有一个batch_size=128.那么迭代到底意味着什么呢?

任何人都可以根据这个例子解释迭代纪元之间的区别吗?

我认为在这个例子中,迭代意味着不同的东西:你正在迭代学习过程,在每个时期之后,你都在用部分学习的模型做一些事情。你正在迭代地做这件事,这就是使用迭代词的原因。

在这种情况下,

迭代仅用于消除中间结果。我们可以删除此代码:

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)

写:

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

相关内容

  • 没有找到相关文章

最新更新