我正在尝试使用 4900 个图像(480*640*3)数据集拟合 CNN 模型(AlexNet 架构),并且我想做数据增强,我已经完成了一个使用 ImageDataGenerator 方法的自定义生成器,因为图像在不同路径和标签也是如此,所以我做了一个类,它采用所有路径并将图像路径及其标签保存在两个列表中,然后加载 32 个图像和标签的批次并适合图像数据生成器:
这是在模型适合时从模型调用的自定义生成器的方法,也是我适合 ImageDataGenerator 的地方
def __getitem__(self,index) :
batch_x=self.img_filenames[index * self.batch_size : (index+1) * self.batch_size]
batch_y=self.labels[index * self.batch_size: (index+1) * self.batch_size]
gen=ImageDataGenerator(rescale=1./255,
rotation_range=90,
brightness_range=(0.1,0.9),
horizontal_flip=True)
X=[plt.imread(filename) for filename in batch_x]
X,Y = next(gen.flow(x= np.array(X), y= np.array(batch_y), batch_size=self.batch_size))
return X,Y
我有一些问题:
ImageDataGenerator 应该返回什么,如果我传递 32(batch_size) 个不同的图像,它返回 32 个修改后的图像,每个 1 个,或者每个 32 个图像,如果我只传递 1 个批量大小为 32 的图像,它从那个返回 32 个修改过的图像?我几乎可以肯定每个人都是 1,但我想确认一下。
其次,如果我想要 40k 图像,如果我在超过 samples//batch_size 时再次将索引更改为 0,并更改len方法乘以 2 或任何我想要的,假设图像是随机生成的,我将有 4900 张新图像或我想要的任意数量,不是吗?
主要问题是当它达到 0.5 精度时它停止增加,我尝试了 3 个 epoch 并且它是相同的,它增加到 3 或 4 个批次然后停止,所以这就是我怀疑的原因。
谢谢。