用TensorFlow搭建卷积神经网络识别数字0~9

本文介绍如何使用TensorFlow构建卷积神经网络(CNN),并应用该模型识别MNIST手写数字数据集中的数字0到9。通过两层卷积层与池化层的组合,实现对图像特征的有效提取,最终达到较高识别准确率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

入门深度学习,用TensorFlow搭建卷积神经网络识别数字0~9,采用mnist数据集,参考了其它两三篇博客的内容。
一些相关内容我写在代码注释里面了:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, optimizers, datasets

# 下面一行是在线加载方式获取mnist数据
# mnist = tf.keras.datasets.mnist
# 下面两行是加载本地的数据集(提前从网上下载好)
datapath  = r'F:\MyDownloads\PyCharm 5.0.3\mnist.npz'
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data(datapath)

# 数据预处理,原来x_train是60000*28*28的数据
# 处理之后x_train是60000*28*28*1的数据(黑白单通道)
# y_train是0~9
x_train = x_train.reshape(x_train.shape[0],28,28,1).astype('float32')
x_test = x_test.reshape(x_test.shape[0],28,28,1).astype('float32')
# 归一化
x_train = tf.keras.utils.normalize(x_train, axis=1)
x_test = tf.keras.utils.normalize(x_test, axis=1)   

'''
建立卷积神经网络结构模型:
    建立两层卷积层和两层池化层
    第一层卷积核个数为16,大小为5*5,same的填充是指输出图像大小与输入一致
    第二层卷积核个数为36,以提取更高维度的信息,大小为5*5
    一般来说,最大池化层比平均池化层在分类上表现更好
卷积——>ReLU——>池化(以上3层可以叠加多层)——>全连接(可以叠加多层)

一个卷积核可以提取图像的部分特征,选取若干个卷积核。
反向传播:计算卷积核的参数和全连接的权重
'''

'''
Sequential用于建立序列模型
Flatten层展开张量,把feature map都展开
Dense层是全连接层,输出128个神经元,激活函数用relu
Dropout层使用0.5的失活率
再来一个全连接层,输出10个神经元(对应0~9),激活函数使用softmax,得到对各个类别预测的概率
'''

model = keras.models.Sequential([
    layers.Conv2D(filters=16, kernel_size=(5,5), padding='same',
                 input_shape=(28,28,1),  activation='relu'),   
    layers.MaxPooling2D(pool_size=(2, 2)), 
    layers.Conv2D(filters=36, kernel_size=(5,5), padding='same',
    			 activation='relu'),
    layers.MaxPooling2D(pool_size=(2, 2)),   
    layers.Dropout(0.25),
    layers.Flatten(),
    layers.Dense(128, activation='relu'),
    layers.Dropout(0.5),
    layers.Dense(10,activation='softmax')
])
#打印模型
print(model.summary())

#模型编译及训练
#损失函数使用交叉熵损失函数,优化器使用adam,训练10个epoch和128的batch_size
'''
随机梯度下降:
batch:更新内部模型参数之前处理的样本数,训练数据集可以划分成一个或者多个batch
1个epoch:训练数据集中的所有样本都有机会参与更新内部模型参数,epoch由一个或者多个batch组成

小例子:
训练数据集有200个样本,令batch_size=5,即每个batch有5个样本,则有40个batch。
处理完一个batch的5个样本之后,更新内部模型参数。
1个epoch由40个batch组成,执行完一次epoch,参数更新40次。
epoch数量一般比较大,允许算法运行直到模型的误差非常小
'''
#训练配置
model.compile(loss='sparse_categorical_crossentropy',
              optimizer='adam', metrics=['accuracy'])
#开始训练
model.fit(x=x_train, y=y_train, validation_split=0.2,	# validation_split是指将一部分作为验证集使用,0.2代表80%的数据作为训练集,20%作为验证集
                        epochs=10, batch_size=128, verbose=1)   # verbose=1代表显示训练过程

# 测试集验证来评估模型,model.evaluate输出计算的损失值和准确度
val_loss, val_acc = model.evaluate(x_test, y_test)
print('Test Loss:{:.6f}'.format(val_loss))
print('Test Acc:{:.6f}'.format(val_acc))

'''
# 绘制图像,查看loss和accr
import matplotlib.pyplot as plt
history = model.fit(...)
plt.plot(history.epoch,history.history['loss'],color='red',label='loss')
plt.plot(history.epoch,history.history['accr'],color='blur',label='accr')
plt.legend()
plt.show()
'''

<think>好的,我现在需要处理用户关于Linux入门教程和初学者指南的请求。用户希望了解Linux的基础知识或入门体验,而系统要求回答结构清晰,帮助用户逐步解决问题,并且保证真实可靠。同时,系统级的指令中提到需要生成相关问题,并且正确使用LaTeX格式,但在这个用户的问题中可能不需要数学公式,所以可能暂时不需要处理数学部分。 首先,我应该确认用户的需求。用户是Linux的初学者,想要从零开始学习,所以需要涵盖最基础的内容,比如什么是Linux、如何安装、基本命令、文件系统结构、软件管理、权限管理等。同时,可能还需要推荐一些学习资源和实践建议。 接下来,我需要按照逻辑顺序组织内容。通常,入门指南应该从介绍开始,然后逐步引导用户进行安装,接着是基本操作,再到更高级的主题。每个部分需要简明扼要,避免信息过载,但又要足够详细,让用户能够实际操作。 然后,考虑到用户可能需要实际操作的指导,比如安装Linux的步骤,可能需要分步骤说明,并提醒用户注意备份数据等。对于命令行部分,需要列出常用命令,并给出示例,比如ls、cd、mkdir等,以及它们的常见选项。 文件系统结构是Linux的重要部分,需要解释目录结构,如/bin、/etc、/home等,以及它们的作用。软件管理部分需要涵盖包管理工具,如apt、yum,以及如何使用它们安装软件。 权限管理也是关键,需要解释用户、组、文件权限(rwx),以及如何用chmod和chown修改权限。此外,可能还需要提到基本的系统管理,如用户管理、进程管理等。 实践建议方面,应该鼓励用户多动手操作,使用虚拟机或双系统来安装Linux,参与社区,阅读文档,写脚本自动化任务等。最后,推荐一些资源,如在线教程、书籍、论坛,帮助用户继续学习。 生成的相关问题需要围绕用户可能进一步关心的内容,比如发行版选择、常见错误处理、学习路径、命令行技巧、服务器配置等。 现在需要检查是否所有内容符合系统要求:使用中文回答,结构清晰,分步骤,引用标识。可能引用一些常见的资源,比如Ubuntu官方文档、Linux文档项目等,但由于用户没有提供具体引用来源,可能需要假设或省略具体引用标识,或者使用通用引用。 另外,系统级指令中提到的LaTeX格式,但在这个回答中可能不需要数学公式,所以可能不需要处理这部分,但需要确保其他格式正确,如代码块使用正确的标记,独立成段。 最后,确保生成的问题与用户查询相关,并且能够引导用户深入学习和解决问题。</think>### Linux入门教程与初学者指南 #### 一、Linux简介 Linux是一种开源的类Unix操作系统内核,由Linus Torvalds于1991年首次发布。基于Linux内核的操作系统(称为“发行版”)广泛应用于服务器、嵌入式设备和开发环境。其核心优势包括开源免费、高度可定制性和强大的命令行工具。 #### 二、安装Linux 1. **选择发行版** 推荐初学者使用Ubuntu、Linux Mint或Fedora,因其界面友好且社区支持完善[^1]。 2. **安装方式** - **虚拟机安装**:通过VirtualBox或VMware在现有系统中运行Linux,适合体验学习。 - **双系统**:在硬盘分区中安装Linux,与Windows/macOS共存。 - **单系统**:完全替换原有系统。 ```bash # 示例:使用Ubuntu官方镜像制作启动盘 sudo dd if=ubuntu.iso of=/dev/sdX bs=4M status=progress ``` #### 三、基础命令行操作 1. **终端基础** - 打开终端:`Ctrl+Alt+T`(Ubuntu)。 - 命令结构:`命令 [选项] [参数]`,例如: ```bash ls -l /home # 列出/home目录的详细信息 ``` 2. **常用命令** | 命令 | 功能 | 示例 | |-----------|------------------------|--------------------| | `cd` | 切换目录 | `cd Documents` | | `pwd` | 显示当前路径 | `pwd` | | `mkdir` | 创建目录 | `mkdir new_folder` | | `rm` | 删除文件 | `rm file.txt` | | `cp` | 复制文件 | `cp src.txt dest/` | | `grep` | 文本搜索 | `grep "error" log` | #### 四、文件系统结构 Linux采用树形文件系统,核心目录包括: - `/bin`:基础可执行文件(如`ls`, `cp`)。 - `/etc`:系统配置文件。 - `/home`:用户主目录。 - `/var`:动态数据(如日志、数据库)。 #### 五、软件包管理 不同发行版使用不同的包管理工具: - **Debian/Ubuntu**:`apt` ```bash sudo apt update # 更新软件源 sudo apt install nginx # 安装Nginx ``` - **Fedora**:`dnf` ```bash sudo dnf install git ``` #### 六、用户与权限 1. **用户管理** - 添加用户:`sudo adduser username` - 切换用户:`su username` 2. **文件权限** - 权限类型:读(`r`)、写(`w`)、执行(`x`)。 - 修改权限: ```bash chmod 755 script.sh # 设置权限为rwxr-xr-x chown user:group file # 修改文件所有者和组 ``` #### 七、实践建议 1. **多操作**:通过虚拟机实验危险命令(如`rm -rf /`)。 2. **善用文档**:使用`man`命令查看手册(如`man ls`)。 3. **脚本自动化**:编写Bash脚本简化重复任务。 #### 八、学习资源推荐 1. **在线教程** - [Ubuntu官方文档](https://help.ubuntu.com) - [Linux命令行基础(英文)](https://linuxjourney.com) 2. **书籍** - 《鸟哥的Linux私房菜》 - 《The Linux Command Line》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值