利用ImageDataGenerator构建数据集

本文介绍如何使用Keras的ImageDataGenerator进行图片预处理,包括数据增强和归一化,应用于猫狗分类的机器学习流程。通过构建CNN模型,实现训练、测试和模型改进,有效解决过拟合问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ImageDataGenerator属于Keras的图片预处理模块,在Tensorflow 2.0中已集成了Keras的API。

本文利用ImageDataGenerator来完成一个基本的机器学习流程:

  1. 检查并了解数据
  2. 建立输入管道
  3. 建立模型
  4. 训练模型
  5. 测试模型
  6. 改进模型并重复该过程

 1. 检查并了解数据:

  • 导入必要的package

from __future__ import absolute_import, division, print_function, unicode_literals

import tensorflow as tf

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator

import os
import numpy as np
import matplotlib.pyplot as plt
  • 下载图片数据

本文以猫狗分类数据集为例子。

_URL = 'https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip'

path_to_zip = tf.keras.utils.get_file('cats_and_dogs.zip', origin=_URL, extract=True)

PATH = os.path.join(os.path.dirname(path_to_zip), 'cats_and_dogs_filtered')

可以打印PATH变量查看图片保存路径:print(PATH)

图片文件结构如下:

cats_and_dogs_filtered
|__ train
    |______ cats: [cat.0.jpg, cat.1.jpg, cat.2.jpg ....]
    |______ dogs: [dog.0.jpg, dog.1.jpg, dog.2.jpg ...]
|__ validation
    |______ cats: [cat.2000.jpg, cat.2001.jpg, cat.2002.jpg ....]
    |______ dogs: [dog.2000.jpg, dog.2001.jpg, dog.2002.jpg ...]
  • 划分训练/验证数据集

由于这个数据集本身就已经按文件夹划分好的训练/验证数据集,因此可以直接基于这些文件夹来生成不同的数据集。

后面部分将使用.flow_from_directory(directory)方法来生成数据集,因此先构建训练/验证数据集的文件路径名:

train_dir = os.path.join(PATH, 'train')
validation_dir = os.path.join(PATH, 'validation')

train_cats_dir = os.path.join(train_dir, 'cats')  # directory with our training cat pictures
train_dogs_dir = os.path.join(train_dir, 'dogs')  # directory with our training dog pictures
validation_cats_dir = os.path.join(validation_dir, 'cats')  # directory with our validation cat pictures
validation_dogs_dir = os.path.join(validation_dir, 'dogs')  # directory with our validation dog pictures

查看训练/验证数据集的大小:

num_cats_tr = len(os.listdir(train_cats_dir))
num_dogs_tr = len(os.listdir(train_dogs_dir))

num_cats_val = len(os.listdir(validation_cats_dir))
num_dogs_val = len(os.listdir(validation_dogs_dir))

total_train = num_cats_tr + num_dogs_tr
total_val = num_cats_val + num_dogs_val

print('total training cat images:', num_cats_tr)
print('total training dog images:', num_dogs_tr)

print('total validation cat images:', num_cats_val)
print('total validation dog images:', num_dogs_val)
print("--")
print("Total training images:", total_train)
print("Total validation images:", total_val)

2. 建立输入管道

定义一些参数,方便后续使用:

batch_size = 128
epochs = 15
IMG_HEIGHT = 150
IMG_WIDTH = 150
  • 构造ImageDataGenerator

ImageDataGenerator类包含了许多图片预处理参数,例如 rescale 可以实现图片像素归一化。同时,为了防止模型过拟合可以采取一些数据增强(Data augmentation)操作:水平翻转、随机旋转等。完整的ImageDataGenerator初始化参数如下:

Class ImageDataGenerator

Generate batches of tensor image data with real-time data augmentation.

Arguments:

  • featurewise_center: Boolean. Set input mean to 0 over the dataset, feature-wise.
  • samplewise_center: Boolean. Set each sample mean to 0.
  • featurewise_std_normalization: Boolean. Divide inputs by std of the dataset, feature-wise.
  • samplewise_std_normalization: Boolean. Divide each input by its std.
  • zca_epsilon: epsilon for ZCA whitening. Default is 1e-6.
  • zca_whitening: Boolean. Apply ZCA whitening.
  • rotation_range: Int. Degree range for random rotations.
  • width_shift_range: Float, 1-D array-like
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值