深度学习思维导图(基于TensorFlow框架)
文章目录
- 深度学习
- 深度学习介绍
- 深度学习与机器学习的区别
- 深度学习的应用场景:
- 深度学习框架介绍
- TensorFlow 的特点
- TensorFlow 的安装
- TensorFlow 框架介绍
- TF 数据流图
- 图与TensorBoard
- 会话
- 张量Tensor
- 变量OP
- 高级API
- 案例:实现线性回归
- 数据读取、神经网络基础
- 文件读取流程
- 图片数据
- 二进制数据
- TFRecords
- 神经网络基础
- 神经网络原理
- 案例:Mnist手写数字识别
- 线性神经网络局限性
- 卷积神经网络
- 卷积神经网络简介
- 卷积神经网络原理
- 思维导图图片形式
深度学习
深度学习介绍
深度学习与机器学习的区别
- 特征提取方面
- 机器学习:特征工程步骤是手动完成的,需要大量的专业领域知识
- 深度学习:通常由多个层组成,他们通常将更简单的模型组合在一起,将数据从一层传递到另一层来构建更复杂的模型。通过大量数据自动得出模型,不需要人工特征提取环节
- 数据量和计算i性能要求方面
- 机器学习:随着数据量的增加,模型性能会有瓶颈
- 深度学习:随着数据量的增加,模型的性能会越来越好,但是深度学需要大量的算力
- 算法代表方面
- 机器学习:朴素贝叶斯、决策树等
- 深度学习:神经网络
深度学习的应用场景:
- 图像识别
- 自然语言处理
- 语音技术
深度学习框架介绍
- PyTorch和Torch 更适用于学术研究;TensorFlow、Caffe、Caffe2 更适用于工业界的生产环境部署
- Caffe 适用于处理静态图像; Torch和PyTorch 更适用于动态图像;TensorFlow 在两种情况下都很实用
- TensorFlow 和 Caffe 可在移动端使用
TensorFlow 的特点
- 高度灵活
- 语言多样
- 设备支撑
- TensorFlow 可视化
TensorFlow 的安装
- CPU 版本
- GPU 版本
- 两个版本的比较
- CPU:诸葛亮
- 综合能力比较强
- 核芯的数量更少
- 更适用于处理连续性(sequential)任务。
- GPU:臭皮匠
- 专做某一个事情很好
- 核芯的数量更多
- 更适用于并行(parallel)任务
- CPU:诸葛亮
TensorFlow 框架介绍
TF 数据流图
- TensorFlow结构分析
- 构建图阶段
- 流程图:定义数据(张量Tensor)和操作(节点Op)
- 执行图阶段
- 调用各方资源,将定义好的数据和操作运行起来
- 构建图阶段
- 数据流图介绍
- Tensor - 张量 - 数据
- Flow - 流动
图与TensorBoard
- 什么是图结构
- 数据(Tensor) + 操作(Operation)
- 图相关操作
- 默认图
- 查看默认图的方法
- 调用方法
- 用tf.get_default_graph()
- 查看属性
- .graph
- 调用方法
- 查看默认图的方法
- 创建图
- new_g = tf.Graph()
with new_g.as_default():
定义数据和操作
- new_g = tf.Graph()
- 默认图
- TensorBoard:可视化学习
- 数据序列化-events文件
- tf.summary.FileWriter(path, graph=sess.graph)
- 启动tensorboard
- 数据序列化-events文件
- OP
- 数据:Tensor对象
操作:Operation对象 - Op - 常见OP
- 操作函数 & 操作对象
tf.constant(Tensor对象) 输入Tensor对象 -Const-输出 Tensor对象
tf.add(Tensor对象1, Tensor对象2) 输入Tensor对象1, Tensor对象2 - Add对象 - 输出 Tensor对象3
- 操作函数 & 操作对象
- 指令名称
- 一张图 - 一个命名空间
- 数据:Tensor对象
会话
- tf.Session:用于完整的程序当中
tf.InteractiveSession:用于交互式上下文中的TensorFlow ,例如shell - 会话掌握资源,用完要回收 - 上下文管理器
- 初始化会话对象时的参数
- graph=None
target:如果将此参数留空(默认设置),
会话将仅使用本地计算机中的设备。
可以指定 grpc:// 网址,以便指定 TensorFlow 服务器的地址,
这使得会话可以访问该服务器控制的计算机上的所有设备。
config:此参数允许您指定一个 tf.ConfigProto
以便控制会话的行为。例如,ConfigProto协议用于打印设备使用信息
- graph=None
- run(fetches,feed_dict=None)
- feed操作
- a = tf.placeholder(tf.float32, shape=)
b = tf.placeholder(tf.float32, shape=)
- a = tf.placeholder(tf.float32, shape=)
张量Tensor
- 张量(Tensor)
- 张量 在计算机当中如何存储?
- 标量 一个数字 0阶张量
向量 一维数组 [2, 3, 4] 1阶张量
矩阵 二维数组 [[2, 3, 4], 2阶张量
[2, 3, 4]]
……
张量 n维数组 n阶张量
- 标量 一个数字 0阶张量
- 张量的类型(dtype)
- 创建张量的时候,如果不指定类型
默认 tf.float32
整型 tf.int32
浮点型 tf.float32
- 创建张量的时候,如果不指定类型
- 张量的阶(shape)
- 张量 在计算机当中如何存储?
- 创建张量的指令
- tf.zeros(shape=( * , * ))
- tf.ones(shape = ( * , * ))
- tf.canstant()
- 张量的变换
- 类型的修改
- 1)ndarray.astype(type)
tf.cast(tensor, dtype = *)
不会改变原始的tensor
返回新的改变类型后的tensor
2)ndarray.tostring()
- 1)ndarray.astype(type)
- 形状的修改
- 静态形状 - 初始创建张量时的形状
- 什么情况下才可以改变/更新静态形状?
只有在形状没有完全固定下来的情况下
tensor.set_shape(shape)
- 什么情况下才可以改变/更新静态形状?
- 如何改变动态形状
- tf.reshape(tensor, shape)
不会改变原始的tensor
返回新的改变形状后的tensor
动态创建新张量时,张量的元素个数必须匹配
- tf.reshape(tensor, shape)
- 静态形状 - 初始创建张量时的形状
- 张量的数学运算
- 查API(https://www.tensorflow.org/api_docs/python/tf/math)
- 类型的修改
变量OP
- 特点
- 存储持久化
- 可修改值
- 可指定被训练
- 作用:存储模型参数
- 具体使用
- 变量需要显式初始化,才能运行值
- 使用tf.variable_scope()修改变量的命名空间
- 使得结构更加清晰
高级API
- 其他基础API
- 高级API
- 关于TensorFlow的API图示
案例:实现线性回归
- 线性回归原理复习
- 1)构建模型
y = w1x1 + w2x2 + …… + wnxn + b
2)构造损失函数
均方误差
3)优化损失
梯度下降
- 1)构建模型
- 案例:实现线性回归的训练
- 准备真实数据
100样本
x 特征值 形状 (100, 1)
y_true 目标值 (100, 1)
y_true = 0.8x + 0.7 - 假定x 和 y 之间的关系 满足
y = kx + b
k ≈ 0.8 b ≈ 0.7 - 流程分析:
(100, 1) * (1, 1) = (100, 1)
y_predict = x * weights(1, 1) + bias(1, 1)
1)构建模型
y_predict = tf.matmul(x, weights) + bias
2)构造损失函数
error = tf.reduce_mean(tf.square(y_predict - y_true))
3)优化损失
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
5 学习率的设置、步数的设置与梯度爆炸
- 准备真实数据
- 增加其他功能
- 增加变量显示
- 1)创建事件文件
- 2)收集变量
- 3)合并变量
- 4)每次迭代运行一次合并变量
- 5)每次迭代将summary对象写入事件文件
- 增加命名空间
- 使代码结构更加清晰,TensorBoard 图结构更清楚
- 模型的保存与加载
- saver = tf.train.Saver(var_list=None,max_to_keep=5)
1)实例化Saver
2)保存
saver.save(sess, path)
3)加载
saver.restore(sess, path)
- saver = tf.train.Saver(var_list=None,max_to_keep=5)
- 命令行参数的使用
- 使用方式
- 步骤
- 1)tf.app.flags
tf.app.flags.DEFINE_integer(“max_step”, 0, “训练模型的步数”)
tf.app.flags.DEFINE_string(“model_dir”, " ", “模型保存的路径+模型名字”)
2)FLAGS = tf.app.flags.FLAGS
通过FLAGS.max_step调用命令行中传过来的参数
3、通过tf.app.run()启动main(argv)函数
- 1)tf.app.flags
- 增加变量显示
数据读取、神经网络基础
文件读取流程
- 多线程 + 队列
- 文件读取流程
- 1)构造文件名队列
- file_queue = tf.train.string_input_producer(string_tensor,shuffle=True)
- 2)读取与解码
- 文本:
读取:tf.TextLineReader()
解码:tf.decode_csv()
图片:
读取:tf.WholeFileReader()
解码:
tf.image.decode_jpeg(contents)
tf.image.decode_png(contents)
二进制:
读取:tf.FixedLengthRecordReader(record_bytes)
解码:tf.decode_raw()
TFRecords
读取:tf.TFRecordReader()
key, value = 读取器.read(file_queue)
key:文件名
value:一个样本
- 文本:
- 3)批处理队列
- tf.train.batch(tensors, batch_size, num_threads = 1, capacity = 32, name=None)
- 手动开启线程
- tf.train.QueueRunner()
开启会话:
tf.train.start_queue_runners(sess=None, coord=None)
- tf.train.QueueRunner()
- 1)构造文件名队列
图片数据
- 图像基本知识
- 文本 特征词 -> 二维数组
字典 one-hot -> 二维数组
图片 像素值 - 图片三要素
- 长度、宽度、通道数
- 黑白图、灰度图
一个通道 - 彩色图
三个通道
- 黑白图、灰度图
- 长度、宽度、通道数
- TensorFlow中表示图片
- Tensor对象
指令名称、形状、类型
shape = [height, width, channel]
- Tensor对象
- 图片特征值处理
- [samples, features]
为什么要缩放图片到统一大小?
1)每一个样本特征数量要一样多
2)缩小图片的大小
tf.image.resize_images(images, size)
- [samples, features]
- 数据格式
- 存储:uint8
训练:float32
- 存储:uint8
- 文本 特征词 -> 二维数组
- 案例:狗图片读取
- 1)构造文件名队列
file_queue = tf.train.string_input_producer(string_tensor,shuffle=True)
2)读取与解码
读取:
reader = tf.WholeFileReader()
key, value = reader.read(file_queue)
解码:
image_decoded = tf.image.decode_jpeg(value)
3)批处理队列
image_decoded = tf.train.batch([image_decoded], 100, num_threads = 2, capacity=100)
手动开启线程
- 1)构造文件名队列
二进制数据
tensor对象
shape:[height, width, channel] -> [32, 32, 3] [0, 1, 2] -> []
[[32 * 32的二维数组],
[32 * 32的二维数组],
[32 * 32的二维数组]]
–> [3, 32, 32] [channel, height, width] 三维数组的转置 [0, 1, 2] -> [1, 2, 0]
[3, 2] -转置-> [2, 3]
1)NHWC与NCHW
T = transpose 转置3.3.2 CIFAR10 二进制数据读取
流程分析:
1)构造文件名队列
2)读取与解码
3)批处理队列
开启会话
手动开启线程
TFRecords
- TFRecords 文件
- 定义
- TFRecords 其实是一种二进制文件,虽然它不如其他格式好理解,但是它能更好的利用内存,更方便复制和移动,并且不需要单独的标签文件
- 使用步骤
- 定义
- Example 结构解析
- 使用步骤
- 读取TFRecords 文件API
- 1)构造文件名队列
2)读取和解码
读取
解析example
feature = tf.parse_single_example(value, features={
“image”:tf.FixedLenFeature([], tf.string),
“label”:tf.FixedLenFeature([], tf.int64)
})
image = feature[“image”]
label = feature[“label”]
解码
tf.decode_raw()
3)构造批处理队列
- 1)构造文件名队列
神经网络基础
- 神经网络
- 输入层
- 隐藏层
- 输出层
- 感知机
- 可以解决 “ 与 ” 、 “ 或 ” 问题 , 不能解决 “ 异或问题 ”
神经网络原理
- 逻辑回归
y = w1x1 + w2x2 + …… + wnxn + b
sigmoid -> [0, 1] -> 二分类问题
损失函数:对数似然损失
用神经网络进行分类
假设函数
y_predict =
softmax - 多分类问题
构造损失函数
loss = 交叉熵损失
优化损失
梯度下降
3.6.1 softmax回归 - 多分类问题
假设要进行三分类
2.3, 4.1, 5.6
3.6.2 交叉熵损失
案例:Mnist手写数字识别
- Mnist 数据获取API
线性神经网络局限性
卷积神经网络
卷积神经网络简介
- 与传统多层神经网络对比
- 发展历史
- 卷积网络在ImageNet比赛错误率
卷积神经网络原理
- 结构(隐藏层)
- 卷积层
通过在原始图像上平移来提取特征
激活层
增加非线性分割能力
池化层(pooling layer)/下采样(subsample)
减少学习的参数,降低网络的复杂度(最大池化和平均池化)
全连接层
- 卷积层
- 卷积层
- 每层卷积层都是由若干卷积单元(卷积核)组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的
- 卷积运算的目的是特征提取,第一层卷积层可能只能提取一些低级的特征,如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征
- 卷积核(filter/过滤器/模型参数/卷积单元)
- 四大要素
- 卷积核个数
- 卷积核大小
- 通常设置为:11、33、5*5
- 卷积核步长
- 卷积核零填充大小
- 四大要素
- 总结 - 输出大小计算公式
- 卷积网络API
- 激活函数
- ReLU = max(0,x)
- 函数图像
- 效果图
- 采用新的激活函数的原因
- 激活函数API
- ReLU = max(0,x)
- 池化层
- 主要作用
- 特征提取,减少参数数量
- 主要方法
- max_pooling : 取池化窗口的最大值
- avg_pooling:取池化窗口的平均值
- 利用了图像上像素点之间的联系
- 池化层API
- 主要作用
- 全连接层
- 主要作用
- “ 分类器 ”
- 主要作用
思维导图图片形式
深度学习思维导图(基于TensorFlow框架)相关推荐
- 吴恩达深度学习思维导图--来自刚入门的学生的自制版
吴恩达深度学习思维导图 学习吴恩达老师的课一学期了,在课程老师的要求下每周视频课都需要做思维导图,最后做了一份汇总版本的思维导图,与各位共享交流一下. 思维导图内的图片和部分内容是结合吴恩达老师的视频 ...
- 【人工智能】深度学习思维导图、人工智能思维导图、深度学习综述
如果显示不清晰,文末有百度云下载链接 本思维导图高清图片版本 请在公众号[计算机视觉联盟]后台回复[20191026]即可获得百度云pdf下载链接
- vs2017 开始自己的第一个深度学习例子——MNIST分类(基于TensorFlow框架)
这是针对于博客vs2017安装和使用教程(详细)的深度学习例子--MNIST分类项目新建示例 目录 一.新建项目 二.运行代码 三.生成结果 一.新建项目 1.项目创建参照博主文章:vs2017 开始 ...
- 人工智能——机器学习与深度学习思维导图
目录 0 综述 1 基本模型 1.1 回归 1.2 决策树与随机森林 1.3 SVM 1.4 最大熵与EM算法 2 特征工程 2.1 特征工程 2.2 多算法组合与模型最优 3 工业实践 3.1 S ...
- 深度学习思维导图(2021版)开放下载了!
随着世界技术的迭代与发展,人工智能和机器学习正在超自动化领域,扮演着越来越重要的角色.2020年的冠状病毒疫情突发,整个世界都在防疫的道路上披荆斩棘.人工智能发挥了重大作用,智能测温.智能消毒.智能建 ...
- 深度学习入门之神经网络的学习思维导图
第4章 神经网络的学习思维导图
- 《深度学习案例精粹:基于TensorFlow与Keras》深度学习常用训练案例合集
#好书推荐##好书奇遇季#<深度学习案例精粹:基于TensorFlow与Keras>,京东当当天猫都有发售.本书配套示例源码.PPT课件.思维导图.数据集.开发环境与答疑服务. <深 ...
- 教你如何学习思维导图
我们学习思维导图,是否成效,有进步其实决定因素很多,而我们能做的就是在大家起步都一样的时候,比他人多掌握一份思维导图技巧,我们在思维导图的路上也就能够走得更远一些. 第一 态度.这是学习和掌握思维导图 ...
- 2023最新软件测试学习思维导图(从小白到大师进阶之路)
如下是我工作之余熬夜整理的软件测试学习思维导图,通过回顾多年的从业经验,总结提炼出来的一些东西,希望能对大家有些帮助,特别是刚入门软件测试行业或将要加入软件测试行业的同学,可以认真看一下,可以作为参考 ...
最新文章
- Mysql依赖库Boost的源码安装,linux下boost库的安装
- ESXi6.5环境搭建(五:常见问题及解决方案实验总结)
- 初学者的困惑:OOP与一般编程的区别
- 为什么我恨Scrum?
- Angularjs Controller 间通信机制
- C++之运算符重载(上)
- Sketch 76 for mac(矢量绘图设计软件)
- 广州网站建设哪些公司好
- [译] Dweb: Beaker--去中心化的浏览器 (中英)
- “朝抵抗力最大的路径上走”
- 挂起和阻塞区别?sleep()和wait()的区别?
- Java根据IP返回 省市,
- 接口测试实战项目02:根据接口文档测试
- intellij idea 合并分支到主分支,主分支代码同步到某一分支
- 这个“读心术”的算法可以解读你大脑中的图像
- Python+Potato API实现关键字聊天机器人
- 【UTAU插件】辅音速度重载
- DDD 实战 (5):战略设计之上下文映射和系统分层架构
- ECOPASSPORT认证辅导,什么是Eco-Passport认证,Eco-Passport认证的意义
- Logback新版本报no applicable action for [Encoding]问题