【发布时间】:2019-08-10 20:30:57
【问题描述】:
我需要将输入数据提供给模型,使相同长度的句子在同一个批次中(LSTM 中的可变输入长度)。
我的问题是,当我们使用fit_generator 时,我们需要指定steps_per_epoch , validation_steps,但在我的情况下,我无法通过简单的num_train_steps = len(Xtrain) // BATCH_SIZE 来实现。现在我的问题是,我在哪里可以计算并将其传递给fit_generator?我在 sentence_generator 中有 steps_per_epoch,但我不知道如何将其传递给 fit_generator。
有什么方法可以返回sentence_generator中每个批次的长度吗?
这是fit_generator(不知道如何实现num_train_steps并传递给fit_generator?)
lstm_ae_model.fit_generator(train_gen, val_gen, num_train_steps, num_val_steps, dir, NUM_EPOCHS=1)
所以我的自定义生成器是这样的,以防万一它可以提供帮助:
def sentence_generator(X, embeddings):
while True:
# loop once per epoch
index_sentence = 0
import itertools
items = sorted(X.values(), key=len, reverse=True)
for length, dics in itertools.groupby(items, len):
# dics is all the nested dictionaries with this length
a = 0
for x in dics:
a = a+1
num_train_steps = a
sent_wids = np.zeros([a, length])
for temp_sentence in dics:
keys_words = list(temp_sentence.keys())
for index_word in range(len(keys_words)):
sent_wids[index_sentence, index_word] = lookup_word2id(keys_words[index_word])
index_sentence = index_sentence + 1
Xbatch = embeddings[sent_wids]
yield Xbatch, Xbatch
【问题讨论】:
-
如果你一直训练到一个停止条件,你实际上可以使用任意数量和非常多的 epoch,不会有太大的区别。
-
@DanielMöller 所以你的意思是这个数字不需要是实数?
-
这只是你每个时期绘制的批次数量,仅此而已。如果您有 10 个批次,并且每个 epoch 绘制 10 个批次,则一个 epoch 将循环生成器。如果每个 epoch 绘制一个,则生成器将循环 10 个 epoch。如果您不想要一个确切的数字并且会等到验证损失停止增长,那么只需使用任何数字。
标签: tensorflow keras lstm autoencoder seq2seq