tensorflow中Keras ---图像预处理----tf.keras.preprocessing.image.ImageDataGenerator 类

news/2024/11/29 22:55:44/

1.源代码:

tf.keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,samplewise_center=False,featurewise_std_normalization=False,samplewise_std_normalization=False,zca_whitening=False,zca_epsilon=1e-06,rotation_range=0,width_shift_range=0.0,height_shift_range=0.0,brightness_range=None,shear_range=0.0,zoom_range=0.0,channel_shift_range=0.0,fill_mode='nearest',cval=0.0,horizontal_flip=False,vertical_flip=False,rescale=None,preprocessing_function=None,data_format=None,validation_split=0.0,interpolation_order=1,dtype=None
)

2. 参数:

  • featurewise_center:布尔值,使输入数据集去中心化(均值为0),逐特征进行。
  • samplewise_center:布尔值,使输入数据的每个样本均值为0
  • featurewise_std_normalization:布尔值,将输入除以数据集的标准差以完成标准化, 按feature执行
  • samplewise_std_normalization:布尔值,将输入的每个样本除以其自身的标准差
  • zca_whitening:布尔值,对输入数据施加ZCA白化
  • zca_epsilon: ZCA使用的eposilon,默认1e-6
  • rotation_range:整数,图片随机转动的角度范围
  • width_shift_range:浮点数,一维数组或整数,图片宽度的某个比例,数据提升时图片水平偏移的幅度
  • float:如果<1,则除以总宽度的值,如果>=1,则为宽度像素值
  • 一维数组:数组中的随机元素
  • 整型:来自间隔(-width_shift_range,width_shift_range)之间的整数个像素
  • width_shift_range=2:可能值是整数[-1,0,1],与width_shift_range=[-1,0,1]相同,而当width_shfit_range=1.0时,可能值是半开区间[-1.0,1.0]之间的浮点数(后半句没有理解)。
  • height_shift_range:浮点数,图片高度的某个比例,数据提升时图片竖直偏移的幅度。具体含义与width_shift_range相同。
  • brightness_range:两个float组成的元组或列表。选择亮度值的范围
  • shear_range:浮点数,剪切强度(逆时针方向的剪切变换角度)
  • zoom_range:浮点数或[lower, upper]。随机缩放范围,如果是浮点数,[lower, upper] = [1-zoom_range, 1+zoom_range]
  • channel_shift_range:浮点数,随机通道转换的范围。
  • fill_mode: {"constant", "nearest", "reflect" or "wrap"} 之一。默认为'nearest'。输入边界以外的点根据给定的模式填充:
  • 'constant': kkkkkkkk|abcd|kkkkkkkk (cval=k)
  • 'nearest': aaaaaaaa|abcd|dddddddd
  • 'reflect': abcddcba|abcd|dcbaabcd
  • 'wrap': abcdabcd|abcd|abcdabcd
  • cval: 浮点数或整数。用于边界之外的点的值,当fill_mode = "constant"时。
  • horizontal_flip: 布尔值,随机水平翻转。
  • vertical_flip: 布尔值,随机垂直翻转。
  • rescale: 重缩放因子。默认为 None。如果是 None 或 0,不进行缩放,否则将数据乘以所提供的值(在应用任何其他转换之后)
  • preprocessing_function:该函数应用于每个输入上,在图像被resize和增强之后运行。该函数接收一个参数,一张图像(秩为3的numpy tensor),同样输出一个相同shape的Numpy tensor。
  • data_format:图像数据格式,{"channels_first", "channels_last"} 之一。"channels_last" 模式表示图像输入尺寸应该为(samples, height, width, channels),"channels_first" 模式表示输入尺寸应该为(samples, channels, height, width)。默认为 在 Keras 配置文件~/.keras/keras.json中的image_data_format值。如果你从未设置它,那它就是"channels_last"。
  • validation_split:浮点型。保留用于验证集的图像比例(严格在0,1之间)
  • dtype:生成数组使用的数据类型。

3. 使用ImageDataGenerator 类中的方法生成训练集和测试集:

flow: 

该方法输入数据(Numpy或元组形式)和标签(可选),返回一个迭代器,格式是元组(x,y)(x)(x,y,sample_weight)。该方法还可以指定样本输出路径及前缀,格式,用于保存增强处理后的图像。 

flow_from_dataframe:

输入数据为Pandas dataframe格式。返回生成(x, y) 元组的DataFrameIterator。

flow_from_directory:

获取图像路径,生成批量增强数据。该方法只需指定数据所在的路径,而无需输入numpy形式的数据,也无需输入标签值,会自动返回对应的标签值。返回一个生成(x, y)元组的DirectoryIterator

源码参数:

flow(x,y=None,batch_size=32,shuffle=True,sample_weight=None,seed=None,save_to_dir=None,save_prefix='',save_format='png',ignore_class_split=False,subset=None
)

参数:

x: 输入数据。秩为 4 的 Numpy 矩阵或元组。如果是元组,第一个元素应该包含图像,第二个元素是另一个 Numpy 数组或一列 Numpy 数组,它们不经过任何修改就传递给输出。可用于将模型杂项数据与图像一起输入。对于灰度数据,图像数组的通道轴的值应该为 1,而对于 RGB 数据,其值应该为 3。
y:标签
batch_size:整型,默认32
shuffle:布尔型,默认True,是否混洗数据
sample_weight:样本权重
seed:默认None
save_to_dir:None 或 字符串(默认为 None)。这使您可以选择指定要保存的正在生成的增强图片的目录
save_prefix: 字符串(默认 ‘’)。保存图片的文件名前缀(仅当 save_to_dir 设置时可用)。
save_format: "png", "jpeg" 之一(仅当 save_to_dir 设置时可用)。默认:“png”。
subset: 数据子集 ("training" 或 "validation"),如果 在 ImageDataGenerator 中设置了 validation_split。
返回值:
一个生成元组 (x, y) 的 Iterator,其中 x 是图像数据的Numpy 数组(在单张图像输入时),或 Numpy 数组列表(在额外多个输入时),y 是对应的标签的 Numpy 数组。如果 'sample_weight' 不是 None,生成的元组形式为(x, y, sample_weight)。如果 y 是 None, 只有 Numpy 数组 x 被返回。

flow_from_dataframe(dataframe,directory=None,x_col='filename',y_col='class',weight_col=None,target_size=(256, 256),color_mode='rgb',classes=None,class_mode='categorical',batch_size=32,shuffle=True,seed=None,save_to_dir=None,save_prefix='',save_format='png',subset=None,interpolation='nearest',validate_filenames=True,**kwargs
)

参数:

dataframe: Pandas dataframe,一列为图像的文件名,另一列为图像的类别, 或者是可以作为原始目标数据多个列。
directory: 字符串,目标目录的路径,其中包含在 dataframe 中映射的所有图像。
x_col : 字符串,dataframe中包含目标图像文件夹的目录的列。
y_col: 字符串或字符串列表,dataframe中将作为目标数据的列。
has_ext: 布尔值,如果 dataframe[x_col] 中的文件名具有扩展名则为True,否则为 False。
target_size: 整数元组(height, width),默认为 (256, 256)。所有找到的图都会调整到这个维度。
color_mode: "grayscale", "rbg" 之一。默认:"rgb"。 图像是否转换为 1 个或 3 个颜色通道。
classes: 可选的类别列表 (例如, ['dogs', 'cats'])。默认:None。 如未提供,类比列表将自动从 y_col 中推理出来,y_col将会被映射为类别索引)。 包含从类名到类索引的映射的字典可以通过属性class_indices获得。
class_mode: "categorical", "binary", "sparse", "input", "other" or None之一。 默认:"categorical"。决定返回标签数组的类型:
"categorical" 将是2D one-hot编码标签,
"binary" 将是 1D 二进制标签,
"sparse" 将是 1D 整数标签,
"input" 将是与输入图像相同的图像(主要用于与自动编码器一起使用),
"other" 将是y_col数据的numpy数组,None,不返回任何标签(生成器只会产生批量的图像数据,这对使用 model.predict_generator(), model.evaluate_generator() 等很有用)。
batch_size: 批量数据的尺寸(默认:32)。
shuffle: 是否混洗数据(默认:True)
seed: 可选的混洗和转换的随即种子。
save_to_dir: None 或 str (默认: None). 这允许你可选地指定要保存正在生成的增强图片的目录(用于可视化您正在执行的操作)。
save_prefix: 字符串。保存图片的文件名前缀(仅当 save_to_dir 设置时可用)。
save_format: "png","jpeg"之一(仅当save_to_dir设置时可用)。默认:"png"。
follow_links: 是否跟随类子目录中的符号链接(默认:False)。
subset: 数据子集 ("training"或"validation"),如果在ImageDataGenerator 中设置了validation_split。
interpolation: 在目标大小与加载图像的大小不同时,用于重新采样图像的插值方法。 支持的方法有"nearest", "bilinear", and "bicubic"。 如果安装了 1.1.3 以上版本的 PIL 的话,同样支持"lanczos"。 如果安装了 3.4.0 以上版本的 PIL 的话,同样支持 "box"和"hamming"。 默认情况下,使用"nearest"。
返回值:
一个生成(x, y) 元组的DataFrameIterator, 其中x是一个包含一批尺寸为 (batch_size, *target_size, channels)的图像样本的numpy数组,y 是对应的标签的 numpy 数组。

flow_from_directory(directory,target_size=(256, 256),color_mode='rgb',classes=None,class_mode='categorical',batch_size=32,shuffle=True,seed=None,save_to_dir=None,save_prefix='',save_format='png',follow_links=False,subset=None,interpolation='nearest',keep_aspect_ratio=False
)

参数:

directory:目标目录的路径。每个类应该包含一个子目录。任何在子目录树下的 PNG, JPG, BMP, PPM 或 TIF 图像,都将被包含在生成器中。
target_size:整数元组(height,width),默认:(256,256)。所有的图像将被调整到的尺寸.
color_mode:"grayscale","rbg"之一。默认:"rgb"。图像是否被转换成 1 或 3 个颜色通道。
classes:可选的类的子目录列表(例如['dogs', 'cats'])。默认:None。如果未提供,类的列表将自动从 directory下的子目录名称/结构中推断出来,其中每个子目录都将被作为不同的类(类名将按字典序映射到标签的索引)。包含从类名到类索引的映射的字典可以通过class_indices属性获得。
class_model:"categorical"(多分类问题), "binary"(二分类), "sparse"(y_true是单个值), "input"或None之一。默认:"categorical"。决定返回的标签数组的类型:
"categorical"将 2D one-hot编码标签,
"binary"将是1D二进制标签,"sparse"将是 1D 整数标签,
"input"将是与输入图像相同的图像(主要用于自动编码器)。
如果为 None,不返回标签(生成器将只产生批量的图像数据,对于 model.predict_generator(), model.evaluate_generator() 等很有用)。请注意,如果 class_mode 为 None,那么数据仍然需要驻留在 directory 的子目录中才能正常工作。
batch_size: 一批数据的大小(默认 32)。
shuffle:是否混洗数据(默认 True)
seed:可选随机种子,用于混洗和转换。
save_to_dir:None或字符串(默认None)。这使你可以最佳地指定正在生成的增强图片要保存的目录(用于可视化你在做什么)。
save_format:字符串。 保存图片的文件名前缀(仅当 save_to_dir 设置时可用)。
follow_links:是否跟踪类子目录中的符号链接(默认为 False)。
subset:数据子集("training"或"validation"),如果 在 ImageDataGenerator 中设置了 validation_split。
interpolation:在目标大小与加载图像的大小不同时,用于重新采样图像的插值方法。 支持的方法有 "nearest", "bilinear", and "bicubic"。 如果安装了 1.1.3 以上版本的 PIL 的话,同样支持 "lanczos"。 如果安装了 3.4.0 以上版本的 PIL 的话,同样支持 "box" 和 "hamming"。 默认情况下,使用 "nearest"。
返回值:
一个生成(x, y)元组的 DirectoryIterator,其中 x 是一个包含一批尺寸为 (batch_size, *target_size, channels)的图像的 Numpy 数组,y 是对应标签的 Numpy 数组。

4. 实例一个数据集

使用flow生成数据迭代器:

(x_train, y_train), (x_test, y_test) = cifar10.load_data()
y_train = utils.to_categorical(y_train, num_classes)
y_test = utils.to_categorical(y_test, num_classes)#图片数据先预处理:
datagen = ImageDataGenerator(featurewise_center=True,featurewise_std_normalization=True,rotation_range=20,width_shift_range=0.2,height_shift_range=0.2,horizontal_flip=True,validation_split=0.2)datagen.fit(x_train)#使用flow 来生成迭代数据器
model.fit(datagen.flow(x_train, y_train, batch_size=32,subset='training'),validation_data=datagen.flow(x_train, y_train,batch_size=8, subset='validation'),steps_per_epoch=len(x_train) / 32, epochs=epochs)for e in range(epochs):print('Epoch', e)batches = 0for x_batch, y_batch in datagen.flow(x_train, y_train, batch_size=32):model.fit(x_batch, y_batch)batches += 1if batches >= len(x_train) / 32:break

使用flow_from_directory()生成数据迭代器:

train_datagen = ImageDataGenerator(rescale=1./255,shear_range=0.2,zoom_range=0.2,horizontal_flip=True)
#数据预处理
test_datagen = ImageDataGenerator(rescale=1./255)#使用flow_from_directory生成数据迭代器:
train_generator = train_datagen.flow_from_directory('data/train',target_size=(150, 150),batch_size=32,class_mode='binary')
validation_generator = test_datagen.flow_from_directory('data/validation',target_size=(150, 150),batch_size=32,class_mode='binary')#进行训练:
model.fit(train_generator,steps_per_epoch=2000,epochs=50,validation_data=validation_generator,validation_steps=800)


http://www.ppmy.cn/news/55218.html

相关文章

GT928 TP驱动跟读及虚拟按键上报解析

目前公司TP常用一套代码。MTK 平台使用.ko形式加载&#xff0c;所以跟读一下加深理解。 static struct i2c_driver tpd_i2c_driver {.driver {.of_match_table of_match_ptr(gt9xx_dt_match),},.probe tpd_i2c_probe,.remove tpd_i2c_remove,.detect tpd_i2c_detect,.dr…

leetcode-328 奇偶链表

题目如下&#xff1a; 给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &#xff0c; 第二个节点的索引为 偶数 &#xff0c;以此类推。 请注意&#xff0c;…

聚观早报|特斯拉向第三方电动车开放充电桩;Epic 诉苹果垄断败诉

今日要闻&#xff1a;特斯拉向第三方电动车开放充电桩&#xff1b;我国全面实现不动产统一登记&#xff1b;Epic 诉苹果垄断败诉&#xff1b;腾讯大股东Naspers再减持近79万股&#xff1b;星巴克中国门店将超过万家 特斯拉向第三方电动车开放充电桩 近日&#xff0c;特斯拉官方…

OpenJudge - 39:多项式输出

目录 一、题目描述 二、代码实现 一、题目描述 一元 n 次多项式可用如下的表达式表示&#xff1a; ​ 其中&#xff0c;​ 称为 i 次项&#xff0c;​ 称为 i 次项的系数。给出一个一元多项式各项的次数和系数&#xff0c;请按照如下规定的格式要求输出该多项式&#xff…

计算机视觉毕业后找不到工作怎么办?怒刷leetcode,还是另寻他路?

文章目录 一、计算机视觉毕业后找不到工作怎么办&#xff1f;二、大环境&#xff1a;前两年的泡沫太大三、还是要把自己的基本功搞扎实&#xff0c;真正的人才什么时候都紧缺四、转换思路&#xff0c;另投他坑五、要有毅力&#xff0c;心态放平六、最后的建议 一、计算机视觉毕…

合创视觉平面设计中基础色彩原则

1、灰度 灰度是一种黑白模式的色彩模式。但与黑白二色的位图不同&#xff0c;从0--255有256种不同等级的明度变化。灰度是所有创造的根源&#xff0c;也是色彩感觉不佳设计师的救星。   2、RGB RGB是一种以色光为基础的色彩模式,它是由红(Red)、绿(Green)、蓝(BIue)三种…

选择什么电容笔比较好?平价好用的iPad电容笔推荐

科学技术的迅速发展使人们的生活发生了巨大的变化。如今&#xff0c;众多的电子和数码产品层出不穷&#xff0c;而这种能够与平板电脑配套的电容笔也是如此。随着电容笔的不断发展&#xff0c;其应用范围也将不断扩大&#xff0c;今天&#xff0c;我将向大家推荐一些具有较高性…

人群计数:技术难点、商业产品化成功案例、现状、传统做法、硬件设备、

现状&#xff1a; 比较成熟了&#xff0c;准确率已经很高了&#xff08;有多高&#xff0c;后面我搞懂metrics高到什么程度&#xff0c;再汇报过来&#xff09; 商业公司基本把这个领域做的很透彻了&#xff0c;performance基本到了一一个无法提高的位置了&#xff08;和图像…