首页 > 编程语言 >Python知识点:如何使用Python实现图像分类

Python知识点:如何使用Python实现图像分类

时间:2024-09-02 09:24:57浏览次数:13  
标签:知识点 plt Python 模型 label images 图像 test model

使用 Python 实现图像分类通常涉及使用深度学习库,如 TensorFlow 或 PyTorch。以下是使用 TensorFlow 和 Keras 来实现一个简单图像分类模型的步骤。

1. 安装所需的库

首先,确保已安装必要的 Python 库。使用以下命令安装 TensorFlow 和其他必需的库:

pip install tensorflow numpy matplotlib

2. 导入所需的库

在 Python 脚本或 Jupyter Notebook 中,导入所需的库。

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
import numpy as np

3. 准备数据集

在这个示例中,我们将使用 TensorFlow 自带的 CIFAR-10 数据集。CIFAR-10 是一个常用的图像分类数据集,包含 10 个类别的 60000 张 32x32 彩色图像。

# 加载 CIFAR-10 数据集
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# 归一化图像数据到 [0, 1] 范围
train_images, test_images = train_images / 255.0, test_images / 255.0

4. 查看数据集样本

可以查看数据集中部分样本以了解其内容。

# 定义类别名称
class_names = ['飞机', '汽车', '鸟', '猫', '鹿', '狗', '青蛙', '马', '船', '卡车']

# 显示前 5 张训练图像
plt.figure(figsize=(10, 10))
for i in range(5):
    plt.subplot(1, 5, i + 1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i])
    plt.xlabel(class_names[train_labels[i][0]])
plt.show()

5. 构建卷积神经网络(CNN)模型

使用 Keras 构建一个简单的卷积神经网络模型。这个模型将包含多个卷积层、池化层和全连接层。

model = models.Sequential()

# 第一层卷积层,包含 32 个 3x3 卷积核,ReLU 激活函数
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))  # 最大池化层
model.add(layers.Conv2D(64, (3, 3), activation='relu'))  # 第二层卷积层
model.add(layers.MaxPooling2D((2, 2)))  # 最大池化层
model.add(layers.Conv2D(64, (3, 3), activation='relu'))  # 第三层卷积层

# 展平层,将三维特征图转换为一维向量
model.add(layers.Flatten())

# 全连接层
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))  # 输出层,10 个神经元,对应 10 个类别

查看模型结构:

model.summary()

6. 编译模型

在训练模型之前,需要编译模型,指定损失函数、优化器和评价指标。

model.compile(optimizer='adam',  # 优化器
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),  # 损失函数
              metrics=['accuracy'])  # 评价指标

7. 训练模型

使用训练数据训练模型。指定训练次数(epochs)和批次大小(batch size)。

history = model.fit(train_images, train_labels, epochs=10, 
                    validation_data=(test_images, test_labels))

8. 评估模型性能

训练完成后,可以使用测试数据集评估模型的性能。

test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f"测试集的准确率: {test_acc:.4f}")

9. 可视化训练结果

绘制训练过程中的损失和准确率变化。

# 绘制训练和验证准确率
plt.plot(history.history['accuracy'], label='训练准确率')
plt.plot(history.history['val_accuracy'], label='验证准确率')
plt.xlabel('训练次数')
plt.ylabel('准确率')
plt.legend(loc='lower right')
plt.show()

# 绘制训练和验证损失
plt.plot(history.history['loss'], label='训练损失')
plt.plot(history.history['val_loss'], label='验证损失')
plt.xlabel('训练次数')
plt.ylabel('损失')
plt.legend(loc='upper right')
plt.show()

10. 使用模型进行预测

使用训练好的模型对新图像进行预测。

# 使用模型预测测试数据
predictions = model.predict(test_images)

# 查看某个测试样本的预测结果
def plot_image(i, predictions_array, true_label, img):
    true_label, img = true_label[i], img[i]
    plt.grid(False)
    plt.xticks([])
    plt.yticks([])

    plt.imshow(img, cmap=plt.cm.binary)

    predicted_label = np.argmax(predictions_array)
    if predicted_label == true_label:
        color = 'blue'
    else:
        color = 'red'

    plt.xlabel(f"{class_names[predicted_label]} {100*np.max(predictions_array):2.0f}% (真实: {class_names[true_label[0]]})", color=color)

# 示例:显示第一个测试样本的预测结果
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plot_image(0, predictions[0], test_labels, test_images)
plt.show()

11. 保存和加载模型

可以将模型保存到文件中以供以后使用。

# 保存模型
model.save('my_cnn_model.h5')

# 加载模型
new_model = tf.keras.models.load_model('my_cnn_model.h5')

12. 总结

通过以上步骤,我们使用 TensorFlow 和 Keras 实现了一个简单的图像分类器。过程包括数据准备、构建卷积神经网络模型、训练模型、评估性能、可视化结果、保存和加载模型等。这种方法可以扩展到更复杂的模型和更大的数据集,以应对更具挑战性的图像分类任务。

标签:知识点,plt,Python,模型,label,images,图像,test,model
From: https://blog.csdn.net/bigorsmallorlarge/article/details/141807243

相关文章

  • 【工程应用十二】Bayer图像格式中Hamilton-Adams及Zhang Wu 基于LMMSS算法的Demosaic
    Demosaic,中文直接发翻译为去马赛克,但是其本质上并不是去除马赛克,这让很多第一次接触这个名词或者概念的人总会想的更多。因此,一般传感器在采集信息时一个位置只采集RGB颜色中的一个通道,这样可以减少采集量,降低成本,由于人的视觉对绿色最为敏感,所以一般情况下,绿色分量会比红色......
  • 2024 年 13 个适用于 Linux 的最佳照片图像编辑器
      2024年13个适用于Linux的最佳照片图像编辑器   在本文中,我回顾了各种Linux发行版上可用的一些最佳照片编辑软件。这些不是唯一可用的照片编辑器,但却是Linux用户最流行和最常用的照片编辑器之一。1.GIMP首先,在列表中,我们有 GIMP,一个免费、开源、跨平台......
  • Shell编程:一篇讲透数组全知识点
    文章目录数组数组参数的使用$*$@$#数组展开示例数组定义方法数组包含的数据类型获取数组长度读取特定索引的值数组遍历数组切片数组替换删除数组追加数组元素插入数组元素向函数传递数组参数数组在Bash脚本中,数组是一种存储多个元素的变量结构,可以使用不同的......
  • 花店鲜花管理与推荐系统+Python+Django网页界面+管理系统+计算机课设
    一、介绍花店鲜花管理与推荐系统。本系统使用Python作为主要开发语言开发的一个花店鲜花管理与推荐的网站平台。网站前端界面采用HTML、CSS、BootStrap等技术搭建界面。后端采用Django框架处理用户的逻辑请求,并将用户的相关行为数据保存在数据库中。通过Ajax技术实现前后端的数......
  • LCD屏幕显示PNG图像
    正点原子LCD屏幕显示PNG图像本文概要这段时间在学习正点原子的IMX6ULL开发板,在应用编程中有一个代码练习是需要在LCD屏幕上显示PNG图像,但由于我的屏幕参数和教程中的有些出入,于是经过自己查阅和修改,终于成功在自己的LCD屏幕上显示PNG图像。LCD屏幕参数我的LCD参数如下所示:......
  • day-46 旋转图像
    思路不能使用辅助数组,所以关键在于弄清楚旋转后坐标的变化规律。当矩阵的大小n为偶数时,以n/2行和n/2列的元素为起点,当矩阵的大小n为奇数时,以n/2行和(n+1)/2列的元素为起点解题过程关键:旋转过程中互相交换的四个元素的坐标为:1.matrix[i][j]2.matrix[n-1-j][i]3.matr......
  • python进阶篇-day03-学生管理系统与深浅拷贝
    day03-学生管理系统-面向对象魔术方法:__dict__将对象的属性和属性值封装为字典用字典的值实例化对象:对象名(**字典)=>拆包student.py"""该文件记录的是:学生类的信息.​学生的属性如下: 姓名,性别,年龄,联系方式,描述信息"""​#1.定义学生类.......
  • Python——造物者type( )、元类与抽象基类
    type()函数在Python中,type()函数是一个非常重要的内置函数,它的前因后果和追根溯源可以从以下几个方面来理解:Python中所有的类本质上也是一个对象,一个从类type实例化的对象。使用type()函数对类进行操作时,会返回type本身,即typeistype。一、定义与基本用途定义:type()函数是P......
  • 【VS Code编写Python】Python 快速入门指南
    1.前言Python扩展使VisualStudioCode成为出色的Python编辑器,可在任何操作系统上运行,并可与各种Python解释器一起使用。首先安装:VS代码Python解释器(任何积极支持的Python版本)VSCode市场上的Python扩展要进一步自定义VSCodeforPython,您可以利用Python......
  • Python纯代码 取组合数结果
    总是在编程题目上碰到取列表中若干元素组合结果的情况,想出过解法但是老是忘,趁现在还记得赶紧写下来 大致思路是:通过迭代遍历每个元素位置,选择可能的位置,用yield生成并返回。 defget_c(list1,num_left=None,list2=None):""":paramlist1:待取组合数列表:......