目录
8.构建基于PyQt5与TensorFlow的猫狗图像分类应用实现
项目背景与目的
在本文中,我们将通过一个实战项目介绍如何使用TensorFlow和Keras构建一个简单的卷积神经网络(CNN),以实现对猫和狗图像的分类任务。这个过程不仅涵盖了数据预处理、模型构建、训练与评估,还包括了模型的保存与预测,旨在为初学者提供一个完整的机器学习项目实践指南。
数据来源
本项目使用的数据集来源于CSDN博主分享的已经分类好的猫狗图片,分为训练集和测试集。
1. 准备工作:环境设置
首先,确保安装了TensorFlow库(没下载在cmd运行下面的pip)。
pip install tensorflow==2.13.0
2.数据加载
接下来,导入必要的库和模块,我们定义了图像的大小为150x150
像素,以及每次训练的批量大小为64张图片。训练和测试数据分别存储在指定的目录下。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 参数设置
image_size = (150, 150)
batch_size = 64
train_dir = r"输入你的训练集的路径"
test_dir = r"输入你的测试集的路径"
3.数据预处理
3.1 图片处理
使用ImageDataGenerator进行预处理,包括图像的缩放至150x150像素、归一化(像素值除以255使其位于0-1之间)、以及对训练集进行数据增强(如剪切、缩放、水平翻转等),以增加模型的泛化能力。测试集仅进行归一化处理,保持数据的真实性。
# 创建数据增强器,用于在训练过程中随机变换图像,提升模型泛化能力
# 数据增强器,用于提升模型的泛化能力
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True
)
# 测试数据集只进行图像大小调整
test_datagen = ImageDataGenerator(rescale=1./255)
3.2 生成器
根据目录生成训练和测试数据的生成器
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=image_size,
batch_size=batch_size,
class_mode='binary'
)
test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=image_size,
batch_size=batch_size,
class_mode='binary'
)
4.模型构建
构建一个基本的CNN模型,包括卷积层、池化层、全连接层以及Dropout层,以防止过拟合。
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),
MaxPooling2D(2, 2),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(2, 2),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D(2, 2),
Flatten(),
Dense(512, activation='relu'),
Dropout(0.5),
Dense(1, activation='sigmoid')
])
5.模型编译与训练
编译模型后,使用训练数据进行训练,并在每个epoch后使用测试数据进行验证。
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(
train_generator,
steps_per_epoch=len(train_generator),
epochs=25,
validation_data=test_generator,
validation_steps=len(test_generator)
)
-
训练过程</