当前位置: 首页> 财经> 产业 > 泉州疾控中心发布最新消息_找方案的网站_搜索引擎优化的方法和技巧_海南百度推广seo

泉州疾控中心发布最新消息_找方案的网站_搜索引擎优化的方法和技巧_海南百度推广seo

时间:2025/8/27 0:53:34来源:https://blog.csdn.net/weixin_46620278/article/details/143254293 浏览次数:0次
泉州疾控中心发布最新消息_找方案的网站_搜索引擎优化的方法和技巧_海南百度推广seo

目录

前言

一、前期工作

1.1 导入所需的库并设置GPU

1.2 导入数据

1.2.1 数据集介绍

1.2.2 导入数据代码实现

1.3 归一化

1.4 可视化图片

1.5 调整图片格式

二、训练模型

2.1 构建CNN网络模型

2.2.1 CNN网络模型结构说明

2.2.2 CNN网络模型的代码实现

2.2 编译模型

2.3 训练模型

三、模型预测

总结


前言

  • 🍨 本文为[🔗365天深度学习训练营]中的学习记录博客
  • 🍖 原作者:[K同学啊]

说在前面

1)本周任务:在基于tensorflow的框架下

2)运行环境:Python3.6、Pycharm2020、tensorflow2.4.0


一、前期工作

1.1 导入所需的库并设置GPU

代码如下:

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt#1.1 设置GPU
gpus = tf.config.list_physical_devices("GPU")
if gpus:gpu0 = gpus[0]  # 如果有多个GPU,仅使用第0个GPUtf.config.experimental.set_memory_growth(gpu0, True)  # 设置GPU显存用量按需使用tf.config.set_visible_devices([gpu0], "GPU")
print(gpus)

打印输出:

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

1.2 导入数据

1.2.1 数据集介绍

数据集介绍:MNIST手写数字数据集来源于是美国国家标准与技术研究所,是著名的公开数据集之一。数据集中的数字图片是由250个不同职业的人纯手写绘制,数据集获取的网址为:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges(下载后需解压)。我们一般会采用(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()这行代码直接调用,这样就比较简单

MNIST手写数字数据集中包含了70000张图片,其中60000张为训练数据,10000为测试数据,70000张图片均是28*28,数据集样本如下:

如果我们把每一张图片中的像素转换为向量,则得到长度为28*28=784的向量。因此我们可以把训练集看成是一个[60000,784]的张量,第一个维度表示图片的索引,第二个维度表示每张图片中的像素点。而图片里的每个像素点的值介于0-1之间。

1.2.2 导入数据代码实现

代码如下:

#1.2 导入数据
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz

1.3 归一化

数据归一化的作用

  • 使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确。
  • 加快学习算法的收敛速度

代码如下:

#1.3 归一化
# 将像素的值标准化至0到1的区间内。(对于灰度图片来说,每个像素最大值是255,每个像素最小值是0,也就是直接除以255就可以完成归一化。)
train_images, test_images = train_images / 255.0, test_images / 255.0
# 查看数据维数信息
print(train_images.shape,test_images.shape,train_labels.shape,test_labels.shape)

打印输出:(60000, 28, 28) (10000, 28, 28) (60000,) (10000,)

1.4 可视化图片

代码如下:

#1.4 可视化图片
# 将数据集前20个图片数据可视化显示
# 进行图像大小为20宽、10长的绘图(单位为英寸inch)
plt.figure(figsize=(20,10))
# 遍历MNIST数据集下标数值0~49
for i in range(20):# 将整个figure分成2行10列,绘制第i+1个子图。plt.subplot(2,10,i+1)# 设置不显示x轴刻度plt.xticks([])# 设置不显示y轴刻度plt.yticks([])# 设置不显示子图网格线plt.grid(False)# 图像展示,cmap为颜色图谱,"plt.cm.binary"为matplotlib.cm中的色表plt.imshow(train_images[i], cmap=plt.cm.binary)# 设置x轴标签显示为图片对应的数字plt.xlabel(train_labels[i])
# 显示图片
plt.show()

打印输出:

1.5 调整图片格式

代码如下:

#1.5 调整图片格式
#调整数据到我们需要的格式
train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))
print(train_images.shape,test_images.shape,train_labels.shape,test_labels.shape)

打印输出:(60000, 28, 28, 1) (10000, 28, 28, 1) (60000,) (10000,)

二、训练模型

2.1 构建CNN网络模型

2.2.1 CNN网络模型结构说明

网络结构图:

此处使用的CNN模型由一个输入层、两个卷积层、两个池化层、一个Flatten层、一个全连接层和一个输出层构成,各层的大小形状已标记在图中,各层的作用如下:

  • 输入层:用于将数据输入到训练网络
  • 卷积层:使用卷积核提取图片特征
  • 池化层:进行下采样,用更高层的抽象表示图像特征
  • Flatten层:将多维的输入一维化,常用在卷积层到全连接层的过渡
  • 全连接层:起到“特征提取器”的作用
  • 输出层:输出结果

2.2.2 CNN网络模型的代码实现

代码如下:

#二、训练模型
#2.1 构建CNN网络模型
# 创建并设置卷积神经网络
# 卷积层:通过卷积操作对输入图像进行降维和特征抽取
# 池化层:是一种非线性形式的下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的鲁棒性。
# 全连接层:在经过几个卷积和池化层之后,神经网络中的高级推理通过全连接层来完成。
model = models.Sequential([# 设置二维卷积层1,设置32个3*3卷积核,activation参数将激活函数设置为ReLu函数,input_shape参数将图层的输入形状设置为(28, 28, 1)# ReLu函数作为激活励函数可以增强判定函数和整个神经网络的非线性特性,而本身并不会改变卷积层# 相比其它函数来说,ReLU函数更受青睐,这是因为它可以将神经网络的训练速度提升数倍,而并不会对模型的泛化准确度造成显著影响。layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),# 池化层1,2*2采样layers.MaxPooling2D((2, 2)),# 设置二维卷积层2,设置64个3*3卷积核,activation参数将激活函数设置为ReLu函数layers.Conv2D(64, (3, 3), activation='relu'),# 池化层2,2*2采样layers.MaxPooling2D((2, 2)),layers.Flatten(),  # Flatten层,连接卷积层与全连接层layers.Dense(64, activation='relu'),  # 全连接层,特征进一步提取,64为输出空间的维数,activation参数将激活函数设置为ReLu函数layers.Dense(10)  # 输出层,输出预期结果,10为输出空间的维数
])
# 打印网络结构
model.summary()

网络结构打印输出:

2.2 编译模型

代码如下:

2.2 编译模型
"""
这里设置优化器、损失函数以及metrics
"""
# model.compile()方法用于在配置训练方法时,告知训练时用的优化器、损失函数和准确率评测标准
model.compile(optimizer='adam',# 设置优化器为Adam优化器loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),# 设置损失函数为交叉熵损失函数(tf.keras.losses.SparseCategoricalCrossentropy())# from_logits为True时,会将y_pred转化为概率(用softmax),否则不进行转换,通常情况下用True结果更稳定# 设置性能指标列表,将在模型训练时监控列表中的指标metrics=['accuracy'])

2.3 训练模型

代码如下:

##2.3 训练模型
"""
这里设置输入训练数据集(图片及标签)、验证数据集(图片及标签)以及迭代次数epochs
"""
history = model.fit(train_images, # 输入训练集图片train_labels, # 输入训练集标签epochs=10, # 设置10个epoch,每一个epoch都将会把所有的数据输入模型完成一次训练。validation_data=(test_images, test_labels))# 设置验证集

训练过程打印如下:

三、模型预测

通过下面的网络结构我们可以简单理解为,输入一张图片,将会得到一组数,这组代表这张图片上的数字为0~9中每一个数字的几率(并非概率),out数字越大可能性越大。

代码如下:

#三、模型预测
plt.imshow(test_images[1])
#输出测试集中第一张图片的预测结果
pre = model.predict(test_images) # 对所有测试图片进行预测
print(pre[1]) # 输出第一张图片的预测结果

打印输出:

[  1.3959448  -1.4889575  23.694056  -16.16935    -4.450391  -36.18353
  -6.6611753 -10.586499  -10.213251  -16.560574 ]


总结

前面学习了基于Pytorch实现minist手写数字识别,现在利用tensorflow来实现同一个任务,初步了解两者在模型搭建和训练过程的差异

关键字:泉州疾控中心发布最新消息_找方案的网站_搜索引擎优化的方法和技巧_海南百度推广seo

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: