[英]Generator Function Always Yielding The Same Thing Twice
我有这个生成器函数,希望通过它筛选图像数据集。 图像位于批处理大小为16的PyTorch数据加载器中。我在数据加载器上循环以获取一个批处理(16张图像),然后在该批次上循环以获取图像。
我想做的是将图像标签存储在图像中并yield
,同时在图上绘制16张图像。 所以我想做images = next(show_batch(dataloader, labels_dataframe, nrows, ncols))
并且每次我得到存储在图像中的16个图像标签和16个图像的绘图时。 这样,我可以识别出不良图像,并准备好将其标签从数据集中丢弃。 该代码将两次生成相同(第一张)的16张图像。 我怀疑这与每次创建新列表有关,所以我要重新启动生成器吗?
为什么代码为什么会连续两次生成相同的16张图像,并且如何解决将它的标签一次存储到16张图像的问题,同时labels_dataframe
它们从labels_dataframe
中获取的标签存储在图像中?
def show_batch(dataloader, labels_dataframe, nrows, ncols):
fig = plt.figure(figsize=(30,15))
for i, batch in enumerate(train_dl):
images = []
for j, image in enumerate(batch['image']):
ax = fig.add_subplot(nrows, ncols, j+1)
ax.imshow(image.permute(2, 1, 0))
images.append(labels_dataframe.loc[i*16+j, 'id_code'])
yield images
Marco Bonelli指出,我应该说明如何调用生成器。 在执行此操作时,我发现自己做错了什么,并修复了如何调用它以及该函数。
我正在调用next(show_batch(dataloader, labels_dataframe, nrows, ncols))
,因此每次都调用一个新的生成器函数。 我没有生成一个生成器对象。
然后,当我创建一个生成器对象并开始调用它时,它仅显示前16张图像,然后仅生成标签,因此,将Figure对象移动到每个批处理循环中。 修改后的代码以及我如何称呼它:
def show_batch(dataloader, labels_dataframe, nrows, ncols):
for i, batch in enumerate(train_dl):
fig = plt.figure(figsize=(30,15))
images = []
for j, image in enumerate(batch['image']):
ax = fig.add_subplot(nrows, ncols, j+1)
ax.imshow(image.permute(2, 1, 0))
images.append(labels_dataframe.loc[i*16+j, 'id_code'])
yield images
sample_images = show_batch(dataloader, labels_dataframe, nrows, ncols)
next(sample_images)
谢谢,马可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.