当前位置: 首页 > news >正文

Python中的卷积神经网络(CNN)入门

卷积神经网络(Convolutional Neural Networks, CNN)是一类特别适用于处理图像数据的深度学习模型。在Python中,我们可以使用流行的深度学习库TensorFlow和Keras来创建和训练一个CNN模型。在本文中,我们将介绍如何使用Keras创建一个简单的CNN模型,并用它对手写数字进行分类。

1. 准备数据集

我们将使用MNIST数据集,这是一个常用的手写数字数据集。Keras库提供了一个方便的函数来加载MNIST数据集。数据集包含60000个训练样本和10000个测试样本,每个样本是一个28x28的灰度图像。

python
复制代码
from tensorflow.keras.datasets import mnist(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

接下来,我们需要对数据进行预处理。我们将图像数据归一化到0-1之间,并将标签数据进行one-hot编码:

python
复制代码
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype("float32") / 255test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype("float32") / 255from tensorflow.keras.utils import to_categoricaltrain_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
2. 创建CNN模型

我们将使用Keras创建一个简单的CNN模型,包括卷积层、池化层、全连接层等。模型的结构如下:

  • 卷积层:使用32个3x3的卷积核,激活函数为ReLU;
  • 池化层:使用2x2的最大池化;
  • 卷积层:使用64个3x3的卷积核,激活函数为ReLU;
  • 池化层:使用2x2的最大池化;
  • 全连接层:包含128个神经元,激活函数为ReLU;
  • 输出层:包含10个神经元,激活函数为softmax。
python
复制代码
from tensorflow.keras import layers
from tensorflow.keras import modelsmodel = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation="relu", input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation="relu"))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(128, activation="relu"))
model.add(layers.Dense(10, activation="softmax"))
3. 训练CNN模型

我们将使用训练数据集训练CNN模型,并在测试数据集上评估模型性能。我们将使用交叉熵损失函数和Adam优化器,训练10个epoch。

python
复制代码
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])model.fit(train_images, train_labels, epochs=10, batch_size=64)test_loss, test_acc = model.evaluate(test_images, test_labels)
print("Test accuracy: {:.2f}%".format(test_acc * 100))
4. 使用CNN模型进行预测

训练好CNN模型后,我们可以用它对新的图像数据进行预测。下面我们将随机选择一个测试图像,并使用模型进行预测。

python
复制代码
import numpy as np
import matplotlib.pyplot as pltindex = np.random.randint(0, len(test_images))
image = test_images[index]plt.imshow(image.reshape(28, 28), cmap="gray")
plt.show()predictions = model.predict(np.expand_dims(image, axis=0))
predicted_label = np.argmax(predictions)print("Predicted label:", predicted_label)

上述代码将展示一个随机选择的手写数字图像,并输出模型预测的结果。

这就是如何在Python中使用Keras创建和训练一个简单的CNN模型进行手写数字分类。在实际应用中,可以根据需求调整CNN模型的结构和参数以优化性能。

相关文章:

  • 第15届蓝桥杯嵌入式省赛准备第二天总结笔记(使用STM32cubeMX创建hal库工程+按键输入)
  • FPGA物理引脚,原理(Pacakge and pinout)-认知3
  • 使用 vsCode创建GO项目
  • locust快速入门--使用locust-plugins保存类似jmeter的csv数据
  • Conda python管理环境environments 一 从入门到精通
  • 第一篇【传奇开心果短博文系列】Python库技术点案例示例:cv2库常用功能和方法
  • 【shell编程入门】正则表达式
  • Opncv模板匹配 单模板匹配 多模板匹配
  • ZJOI2009 对称的正方形
  • 2024Navicat最新下载安装教程
  • Spring框架面试题
  • 使用代理加速docker pull
  • rabbitMq 入门及面试大全
  • C#,实用新型加强版的整数数组
  • 分布式锁实现(mysql,以及redis)以及分布式的概念
  • [LeetCode] Wiggle Sort
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 230. Kth Smallest Element in a BST
  • extjs4学习之配置
  • If…else
  • MySQL-事务管理(基础)
  • WePY 在小程序性能调优上做出的探究
  • 番外篇1:在Windows环境下安装JDK
  • 分布式熔断降级平台aegis
  • 如何用vue打造一个移动端音乐播放器
  • 思否第一天
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 国内开源镜像站点
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • $.ajax()
  • (06)Hive——正则表达式
  • (js)循环条件满足时终止循环
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (蓝桥杯每日一题)love
  • (篇九)MySQL常用内置函数
  • (四)库存超卖案例实战——优化redis分布式锁
  • .gitignore文件设置了忽略但不生效
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net web项目 调用webService
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net操作Excel出错解决
  • .NET连接MongoDB数据库实例教程
  • :“Failed to access IIS metabase”解决方法
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [20170713] 无法访问SQL Server
  • [2669]2-2 Time类的定义
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [BZOJ 4598][Sdoi2016]模式字符串