用Python做有趣的AI项目1:用 TensorFlow 实现图像分类(识别猫、狗、汽车等)

项目目标

通过构建卷积神经网络(CNN),让模型学会识别图片中是什么物体。我们将使用 CIFAR-10 数据集,它包含 10 类:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。

🛠️ 开发环境与依赖
安装依赖(用命令行运行):

pip install tensorflow matplotlib numpy

推荐使用 Jupyter Notebook,方便边学边运行,也可以用 VS Code、PyCharm 等编辑器。

第一步:导入库

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

这些库的作用:
tensorflow:用于构建和训练神经网络。
matplotlib:用于可视化图片和训练过程。
numpy:用于处理数组和数据操作。

第二步:加载和预处理数据

#python
#加载 CIFAR-10 数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()#归一化处理:将像素值从 0~255 映射到 0~1,提高模型训练效果
x_train = x_train / 255.0
x_test = x_test / 255.0# CIFAR-10 类别名
class_names = ['飞机', '汽车', '鸟', '猫', '鹿', '狗', '青蛙', '马', '船', '卡车']

第三步:查看数据

#pythonplt.figure(figsize=(10, 2))
for i in range(10):plt.subplot(1, 10, i + 1)plt.xticks([]); plt.yticks([])plt.imshow(x_train[i])plt.xlabel(class_names[y_train[i][0]])
plt.show()

这一部分可以帮你初步理解数据的样子和类别。

第四步:构建 CNN 模型

#pythonmodel = models.Sequential([layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),layers.MaxPooling2D((2, 2)),layers.Conv2D(64, (3, 3), activation='relu'),layers.MaxPooling2D((2, 2)),layers.Conv2D(64, (3, 3), activation='relu'),layers.Flatten(),layers.Dense(64, activation='relu'),layers.Dense(10)  # 输出层:10个类
])model.summary()  # 查看模型结构

📌 注解:

Conv2D 是卷积层,能提取图像的边缘、角点等特征。

MaxPooling2D 是池化层,用于降维。

Flatten 把多维数据展平成一维。

Dense 是全连接层,用于分类决策。

第五步:编译和训练模型

#pythonmodel.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])history = model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))

💡 小贴士:

adam 是一种优化器,适合初学者使用。

SparseCategoricalCrossentropy 适合标签是整数而不是 one-hot 的分类任务。

第六步:训练过程可视化

#pythonplt.plot(history.history['accuracy'], label='训练准确率')
plt.plot(history.history['val_accuracy'], label='验证准确率')
plt.xlabel('Epoch'); plt.ylabel('Accuracy')
plt.legend(); plt.grid()
plt.show()

这个图能直观看到模型是否在过拟合或欠拟合。

第七步:评估模型

#python
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f'测试准确率:{test_acc:.2f}')

第八步:预测和展示结果

#pythonprobability_model = models.Sequential([model, layers.Softmax()])
predictions = probability_model.predict(x_test)#展示前5张图片及其预测结果
for i in range(5):plt.imshow(x_test[i])plt.title(f"预测:{class_names[np.argmax(predictions[i])]} / 实际:{class_names[y_test[i][0]]}")plt.axis('off')plt.show()

第九步:保存与加载模型

#python
#保存模型
model.save('cifar10_cnn_model.h5')#加载模型
new_model = tf.keras.models.load_model('cifar10_cnn_model.h5')

🔄 扩展建议

训练猫狗二分类模型(用 Kaggle 的数据集)。
加 BatchNormalization、Dropout 提升泛化能力。
使用更强的预训练模型如 MobileNet、ResNet。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D可视化编辑器模版

体验地址:http://mute.turntip.cn 整个搭建平台核心模块包含如下几个部分: 3D场景渲染 组件拖拽系统 元素编辑功能 状态管理 历史记录与撤销/重做 技术栈 前端框架与库 React 18 用于构建用户界面的JavaScript库 Next.js 14 React框架,提供服…

“连接世界的桥梁:深入理解计算机网络应用层”

一、引言 当你浏览网页、发送邮件、聊天或观看视频时,这一切都离不开计算机网络中的应用层(Application Layer)。 应用层是网络协议栈的最顶层,直接为用户的各种应用程序提供服务。它为用户进程之间建立通信桥梁,屏蔽了…

JavaScript 代码搜索框

1. 概述与需求分析 功能&#xff1a;在网页中实时搜索用户代码、关键字&#xff1b;展示匹配行、文件名&#xff1b;支持高亮、正则、模糊匹配。非功能&#xff1a;大文件集&#xff08;几十万行&#xff09;、高并发、响应 <100ms&#xff1b;支持增量索引和热更新。 2. …

【运维】Ubuntu apt 更新失败?Temporary failure resolving ‘cn.archive.ubuntu.com‘ 问题

Ubuntu apt 更新失败&#xff1f;Temporary failure resolving ‘cn.archive.ubuntu.com’ 问题 在使用 Ubuntu 时&#xff0c;你是否遇到过这样一个烦人的错误&#xff1a; Temporary failure resolving ‘cn.archive.ubuntu.com’ 如果你也踩坑了&#xff0c;别慌&#xff0…

Uniapp:showLoading(等待加载)

目录 一、出现场景二、效果展示三、具体使用一、出现场景 在项目的开发中,我们经常会请求后台接口返回数据,但是每一个接口返回数据的时间不一致,有的快,有的慢,这个时候如果不加一个遮罩层,接口返回慢的时候,非常影响用户体验 二、效果展示 三、具体使用 显示加载框…

【11408学习记录】英语书信通知写作模板大全:5个高分句式+使用场景解析,速存每日一句拆解练习!

书信/通知写作锦囊妙句 英语写作——19个锦囊妙句妙句9妙句10妙句11妙句12妙句13 每日一句词汇第一步&#xff1a;找谓语第二步&#xff1a;断句第三步&#xff1a;简化让步状语从句限定性同位语从句主句 英语 写作——19个锦囊妙句 妙句9 故宫在中国人民中很受欢迎/评价很高…

Unity 粒子同步,FishNet

Github的工程 同步画面 使用FishNet插件同步&#xff0c;可使用这个选项来克隆第二个项目进行测试

【hadoop】案例:MapReduce批量写入HBase

1.需求分析 我们仍然以美国各个气象站每年的气温数据集为例&#xff0c;现在要求使用MapReduce读取该数据集&#xff0c;然后批量写入HBase数据库&#xff0c;最后利用HBase shell根据行键即席查询气温数据。 2.数据集准备 数据集的文件名为temperature.log&#xff0c;里面包含…

【linux网络】网络基础概念

1. 初始协议 1.1 OSI 七层模型 OSI&#xff08;Open System Interconnection&#xff0c;开放系统互连&#xff09;七层网络模型称为开放式系统互联参考模型&#xff0c;是一个逻辑上的定义和规范&#xff1b; 把网络从逻辑上分为了 7 层. 每一层都有相关、相对应的物理设备&a…

【Android】谈谈DexClassLoader

一,Dex和Jar DEX 文件(Dalvik Executable)相较于普通的 JAR(Java 字节码 .class 文件)进行了多方面的优化,主要是为了适应 Android 设备的性能和资源限制(例如内存、存储空间和处理能力)。以下是 DEX 文件的一些具体优化点: 1. 内存占用优化 合并类文件: DEX 文件将…

【Flutter】Unity 三端封装方案:Android / iOS / Web

关联文档&#xff1a;【方案分享】Flutter Unity 跨平台三维渲染架构设计全解&#xff1a;插件封装、通信机制与热更新机制—— 支持 Android/iOS/Web 的 3D 内容嵌入与远程资源管理&#xff0c;助力 XR 项目落地 —— 支持 Android/iOS/Web 的 3D 内容嵌入与远程资源管理&…

Html1

一&#xff0c;HTML概述 网页开发需要学习的知识&#xff1a; html css javaScript 两个框架 VUE.js ElementUI UI user interface 用户界面 HTML xml 可扩展标记语言-->存储数据 Markup Language标签语言都会提供各种标…

一、I/O的相关概念

I/O的相关概念 1、I/O I/O即Input和Output&#xff0c;用户进程执行I/O操作&#xff0c;归结起来&#xff0c;也就是向操作系统发出请求&#xff0c;读请求就把数据填到缓冲区里&#xff0c;写数据就把缓冲区里数据排干&#xff0c;目的地可以是磁盘也可以是其他通道。进程通…

出现Invalid bound statement (not found)问题的原因可能有哪些

1.全局配置文件没配好&#xff1f; 检查全局配置文件application.properties或application.yml是否配置扫描mapper包的文件路径 #mybatis配置mapper文件路径 #mybatis.mapper-locationsclasspath:/mapper/*.xml #mybatis-plus配置mapper文件路径 mybatis-plus.mapper-locatio…

第十节:文本编辑

理论知识 文本编辑器的基本概念&#xff1a;文本编辑器是用于创建和编辑文本文件的工具。在 Linux 系统中&#xff0c;常见的文本编辑器有 vi、vim、nano 等。vi 和 vim 编辑器&#xff1a;vi 是一款经典的文本编辑器&#xff0c;vim 是 vi 的增强版&#xff0c;提供了更多的功…

部署一个自己的Spring Ai 服务(deepseek/通义千问)

Spring Boot 无缝接入 DeepSeek 和通义千问请求日志记录及其ip黑白名单 SpringBoot版本 3.2.0 JDK 版本为17 redis 3.2.0 mybatis 3.0.3 依赖引入 关键依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-sp…

组装 (DIY) 一台显示器 (4K 屏支持 4 画面分屏 PBP 1080p x4)

首发日期 2025-04-26, 以下为原文内容: 家里的 PC 主机比较多, 如果同时开机, 显示器就不够用了. 因为穷, 窝租住的房间又很小, 放不下很多显示器. 所以, 窝希望买一台支持 分屏 功能的显示器. 最好是 4K 分辨率 (3840x2160) 的屏幕, 然后 4 分屏 (有 4 个 DP 或 HDMI 输入接口…

[Java入门]抽象类和接口

[Java入门]抽象类和接口 1. 抽象类1.1 抽象类的概念1.2 抽象类语法1.3 抽象类特性1.4 抽象类的作用 2. 接口2.1 接口的概念2.2 语法规则2.3 接口使用2.4 接口特性2.5 实现多个接口2.6 接口间的继承2.7 抽象类和接口的区别 3. Object类3.1 获取对象信息3.2 对象比较equals方法 1…

聚焦数字中国|AI赋能与安全守护:Coremail引领邮件办公智能化转型

4月28日&#xff0c;第八届数字中国建设峰会在福州拉开序幕。当天&#xff0c;数字中国新产品新技术发布会开讲&#xff0c;Coremail受邀亮相现场&#xff0c;与与会嘉宾分享AI在邮件产品领域的最新应用成果和实践经验。 Coremail首席客户代表刘子建以《AI赋能与安全守护&#…

Qt官方案例知识点总结(拖放操作——Drag And Drop Robot )

-------------------------------------------------------------------------------------------------------------------------------- QPixmap轮廓剪裁 去掉Pixmap的外围部分&#xff0c;如下&#xff1a; QPixmap pixmap("./img"); //调用createHeuristicMas…