gpt4 book ai didi

python - Keras:正确使用 fit_generator、predict_generator 和 evaluate_generator

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:16 28 4
gpt4 key购买 nike

我在使用 fit_generatorpredict_generatorevaluate_generator 时遇到了奇怪的行为,我想问以下问题,我在文档中找不到答案:

  1. 在使用 fit_generator 时可以使用不同大小的批处理吗?

我的批处理是按时间​​定义的:它们将同一小时内发生的事件分组。因此,每个批处理可以对不同数量的事件进行分组。为清楚起见,这是我的生成器的样子(遵循 this thread 中的逻辑):

def grouper(g,x,y):
while True:
for gr in g.unique():
# this assigns indices to the entire set of values in g,
# the subsects to all the rows in which g == gr
indices = g == gr
yield (x[indices],y[indices])

all_data_generator = grouper(df['batch_id'], X, Y)
train_generator = grouper(df.loc[df['set'] == 'train', 'batch_id'], X_train, Y_train)
validation_generator = grouper(df.loc[df['set'] == 'val', 'batch_id'], X_val, Y_val)
test_generator = grouper(df.loc[df['set'] == 'test', 'batch_id'], X_test, Y_test)
  1. train_generatorvalidation_generator 中使用不同数量的批处理是否可以?

为清楚起见,我在调用中将这两个(不同的)数字显式传递给 fit_generator:

train_batches = df.loc[df['set'] == 'train', 'batch_id'].nunique()
val_batches = df.loc[df['set'] == 'val', 'batch_id'].nunique()

history = fmodel.fit_generator(train_generator,
steps_per_epoch=train_batches,
validation_data=validation_generator,
validation_steps=val_batches,
epochs=20, verbose = 0)
  1. 根据我使用的是 predict_classes 还是 predict_generator,预测会大不相同,这让我很困惑。

代码如下:

df['pred'] = fmodel.predict_classes(X)

# returns different results from
total_batches = df['batch_id'].nunique()
df['pred_gen'] = fmodel.predict_generator(all_data_generator, steps = total_batches)
  1. 同样,evaluateevaluate_generator 返回不同的结果。

代码:

scores = model.evaluate(X_test, Y_test, verbose = 0)

# returns different results from
scores_generator = fmodel.evaluate_generator(test_generator, steps=test_batches)

我知道已经有很多问题涉及到我的第 3 点和第 4 点(例如,34776499),但那里的主要内容似乎是指

  • 使用带/不带重新缩放的 ImageDataGenerator;
  • 洗牌数据,根据fit_generator documentation “当 steps_per_epoch 不为 None 时无效。”
  • 使用 workers > 1,默认情况下并非如此。

所以我想知道第 1 点和第 2 点是否是这里的罪魁祸首。

最佳答案

1 和 2

是的,完全没问题。
甚至期望 2 为真。

3

未记录预测类。它具体做什么?我认为它预测指数,而所有其他预测方法预测实际模型的输出,对吧?

4

这很明智...

您确定您的生成器输出的正是您想要的吗?

您可以尝试查看一些批处理,将它们与 xy 进行比较:

for i in range(aFewBatches):
print(next(train_generator))
#or create some comparisons

即使生成器是正确的,当您为生成器选择批处理时,您肯定是在重新洗牌(实际上是排序)您的数据。

虽然 evaluate 将按原样获取整个 xy 数据,通常以 32 个为一组,evaluate_generator 将采用您选择的批处理。因此,每批处理的指标肯定会有所不同,最终结果(即批处理指标的平均值)也会有所不同。所以,除非差异太大,否则没关系。

PS:我不完全确定evaluate会给你的是mean batch metrics还是整个data metrics,但是evaluate_generator会带来mean batch metrics,这足够了有区别。

关于python - Keras:正确使用 fit_generator、predict_generator 和 evaluate_generator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53537064/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com