Jan*_*ane 10 preprocessor image classification keras
所有,
我正在尝试使用Keras对两个类进行图像分类.对于一个班级,我的图像数量非常有限,比如500.对于另一个班级,我的图像数量几乎无穷无尽.所以,如果我想使用keras图像预处理,该怎么做?理想情况下,我需要这样的东西.对于第一类,我提供500个图像并使用ImageDataGenerator来获取更多图像.对于第二类,每次我从1000000图像数据集中依次提取500个图像,并且可能不需要数据增加.在查看此处的示例以及Keras文档时,我发现默认情况下,training文件夹包含每个类的相同数量的图像.所以我的问题是,是否有现成的API来做这个技巧?如果是这样,请向我指出.如果没有,是否有针对此需求的解决方法?
你有一些选择.
选项1
使用class_weight
fit()函数的参数,该函数是将类映射到权重值的字典.假设您有500个0级样本和1500个1级样本class_weight = {0:3 , 1:1}
.这使得0级成为第1级重量的三倍.
train_generator.classes
为您的加权提供正确的类名.
如果你想以编程方式计算这个,你可以使用scikit-learn sklearn.utils.compute_class_weight()
:https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/utils/class_weight.py
该函数查看标签的分布并生成权重,以同等地惩罚训练集中的不足或过度表示的类.
另请参见此有用的主题:https://github.com/fchollet/keras/issues/1875
这个线程可能也有帮助:是否可以从Keras的flow_from_directory自动推断出class_weight?
选项2
您可以使用带有生成器的虚拟训练运行,您可以应用旋转,缩放,裁剪,翻转等图像增强,并在以后保存增强图像以进行实际训练.通过这种方式,您可以为代表性不足的类创建更大或更平衡的数据集.
在这个虚拟来看,你设置save_to_dir
的flow_from_directory
功能,您选择的文件夹,以后只需要从你需要的更多的样本类的图像.您显然会丢弃任何训练结果,因为您只使用此运行来获取更多数据.