我正在使用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
。那么迭代究竟意味着什么?
任何人都可以解释基于此示例的迭代和纪元 之间的区别?
答案 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)