一个简单的深度学习模型例程,使用Keras(基于TensorFlow)构建一个卷积神经网络(CNN)来分类MNIST手写数字数据集。

server/2024/12/28 19:51:03/

下面是一个简单的深度学习模型例程,使用Keras(基于TensorFlow)构建一个卷积神经网络(CNN)来分类MNIST手写数字数据集。例程包括详细的代码和说明。

1. 安装所需库

首先,确保你已经安装了tensorflow,如果没有,请运行以下命令来安装:

 

bash

复制代码

pip install tensorflow

2. 深度学习模型例程

导入必要的库
 

python

复制代码

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

加载和准备数据

MNIST数据集已经内置在Keras中,因此可以直接加载。

 

python

复制代码

# 加载MNIST数据集 (train_images, train_labels), (test_images, test_labels) = mnist.load_data() # 规范化:将像素值从[0, 255]缩放到[0, 1] train_images, test_images = train_images / 255.0, test_images / 255.0 # 将图像维度扩展为 [batch_size, height, width, channels] train_images = train_images.reshape((train_images.shape[0], 28, 28, 1)) test_images = test_images.reshape((test_images.shape[0], 28, 28, 1))

构建CNN模型

以下是一个简单的卷积神经网络(CNN)模型:

 

python

复制代码

# 构建模型 model = models.Sequential() # 第1层:卷积层 + 激活函数 model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) # 第2层:池化层 model.add(layers.MaxPooling2D((2, 2))) # 第3层:卷积层 + 激活函数 model.add(layers.Conv2D(64, (3, 3), activation='relu')) # 第4层:池化层 model.add(layers.MaxPooling2D((2, 2))) # 第5层:卷积层 + 激活函数 model.add(layers.Conv2D(64, (3, 3), activation='relu')) # 展平层:将2D数据展平为1D数据 model.add(layers.Flatten()) # 第6层:全连接层 model.add(layers.Dense(64, activation='relu')) # 输出层:使用softmax函数进行多分类 model.add(layers.Dense(10, activation='softmax'))

编译模型

在编译模型时,我们指定优化器、损失函数和评估指标。

 

python

复制代码

# 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

训练模型

我们使用训练数据进行模型训练,并指定训练的epochs(训练周期)数。

 

python

复制代码

# 训练模型 model.fit(train_images, train_labels, epochs=5)

评估模型

训练完成后,使用测试数据评估模型的表现。

 

python

复制代码

# 评估模型 test_loss, test_acc = model.evaluate(test_images, test_labels) print(f"Test accuracy: {test_acc}")

预测

使用训练好的模型进行预测,查看模型在测试集上的表现。

 

python

复制代码

# 进行预测 predictions = model.predict(test_images) # 显示预测结果和实际标签 print("Predicted label: ", predictions[0].argmax()) print("Actual label: ", test_labels[0])

可视化预测结果

我们可以通过matplotlib显示一些测试图像,并标出模型的预测结果。

 

python

复制代码

# 可视化前5个预测结果 for i in range(5): plt.imshow(test_images[i].reshape(28, 28), cmap='gray') plt.title(f"Prediction: {predictions[i].argmax()}, Actual: {test_labels[i]}") plt.show()

3. 模型详细说明

  • 卷积层(Conv2D): 卷积层是CNN中最重要的层,它负责从输入图像中提取特征。在此例程中,我们使用了3x3大小的卷积核。

    • 3264是卷积核的数量,也就是卷积层的输出通道数。卷积核数量的增加有助于模型学习更多的特征。

    • activation='relu' 表示使用ReLU激活函数。ReLU是一种常用的激活函数,能够有效地解决梯度消失问题。

  • 池化层(MaxPooling2D): 池化层用于降低特征图的维度,从而减少计算量和防止过拟合。我们使用的是2x2的最大池化,意味着池化窗口大小为2x2。

  • 全连接层(Dense): 在CNN的最后,经过卷积和池化层处理后的特征图被展平为一维数组,并输入到全连接层。全连接层通过加权和的方式进行分类。

  • 输出层(Dense): 输出层使用softmax激活函数进行多类分类。因为MNIST数据集有10个类别(数字0到9),所以输出层有10个神经元。

  • 损失函数: 使用sparse_categorical_crossentropy作为损失函数,因为这是一个多类分类问题。

  • 优化器: 使用adam优化器,它是一种自适应的优化方法,能够在训练过程中自动调整学习率。

4. 模型总结

运行该代码后,你将看到一个训练过程,显示训练损失和准确率。同时,在训练结束后,你可以通过评估模型在测试集上的表现,了解其准确率。

例如,模型的测试准确率可能会达到98%以上,这表示模型能很好地识别MNIST数据集中的数字。

5. 总结

这个例程展示了如何使用TensorFlow/Keras构建一个基本的卷积神经网络来进行图像分类。通过数据的加载、预处理、模型的构建、训练以及评估,你可以了解深度学习在计算机视觉中的基本应用。

 访问更多内容来源 https://ai.tmqcjr.com


http://www.ppmy.cn/server/154005.html

相关文章

K8S--“ Failed to create pod sandbox: nameserver list is empty“

原因是因为宿主机的/etc/resolv.conf 文件 有残缺, 填写一半,这个问题 cat /etc/resolv.conf填写好后,重启pod或等待一下再查看即可

应对TensorFlow导入Keras时发生的错误问题

在机器学习和深度学习领域,TensorFlow和Keras是两个非常流行的框架。TensorFlow是一个开源的机器学习库,由Google开发,用于设计、构建和训练深度学习模型。而Keras则是一个高层的神经网络API,它能够以TensorFlow等底层框架为基础&…

一篇文章了解 Kafka

文章目录 Kafka 简介什么是 KafkaKafka 的主要特性Kafka 的核心使用场景Kafka 在消息队列领域的地位与优势 Kafka 的架构设计Kafka 的核心组件BrokerProducerConsumerZookeeper/ Kafka Raft (KRaft)Topic 和 Partition 分布式架构设计Leader-Follower 模型分区与副本机制 消息存…

06 - Django 视图view

HttpRequest 和 HttpResponse Django中的视图主要用来接受Web请求,并做出响应。 视图的本质就是一个Python中的函数 视图的响应分为两大类 以Json数据形式返回(JsonResponse)以网页的形式返回 重定向到另一个网页 (HttpResponseRedirect)错误视图(4XX,5XX) (Htt…

MySQL并发问题区别-MVCC如何解决的

脏读 事务a,事务b,b读到了a刚修改未提交的数据 不可重复读 针对同一行记录,两次读到的结果不一致 (范围是一行) 幻读 范围比不可重复读大很多,是表的范围,事务a第一次查的时候不存在&#…

zabbix5.0版本(安装部署+添加服务器+拆分数据库)

目录 1.监控内容 2.监控工具 3.Zabbix安装 4.Zabbix添加监控服务器 5.拆分数据库 本篇文章介绍zabbix监控,监控是对我们操作系统进行不间断的监控,这是软件生命周期非常重要的一环,可以做到事前告警,事后根据监控内容排查问题…

vs2022 C/C++安装额外库有感

网上找的安装xxx库总有一大堆说要搞cmake的,对于没用过cmake又没啥这方面专业名词概念的小白实在很难受,大概讲一下 如果你只是想要安装某个库到你的项目上,你不需要用cmake专门去编译一个项目,实际上也用不到cmake,你…

三层交换机配置

一,三层交换 概念:三层交换技术就是:二层交换技术三层转发技术(路由器功能)。它解决了局域网中网段划分之后,网段中子网必须依赖路由器进行管理的局面,解决了传统路由器低速,复杂所造成的网络瓶颈问题。 …