首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Keras的ImageDataGenerator.flow_from_dataframe种子参数的范围是什么?

Keras的ImageDataGenerator.flow_from_dataframe种子参数的范围是什么?
EN

Data Science用户
提问于 2021-06-18 16:25:18
回答 1查看 253关注 0票数 0

我一直在使用存储在本地驱动器上的训练图像来开发一个U-Net模型。为了加载这些数据,我一直在使用Keras的ImageDataGenerator.flow_from_dataframe方法,并可选择地应用一些增强。

我对此没有任何问题,但当我从流中检索批量数据时,我注意到了一些奇怪的行为。

在下面的简化示例中,我从一个目录加载8位RGB文件并设置种子--我在本例中省略了增强参数,但是在有和不存在的情况下得到了相同的行为。

为了QA/QC的目的,我通常会得到一个批处理,并查看随机选择的图像。然而,当我得到一个批处理并生成一些随机图像索引时,我总是得到相同的结果。这只发生在批处理生成之后,而不是流生成器对象的初始化。

代码语言:javascript
运行
复制
# Step 1
# Set up image data flow
img_generator = ImageDataGenerator(rescale=1/255.)
train_gen = img_generator.flow_from_dataframe(
                img_df, # filnames are read from column "filename"
                img_dir, # local directory containing image files
                y_col=None,
                target_size=(512,512),
                class_mode=None,
                shuffle=False, # I'm using separate mask images so no shuffling here
                batch_size=16,
                seed=42 # behavior occurs when using seed
            )

# Step 2
# Generate and print 8 random indices
# No batch of images retrieved yet; no use of seed
print(np.random.randint(16, size=8))
>>> [ 7 15 13  3  6  3  2 14] # always random

# Step 3
# Now get a batch of images; seed is used
batch = next(train_gen)

# Step 4
# Generate and print 8 random indices
print(np.random.randint(16, size=8))
>>> [ 6  1  3  8 11 13  1  9] # always the same result

使用42的种子,每次执行步骤1和2时,步骤2的输出都会发生变化。这是预期的行为,因为步骤1不应该影响步骤2。但是,一旦在步骤3中从生成器中检索到批处理,步骤4总是返回相同的索引。

这种行为会随着新批次的产生而继续;种子在每一次产量上都会发生变化,因此每一批都返回不同的指数,但总是相同的指数。

将种子设置为42,前几批之后生成的指数如下:

代码语言:javascript
运行
复制
>>> [ 6 1 3 8 11 13 1 9]  # Batch 1
>>> [10 10 5 5 5 8 10 11] # Batch 2
>>> [ 5 3 0 10 4 9 15 2]  # Batch 3

这表明,当生成一批图像时,全局numpy种子将被更改。在实际中,我总是检查相同的图像样本。当不提供种子参数时,全局种子保持不变,并且没有类似的输出。

我想知道其他人是否遇到过这种情况--这是一个错误还是我误解了什么?

EN

回答 1

Data Science用户

回答已采纳

发布于 2021-06-19 12:49:42

进一步的调查证实,在这种情况下,Keras确实修改了全局随机数生成器。

repo具有主动问题和PRs,它们通过使用本地随机状态(例如问题)来解决库的其他区域中的这种行为。

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/96820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档