首页 > 解决方案 > Keras Generator 无缘无故地循环

问题描述

我有一个 keras 生成器

train_datagen = ImageDataGenerator(rotation_range=360,
                                       horizontal_flip=True,
                                       vertical_flip=True,
                                       validation_split=0.15,
                                       preprocessing_function=preprocess_image, 
                                       rescale=1 / 128.)

left_test_generator=train_datagen.flow_from_dataframe(dataframe=df_test_left, 
                                                    directory = test_images_path,
                                                    x_col="pic_id",
                                                    target_size=(IMG_WIDTH, IMG_HEIGHT),
                                                    batch_size=1,
                                                    shuffle=False, 
                                                    class_mode=None, seed=SEED) 

left_test_generator 的长度是 500

但是如果我运行这个

for image_count, image in enumerate(right_test_generator):
    print(image_count)

这将打印大于 8000 的 image_count。这是怎么回事?有任何想法吗?

标签: tensorflowkeras

解决方案


这就是生成器的工作方式,它们在内部有一个无限循环,可以生成一批数据,该__len__方法仅供参考,以了解需要多少次调用生成器才能达到一个时期。

因此,如果您想从生成器中获取特定数量的样本,则不应像那样对其进行迭代,而应使用具有特定迭代次数的 for 循环。


推荐阅读