畅游人工智能之海--Keras教程之图像数据预处理(一)
上周我们结束了优化器的学习,这周我们将要展开数据预处理中关于图像数据预处理函数的学习。数据预处理的函数可以帮助我们将原始数据转换成可用于训练模型的对象,这也是训练神经网络的过程中非常重要的一步,让我们一起来看看吧。
image_dataset_from_directory函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| tf.keras.preprocessing.image_dataset_from_directory( directory, labels="inferred", label_mode="int", class_names=None, color_mode="rgb", batch_size=32, image_size=(256, 256), shuffle=True, seed=None, validation_split=None, subset=None, interpolation="bilinear", follow_links=False, )
|
该函数会从目录中的图像文件生成 tf.data.Dataset 。
如果目录结构如下:
1 2 3 4 5 6 7
| main_directory/ ...class_a/ ......a_image_1.jpg ......a_image_2.jpg ...class_b/ ......b_image_1.jpg ......b_image_2.jpg
|
然后调用image_dataset_from_directory(main_directory,labels='inferred'), 将返回tf.data.Dataset,从子目录class_a和生成批次图像class_b,以及标签0和1(0对应于class_a和1对应于class_b)。
支持的图像格式:jpeg,png,bmp,gif。动画gif被截断到第一帧。
返回值:
一个tf.data.Dataset对象。如果label_mode为None,它将生成形状为(batch_size,image_size[0],image_size[1],num_channels)的float32张量,对图像进行编码。否则,将生成一个元组 (images, labels),其images 形状为(batch_size, image_size[0], image_size[1], num_channels),有可能为int、binary和categorial。如果label_mode是int,标签是形如(batch_size,)的int32张量;如果label_mode是binary,,标签是形如(batch_size, 1)的0s和1s的float32张量;如果label_mode为categorial,标签是形如(batch_size, num_classes)的float32张量,表示类索引的单次编码。
如果color_mode为grayscale,则图像张量中有1个通道。如果color_mode是rgb,则图像张量中有3个通道。如果color_mode是rgba,则图像张量中有4个通道。
load_img函数
1 2 3 4 5 6 7
| tf.keras.preprocessing.image.load_img( path, grayscale=False, color_mode="rgb", target_size=None, interpolation="nearest" )
|
将图像加载为PIL格式。
例子:
1 2 3 4
| image = tf.keras.preprocessing.image.load_img(image_path) input_arr = keras.preprocessing.image.img_to_array(image) input_arr = np.array([input_arr]) predictions = model.predict(input_arr)
|
返回:
PIL实例
注意:
ImportError:如果PIL不可用。
ValueError:如果不支持插值方法。
img_to_array函数
1 2 3 4 5
| tf.keras.preprocessing.image.img_to_array( img, data_format=None, dtype=None )
|
返回值:
3D的numpy阵列
注意:
ValueError:如果无效img或data_format已通过。
ImageDataGenerator类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| 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, ''' float: 如果 <1,则是除以总宽度的值,或者如果 >=1,则为像素值。 1-D 数组: 数组中的随机元素。 int: 来自间隔 (-width_shift_range, +width_shift_range) 之间的整数个像素。 width_shift_range=2 时,可能值是整数 [-1, 0, +1],与 width_shift_range=[-1, 0, +1] 相同;而 width_shift_range=1.0 时,可能值是 [-1.0, +1.0) 之间的浮点数。 ''' height_shift_range=0.0, ''' float: 如果 <1,则是除以总宽度的值,或者如果 >=1,则为像素值。 1-D array-like: 数组中的随机元素。 int: 来自间隔 (-height_shift_range, +height_shift_range) 之间的整数个像素。 height_shift_range=2 时,可能值是整数 [-1, 0, +1],与 height_shift_range=[-1, 0, +1] 相同;而 height_shift_range=1.0 时,可能值是 [-1.0, +1.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, dtype=None, )
|
使用实时数据增强生成一批张量图像数据。数据将被循环(分批)。
该类有多种API,如flow、flow_from_directory等等,明天我们将进行相关的讲解。
今天我们学习了一部分图像数据预处理的函数和类,大家可以动手尝试将它们运用到代码当中,及时巩固,谢谢大家的阅读,明天见!