复发神经网络中的时代与迭代

时间:2016-03-21 14:26:04

标签: python machine-learning neural-network keras recurrent-neural-network

我正在使用RNN和LSTM查看Keras的text generation example,但仍然对术语 epoch iteration 之间的差异感到困惑。

尽管here是先前提出同样问题的问题,但我无法理解answer,或者这个答案与我理解它的方式不同,也不同于以下示例处理它的方式。基于此answer,据说

  

一个纪元 =所有训练样例的一个前进和一个后退传递

     

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

     

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

结束:(#training examples/batch size) = (#iterations/#epochs)

然而,据我所知,以下example与之前的结论不同。

# 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)所述完成一个 epoch 。而且,这里有一个batch_size=128。那么迭代究竟意味着什么?

任何人都可以解释基于此示例的迭代纪元 之间的区别

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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)

写:

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