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实战相关推荐

  1. 吴恩达深度学习课程笔记之卷积神经网络(2nd week)

    0 参考资料 [1]  大大鹏/Bilibili资料 - Gitee.com [2] [中英字幕]吴恩达深度学习课程第四课 - 卷积神经网络_哔哩哔哩_bilibili [3]  深度学习笔记-目录 ...

  2. 【CNN】卷积神经网络(LeNet)是什么?如何实现LeNet?

    系列文章目录 第一章 深度学习 CNN中的卷积神经网络(LeNet) 目录 系列文章目录 文章目录 前言 一.卷积神经网络(LeNet)是什么? 二.LeNet的网络结构 三.实现LeNet模型 ​​ ...

  3. 深度学习教程(10) | 卷积神经网络解读(吴恩达·完整版)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/35 本文地址:http://www.showmeai.tech/article-det ...

  4. 深度学习笔记:卷积神经网络的可视化--卷积核本征模式

    目录 1. 前言 2. 代码实验 2.1 加载模型 2.2 构造返回中间层激活输出的模型 2.3 目标函数 2.4 通过随机梯度上升最大化损失 2.5 生成滤波器模式可视化图像 2.6 将多维数组变换 ...

  5. 吴恩达深度学习笔记- lesson4 卷积神经网络

    文章目录 Week 1 卷积神经网络基础 4.1.1 计算机视觉(Computer vision) 4.1.2 边缘检测示例(Edge detection example) 4.1.3 更多边缘检测内 ...

  6. 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇

    学习时间:2022.04.10~2022.04.12 文章目录 3. 卷积神经网络CNN 3.1 卷积神经网络的概念 3.1.1 什么是CNN? 3.1.2 为什么要用CNN? 3.1.3 人类的视觉 ...

  7. 深度学习之 10 卷积神经网络2

    本文是接着上一篇深度学习之 10 卷积神经网络1_水w的博客-CSDN博客 目录 1 出现原因 2 一般结构框架 (1)一般结构框架:卷积层 --利用卷积核提取特征 卷积核的本质: 总结 特征图可视化 ...

  8. [深度学习之CNN]CNN卷积神经网络LeNet-5

    转载于http://blog.sina.com.cn/s/blog_4a1853330102v0mt.html 点击打开链接     在转载基础上添加些内容 卷积神经网络是人工神经网络的一种,已成为当 ...

  9. 深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战

    深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战 神经网络(neual networks)是人工智能研究领域的一部分,当前最流行的神经网络 ...

最新文章

  1. explicit specialization of ‘Race‘ after instantiation ,implicit instantiation first required here。
  2. pandas为dataframe添加新的数据行(rows)、在dataframe后面纵向添加一行数据(数据为列表list形式)、列有不匹配将会使用NA值进行填补
  3. junit5_了解JUnit的Runner架构
  4. 全卷积神经网路【U-net项目实战】ISBI 挑战数据集图像分割-keras实现
  5. mysql创建表选择字段的时候下尽量小
  6. C语言有三个电阻r1r2r3,[VR虚拟现实]ARM硬件试题库及答案(37页)-原创力文档
  7. arthas使用示例:options全局开关
  8. php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】
  9. java面试题三 位运算符
  10. 十一、非规则组织分析及其数学模型——芦席斜纹组织
  11. 41岁,她破格提拔为高校副校长
  12. 退出出库复核是什么意思_细思极恐!为什么是黄晓明退出而不是李菲儿?因为女方是芒果艺人...
  13. 编写一个求方程ax2 + bx + c = 0的根 的程序,用3个函数分别求当b2-4ac大于零、等于零、和小于零时的方程的根。要求从主函数输入a,b,c的值并输出结果。
  14. 集合 数组 定义 转换 遍历 Arrays API MD
  15. linux 创建目录和删除目录
  16. 打开access文件 提示文件名无效_分享在PS软件打开图像时提示无效的JPEG的解决方法...
  17. CS224N笔记——神经机器翻译与Attention机制
  18. Mybatis框架源码笔记(一)之编译Mybatis源码和源码调试环境准备
  19. 如何制作/输入 英语/美语音标
  20. matlab可以做什么,matlab仿真用来干什么

热门文章

  1. 进程间各种通信方式的C++实现
  2. mysql设置或者修改新密码
  3. Python 文件的读写模式
  4. Obsidian 0x05:Obsidian 插件:Dataview
  5. 阿里云ACP ACE认证考试重要事项
  6. 简单实现B/S服务器
  7. 常用H5标签-第三部分
  8. 梅科尔工作室-张黎娜-鸿蒙笔记3
  9. java计算机毕业设计springboot+vue校园出入管理系统
  10. 如何简单的爬取网络数据