《TensorFlow深度学习》学习笔记--10.卷积神经网络--1.LeNet-5实战
1. LeNet-5 实战
1. 导入相关的包
import tensorflow as tf
from tensorflow.keras import Sequential, layers, losses, optimizers
设置GPU(如果使用GPU,则需添加下面代码,如果不使用,则无需添加)
devices = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(devices[0], True)
2. 加载数据集并进行预处理
# 读取MNIST数据集
(x, y), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# x.shape:(60000, 28, 28)
# y.shape:(60000,)
# x_test.shape:(10000, 28, 28)
# y_test.shape:(10000,)# 自定义预处理函数
def pre_process(x, y):x = tf.cast(x, dtype=tf.float32) / 255.y = tf.cast(y, dtype=tf.int32)y = tf.one_hot(y, depth=10) # one_hot 编码return x, y# 构造训练集,打乱, 设置批大小, 预处理函数以及重复次数
# https://cloud.tencent.com/developer/article/1348052(参考讲解)
train_db = tf.data.Dataset.from_tensor_slices((x, y))
train_db = train_db.shuffle(buffer_size = 10000)
train_db = train_db.batch(batch_size = 512)
train_db = train_db.map(pre_process)
3. 创建网络层
# 定义 LeNet-5
network = Sequential([ # 网络容器layers.Conv2D(6, kernel_size=3, strides=1), # 卷积层,6个3*3卷积核,步长:1layers.MaxPooling2D(pool_size=2, strides=2), # 池化层,高宽各减半layers.ReLU(), # 激活函数layers.Conv2D(16, kernel_size=3, strides=1), # 卷积层,16个3*3卷积核,步长:1layers.MaxPooling2D(pool_size=2, strides=2), # 池化层,高宽各减半layers.ReLU(), # 激活函数layers.Flatten(), # 打平层,方便全连接层处理layers.Dense(120, activation='relu'), # 全连接层,120个节点layers.Dense(84, activation='relu'), # 全连接层,84个节点layers.Dense(10) # 全连接层,10个节点
])network.build(input_shape=(None, 28, 28, 1)) # 构建网络模型,给定输入 X 的形状
network.summary() # 统计网络信息
4. 模型训练
criteon = losses.CategoricalCrossentropy(from_logits=True)
optimizer = optimizers.RMSprop(0.001)
for i in range(20): # 训练 20 个 epochfor step, (x, y) in enumerate(train_db):with tf.GradientTape() as tape:x = tf.expand_dims(x, axis=3) # [batch_size, 28, 28] -> [batch_size, 28, 28, 1]out = network(x) # 前向计算 -> [batch_size, 10]# 在数据集预处理时已经 one_hot,所以此处不用再进行one_hot处理。loss = criteon(y, out) # 计算交叉熵损失函数,标量grads = tape.gradient(loss, network.trainable_variables) # 自动计算梯度optimizer.apply_gradients(zip(grads, network.trainable_variables)) # 自动更新参数if step % 100 == 0:print(f'epoch: {i + 1},\t step: {step} \t loss: {loss}')network.save('LeNet-5.h5') # 保存网络模型
5. 模型测试
# 构建测试集
test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test))
test_db = test_db.shuffle(buffer_size=10000).batch(batch_size=512).map(pre_process)# 加载训练的网络模型
network = tf.keras.models.load_model('LeNet-5.h5')
network.summary()# 模型测试
correct, total = 0,0
for x,y in test_db: # 遍历所有训练集样本x = tf.expand_dims(x,axis=3) # [batch_size, 28, 28] -> [batch_size, 28, 28, 1]out = network(x) # 前向计算 -> [batch_size, 10]pred = tf.argmax(out, axis=-1)y = tf.cast(y, tf.int64)y = y = tf.argmax(y, axis=-1)# 统计预测正确数量correct += float(tf.reduce_sum(tf.cast(tf.equal(pred, y),tf.float32)))total += x.shape[0] # 统计预测样本总数# 计算准确率
print('test acc:', correct/total)
《TensorFlow深度学习》学习笔记--10.卷积神经网络--1.LeNet-5实战相关推荐
- 吴恩达深度学习课程笔记之卷积神经网络(2nd week)
0 参考资料 [1] 大大鹏/Bilibili资料 - Gitee.com [2] [中英字幕]吴恩达深度学习课程第四课 - 卷积神经网络_哔哩哔哩_bilibili [3] 深度学习笔记-目录 ...
- 【CNN】卷积神经网络(LeNet)是什么?如何实现LeNet?
系列文章目录 第一章 深度学习 CNN中的卷积神经网络(LeNet) 目录 系列文章目录 文章目录 前言 一.卷积神经网络(LeNet)是什么? 二.LeNet的网络结构 三.实现LeNet模型 ...
- 深度学习教程(10) | 卷积神经网络解读(吴恩达·完整版)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/35 本文地址:http://www.showmeai.tech/article-det ...
- 深度学习笔记:卷积神经网络的可视化--卷积核本征模式
目录 1. 前言 2. 代码实验 2.1 加载模型 2.2 构造返回中间层激活输出的模型 2.3 目标函数 2.4 通过随机梯度上升最大化损失 2.5 生成滤波器模式可视化图像 2.6 将多维数组变换 ...
- 吴恩达深度学习笔记- lesson4 卷积神经网络
文章目录 Week 1 卷积神经网络基础 4.1.1 计算机视觉(Computer vision) 4.1.2 边缘检测示例(Edge detection example) 4.1.3 更多边缘检测内 ...
- 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇
学习时间:2022.04.10~2022.04.12 文章目录 3. 卷积神经网络CNN 3.1 卷积神经网络的概念 3.1.1 什么是CNN? 3.1.2 为什么要用CNN? 3.1.3 人类的视觉 ...
- 深度学习之 10 卷积神经网络2
本文是接着上一篇深度学习之 10 卷积神经网络1_水w的博客-CSDN博客 目录 1 出现原因 2 一般结构框架 (1)一般结构框架:卷积层 --利用卷积核提取特征 卷积核的本质: 总结 特征图可视化 ...
- [深度学习之CNN]CNN卷积神经网络LeNet-5
转载于http://blog.sina.com.cn/s/blog_4a1853330102v0mt.html 点击打开链接 在转载基础上添加些内容 卷积神经网络是人工神经网络的一种,已成为当 ...
- 深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战
深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战 神经网络(neual networks)是人工智能研究领域的一部分,当前最流行的神经网络 ...
最新文章
- explicit specialization of ‘Race‘ after instantiation ,implicit instantiation first required here。
- pandas为dataframe添加新的数据行(rows)、在dataframe后面纵向添加一行数据(数据为列表list形式)、列有不匹配将会使用NA值进行填补
- junit5_了解JUnit的Runner架构
- 全卷积神经网路【U-net项目实战】ISBI 挑战数据集图像分割-keras实现
- mysql创建表选择字段的时候下尽量小
- C语言有三个电阻r1r2r3,[VR虚拟现实]ARM硬件试题库及答案(37页)-原创力文档
- arthas使用示例:options全局开关
- php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】
- java面试题三 位运算符
- 十一、非规则组织分析及其数学模型——芦席斜纹组织
- 41岁,她破格提拔为高校副校长
- 退出出库复核是什么意思_细思极恐!为什么是黄晓明退出而不是李菲儿?因为女方是芒果艺人...
- 编写一个求方程ax2 + bx + c = 0的根 的程序,用3个函数分别求当b2-4ac大于零、等于零、和小于零时的方程的根。要求从主函数输入a,b,c的值并输出结果。
- 集合 数组 定义 转换 遍历 Arrays API MD
- linux 创建目录和删除目录
- 打开access文件 提示文件名无效_分享在PS软件打开图像时提示无效的JPEG的解决方法...
- CS224N笔记——神经机器翻译与Attention机制
- Mybatis框架源码笔记(一)之编译Mybatis源码和源码调试环境准备
- 如何制作/输入 英语/美语音标
- matlab可以做什么,matlab仿真用来干什么