Tensorflow 中的tf.keras.preprocessing.image.ImageDataGenerator()和.flow()介绍

 1 tf.keras.preprocessing.image.ImageDataGenerator()

  生成批量张量图像数据与实时数据增强

白化是一种重要的预处理过程,其目的就是降低输入数据的冗余性,使得经过白化处理的输入数据具有如下性质:(i)特征之间相关性较低;(ii)所有特征具有相同的方差。
tf.keras.preprocessing.image.ImageDataGenerator(
    featurewise_center=False,输入数据集的均值设置为0
    samplewise_center=False,每个样本的均值设置为0
    featurewise_std_normalization=False,根据数据集的标准差std对输入进行区分。
    samplewise_std_normalization=False,将每个输入除以它的std。
    zca_whitening=False,应用ZCA白化
    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,当fill_mode='constant'时输入边界之外的点的填充值,默认0
    horizontal_flip=False,随机水平翻转输入
    vertical_flip=False,随机垂直翻转输入
    rescale=None,图像像素归一化因子,一般为1/255,在完成所有转换后给数据×1/255
    preprocessing_function=None,用户自定义函数进行图像增强,输入参数为图像,输出为numpy张量

    data_format=None,数据格式默认channels_last,即(n,h,w,c)
    validation_split=0.0,验证集的分割比例
    dtype=None 生成数组的类型
)

 

2 .flow()

  获取数据和标签数组,生成批量增强数据。

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如果在ImageDataGenerator中设置了validation_split,则是数据的子集("training"或"validation")

 3 示例

 这里只展示如何应用ImageDataGenerator()和flow()

train_data=ImageDataGenerator(
    rescale=1/255,
    rotation_range=40,#旋转40度
    width_shift_range=0.2, #宽度方向平移20%
    height_shift_range=0.2,
    shear_range=0.1,
    zoom_range=0.2,
    horizontal_flip=True, #水平翻转
    fill_mode='nearest' #填充方式最近邻
                             )
test_data=ImageDataGenerator(rescale=1/255)

model.compile(loss=tf.keras.losses.sparse_categorical_crossentropy,optimizer=

tf.optimizers.RMSprop(learning_rate=0.001),metrics=['acc'])
#模型开始训练
start_time=datetime.datetime.now()
history=model.fit(train_data.flow(training_images,training_labels,batch_size=32),
                 steps_per_epoch=len(training_images)/32,#全部训练数据用一次所需要的epoch
                 epochs=15,#一共训练15轮
                 validation_data=test_data.flow(testing_images,testing_labels,batch_size=32),
                 validation_steps=len(testing_images)/32 #全部测试数据用一次所需要的epoch
                 ) 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 设置训练集和验证集的路径 train_dir = 'path/to/train/directory' validation_dir = 'path/to/validation/directory' # 定义数据生成器 train_datagen = ImageDataGenerator(rescale=1./255) validation_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( train_dir, target_size=(150, 150), batch_size=32, class_mode='categorical') validation_generator = validation_datagen.flow_from_directory( validation_dir, target_size=(150, 150), batch_size=32, class_mode='categorical') # 构建卷积神经网络模型 model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Conv2D(64, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dense(5, activation='softmax') ]) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.RMSprop(lr=1e-4), metrics=['acc']) # 训练模型 history = model.fit( train_generator, steps_per_epoch=train_generator.samples/train_generator.batch_size, epochs=30, validation_data=validation_generator, validation_steps=validation_generator.samples/validation_generator.batch_size, verbose=2) # 保存模型 model.save('flower_classification.h5')给这个代码添加SeNet
最新发布
06-13
好的,我来为你添加SeNet。 首先,导入必要的库: ```python import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.layers import * from tensorflow.keras.models import Model ``` 然后,定义数据生成器: ```python train_datagen = ImageDataGenerator(rescale=1./255) validation_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( train_dir, target_size=(150, 150), batch_size=32, class_mode='categorical') validation_generator = validation_datagen.flow_from_directory( validation_dir, target_size=(150, 150), batch_size=32, class_mode='categorical') ``` 接下来,我们定义SeNet模型: ```python def SENet(input_shape, classes): input_tensor = Input(shape=input_shape) x = Conv2D(64, (3,3), padding='same', activation='relu')(input_tensor) x = Conv2D(64, (3,3), padding='same', activation='relu')(x) x = Conv2D(128, (3,3), padding='same', activation='relu')(x) x = MaxPooling2D(pool_size=(2,2))(x) x = Conv2D(256, (3,3), padding='same', activation='relu')(x) x = Conv2D(256, (3,3), padding='same', activation='relu')(x) x = Conv2D(512, (3,3), padding='same', activation='relu')(x) x = GlobalAveragePooling2D()(x) x = Dense(512, activation='relu')(x) x = Dense(classes, activation='softmax')(x) model = Model(inputs=input_tensor, outputs=x) return model ``` 然后,我们为SeNet模型编译优化器和损失函数: ```python model = SENet(input_shape=(150,150,3), classes=5) model.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.RMSprop(lr=1e-4), metrics=['acc']) ``` 最后,我们训练模型,保存模型: ```python history = model.fit(train_generator, steps_per_epoch=train_generator.samples/train_generator.batch_size, epochs=30, validation_data=validation_generator, validation_steps=validation_generator.samples/validation_generator.batch_size, verbose=2) model.save('flower_classification_with_se.h5') ``` 这样,我们就成功地为这个代码添加了SeNet。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冲冲冲@chong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值