【深度学习】从0完整讲透深度学习第2篇:TensorFlow介绍和基本操作(代码文档已分享)

本系列文章md笔记(已分享)主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归(含代码),熟练掌握numpy,pandas,sklearn等框架使用。在算法上,掌握神经网络的数学原理,手动实现简单的神经网络结构,在应用上熟练掌握TensorFlow框架使用,掌握神经网络图像相关案例。具体包括:TensorFlow的数据流图结构,神经网络与tf.keras,卷积神经网络(CNN),商品物体检测项目介绍,YOLO与SSD,商品检测数据集训练和模型导出与部署。
全套笔记和代码自取在个人博客: https://gitee.com/yinuo112/Technology/tree/master/深度学习/深度学习笔记/1.md
感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~
共 9 章,60 子模块


TensorFlow介绍
说明TensorFlow的数据流图结构
应用TensorFlow操作图
说明会话在TensorFlow程序中的作用
应用TensorFlow实现张量的创建、形状类型修改操作
应用Variable实现变量op的创建
应用Tensorboard实现图结构以及张量值的显示
应用tf.train.saver实现TensorFlow的模型保存以及加载
应用tf.app.flags实现命令行参数添加和使用
应用TensorFlow实现线性回归
2.2 图与TensorBoard
学习目标
-
目标
- 说明图的基本使用
- 应用tf.Graph创建图、tf.get_default_graph获取默认图
- 知道开启TensorBoard过程
- 知道图当中op的名字以及命名空间
-
应用
- 无
-
内容预览
-
2.2.1 什么是图结构
-
2.2.2 图相关操作
- 1 默认图
- 2 创建图
-
2.2.3 TensorBoard:可视化学习
- 1 数据序列化-events文件
- 2 启动TensorBoard
-
2.2.4 OP
- 1 常见OP
- 2 指令名称
-
2.2.1 什么是图结构
图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据。
2.2.2 图相关操作
1 默认图
通常TensorFlow会默认帮我们创建一张图。
查看默认图的两种方法:
- 通过调用tf.get_default_graph()访问 ,要将操作添加到默认图形中,直接创建OP即可。
- op、sess都含有graph属性 ,默认都在一张图中
def graph_demo():# 图的演示a_t = tf.constant(10)b_t = tf.constant(20)# 不提倡直接运用这种符号运算符进行计算# 更常用tensorflow提供的函数进行计算# c_t = a_t + b_tc_t = tf.add(a_t, b_t)print("tensorflow实现加法运算:\n", c_t)# 获取默认图default_g = tf.get_default_graph()print("获取默认图:\n", default_g)# 数据的图属性print("a_t的graph:\n", a_t.graph)print("b_t的graph:\n", b_t.graph)# 操作的图属性print("c_t的graph:\n", c_t.graph)# 开启会话with tf.Session() as sess:sum_t = sess.run(c_t)print("在sess当中的sum_t:\n", sum_t)# 会话的图属性print("会话的图属性:\n", sess.graph)return None
2 创建图
-
可以通过tf.Graph()自定义创建图
-
如果要在这张图中创建OP,典型用法是使用tf.Graph.as_default()上下文管理器
def graph_demo():# 图的演示a_t = tf.constant(10)b_t = tf.constant(20)# 不提倡直接运用这种符号运算符进行计算# 更常用tensorflow提供的函数进行计算# c_t = a_t + b_tc_t = tf.add(a_t, b_t)print("tensorflow实现加法运算:\n", c_t)# 获取默认图default_g = tf.get_default_graph()print("获取默认图:\n", default_g)# 数据的图属性print("a_t的graph:\n", a_t.graph)print("b_t的graph:\n", b_t.graph)# 操作的图属性print("c_t的graph:\n", c_t.graph)# 自定义图new_g = tf.Graph()print("自定义图:\n", new_g)# 在自定义图中去定义数据和操作with new_g.as_default():new_a = tf.constant(30)new_b = tf.constant(40)new_c = tf.add(new_a, new_b)# 数据的图属性print("new_a的graph:\n", new_a.graph)print("new_b的graph:\n", new_b.graph)# 操作的图属性print("new_c的graph:\n", new_c.graph)# 开启会话with tf.Session() as sess:sum_t = sess.run(c_t)print("在sess当中的sum_t:\n", sum_t)# 会话的图属性print("会话的图属性:\n", sess.graph)# 不同的图之间不能互相访问# sum_new = sess.run(new_c)# print("在sess当中的sum_new:\n", sum_new)with tf.Session(graph=new_g) as sess2:sum_new = sess2.run(new_c)print("在sess2当中的sum_new:\n", sum_new)print("会话的图属性:\n", sess2.graph)# 很少会同时开启不同的图,一般用默认的图就够了return None
TensorFlow有一个亮点就是,我们能看到自己写的程序的可视化效果,这个功能就是Tensorboard。在这里我们先简单介绍一下其基本功能。
2.2.3 TensorBoard:可视化学习
TensorFlow 可用于训练大规模深度神经网络所需的计算,使用该工具涉及的计算往往复杂而深奥。为了更方便 TensorFlow 程序的理解、调试与优化,TensorFlow提供了TensorBoard 可视化工具。

实现程序可视化过程:
1 数据序列化-events文件
TensorBoard 通过读取 TensorFlow 的事件文件来运行,需要将数据生成一个序列化的 Summary protobuf 对象。
# 返回filewriter,写入事件文件到指定目录(最好用绝对路径),以提供给tensorboard使用tf.summary.FileWriter('./tmp/summary/test/', graph=sess.graph)
这将在指定目录中生成一个 event 文件,其名称格式如下:
events.out.tfevents.{timestamp}.{hostname}
2 启动TensorBoard
tensorboard --logdir="./tmp/tensorflow/summary/test/"
在浏览器中打开 TensorBoard 的图页面 127.0.0.1:6006,会看到与以下图形类似的图,在GRAPHS模块我们可以看到以下图结构
2.2.4 OP
2.2.4.1 常见OP
哪些是OP?
| 类型 | 实例 |
|---|---|
| 标量运算 | add, sub, mul, div, exp, log, greater, less, equal |
| 向量运算 | concat, slice, splot, constant, rank, shape, shuffle |
| 矩阵运算 | matmul, matrixinverse, matrixdateminant |
| 带状态的运算 | Variable, assgin, assginadd |
| 神经网络组件 | softmax, sigmoid, relu,convolution,max_pool |
| 存储, 恢复 | Save, Restroe |
| 队列及同步运算 | Enqueue, Dequeue, MutexAcquire, MutexRelease |
| 控制流 | Merge, Switch, Enter, Leave, NextIteration |
一个操作对象(Operation)是TensorFlow图中的一个节点, 可以接收0个或者多个输入Tensor, 并且可以输出0个或者多个Tensor,Operation对象是通过op构造函数(如tf.matmul())创建的。
例如: c = tf.matmul(a, b) 创建了一个Operation对象,类型为 MatMul类型, 它将张量a, b作为输入,c作为输出,,并且输出数据,打印的时候也是打印的数据。其中tf.matmul()是函数,在执行matmul函数的过程中会通过MatMul类创建一个与之对应的对象
# 实现一个加法运算con_a = tf.constant(3.0)
con_b = tf.constant(4.0)sum_c = tf.add(con_a, con_b)print("打印con_a:\n", con_a)
print("打印con_b:\n", con_b)
print("打印sum_c:\n", sum_c)
打印语句会生成:
打印con_a:Tensor("Const:0", shape=(), dtype=float32)
打印con_b:Tensor("Const_1:0", shape=(), dtype=float32)
打印sum_c:Tensor("Add:0", shape=(), dtype=float32)
注意,打印出来的是张量值,可以理解成OP当中包含了这个值。并且每一个OP指令都对应一个唯一的名称,如上面的Const:0,这个在TensorBoard上面也可以显示
请注意,tf.Tensor 对象以输出该张量的 tf.Operation 明确命名。张量名称的形式为 “<OP_NAME>:”,其中:
- “<OP_NAME>” 是生成该张量的指令的名称
- “” 是一个整数,它表示该张量在指令的输出中的索引
2.2.4.2 指令名称
tf.Graph对象为其包含的 tf.Operation对象定义的一个命名空间。TensorFlow 会自动为图中的每个指令选择一个唯一名称,用户也可以指定描述性名称,使程序阅读起来更轻松。我们可以以以下方式改写指令名称
- 每个创建新的 tf.Operation 或返回新的 tf.Tensor 的 API 函数可以接受可选的 name 参数。
例如,tf.constant(42.0, name=“answer”) 创建了一个名为 “answer” 的新 tf.Operation 并返回一个名为 “answer:0” 的 tf.Tensor。如果默认图已包含名为 “answer” 的指令,则 TensorFlow 会在名称上附加 “1”、“2” 等字符,以便让名称具有唯一性。
- 当修改好之后,我们在Tensorboard显示的名字也会被修改
a = tf.constant(3.0, name="a")
b = tf.constant(4.0, name="b" )

2.3 会话
学习目标
-
目标
- 应用sess.run或者eval运行图程序并获取张量值
- 应用feed_dict机制实现运行时填充数据
- 应用placeholder实现创建占位符
-
应用
- 无
-
内容预览
-
2.3.1 会话
- 1 init(target=‘’, graph=None, config=None)
- 2 会话的run()
- 3 feed操作
-
2.3.1 会话
一个运行TensorFlow operation的类。会话包含以下两种开启方式
- tf.Session:用于完整的程序当中
- tf.InteractiveSession:用于交互式上下文中的TensorFlow ,例如shell
1 TensorFlow 使用 tf.Session 类来表示客户端程序(通常为 Python 程序,但也提供了使用其他语言的类似接口)与 C++ 运行时之间的连接
2 tf.Session 对象使用分布式 TensorFlow 运行时提供对本地计算机中的设备和远程设备的访问权限。
2.3.1.1 init(target=‘’, graph=None, config=None)
会话可能拥有的资源,如 tf.Variable,tf.QueueBase和tf.ReaderBase。当这些资源不再需要时,释放这些资源非常重要。因此,需要调用tf.Session.close会话中的方法,或将会话用作上下文管理器。以下两个例子作用是一样的:
def session_demo():"""会话演示:return:"""a_t = tf.constant(10)b_t = tf.constant(20)# 不提倡直接运用这种符号运算符进行计算# 更常用tensorflow提供的函数进行计算# c_t = a_t + b_tc_t = tf.add(a_t, b_t)print("tensorflow实现加法运算:\n", c_t)# 开启会话# 传统的会话定义# sess = tf.Session()# sum_t = sess.run(c_t)# print("sum_t:\n", sum_t)# sess.close()# 开启会话with tf.Session() as sess:# sum_t = sess.run(c_t)# 想同时执行多个tensorprint(sess.run([a_t, b_t, c_t]))# 方便获取张量值的方法# print("在sess当中的sum_t:\n", c_t.eval())# 会话的图属性print("会话的图属性:\n", sess.graph)return None
- target:如果将此参数留空(默认设置),会话将仅使用本地计算机中的设备。可以指定 grpc:// 网址,以便指定 TensorFlow 服务器的地址,这使得会话可以访问该服务器控制的计算机上的所有设备。
- graph:默认情况下,新的 tf.Session 将绑定到当前的默认图。
- config:此参数允许您指定一个 tf.ConfigProto 以便控制会话的行为。例如,ConfigProto协议用于打印设备使用信息
# 运行会话并打印设备信息sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True))
会话可以分配不同的资源在不同的设备上运行。
/job:worker/replica:0/task:0/device:CPU:0
device_type:类型设备(例如CPU,GPU,TPU)
2.3.1.2 会话的run()
- run(fetches,feed_dict=None, options=None, run_metadata=None)
-
通过使用sess.run()来运行operation
-
fetches:单一的operation,或者列表、元组(其它不属于tensorflow的类型不行)
-
feed_dict:参数允许调用者覆盖图中张量的值,运行时赋值
- 与tf.placeholder搭配使用,则会检查值的形状是否与占位符兼容。
-
使用tf.operation.eval()也可运行operation,但需要在会话中运行
# 创建图a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b# 创建会话sess = tf.Session()# 计算C的值print(sess.run(c))
print(c.eval(session=sess))
2.3.1.3 feed操作
- placeholder提供占位符,run时候通过feed_dict指定参数
def session_run_demo():"""会话的run方法:return:"""# 定义占位符a = tf.placeholder(tf.float32)b = tf.placeholder(tf.float32)sum_ab = tf.add(a, b)print("sum_ab:\n", sum_ab)# 开启会话with tf.Session() as sess:print("占位符的结果:\n", sess.run(sum_ab, feed_dict={a: 3.0, b: 4.0}))return None
请注意运行时候报的错误error:
RuntimeError:如果这Session是无效状态(例如已关闭)。
TypeError:如果fetches或者feed_dict键的类型不合适。
ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在的键。
未完待续, 同学们请等待下一期
全套笔记和代码自取在个人博客: https://www.666mao.com/sku?skuId=6
感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~
符
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
sum_ab = tf.add(a, b)
print(“sum_ab:\n”, sum_ab)
# 开启会话
with tf.Session() as sess:
print(“占位符的结果:\n”, sess.run(sum_ab, feed_dict={a: 3.0, b: 4.0}))
return None
>
请注意运行时候报的错误error:```python
RuntimeError:如果这Session是无效状态(例如已关闭)。
TypeError:如果fetches或者feed_dict键的类型不合适。
ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在的键。
未完待续, 同学们请等待下一期
相关文章:
【深度学习】从0完整讲透深度学习第2篇:TensorFlow介绍和基本操作(代码文档已分享)
本系列文章md笔记(已分享)主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归(含代码),熟练掌握numpy,pandas,sklearn等框架使用。在算法上,掌握神经网络的数学原理,手动实…...
题目: 有1234个数字, 组成多个互不相同且无重复数字的三位数? 都是多少?
lua脚本如下 最原始的解题方法 local str{} local i, j, k0, 0, 0 for i1, 4 do for j1, 4 do for k1, 4 do if i~j and i~k and j~k then str[#str1]i..j..k end end end end print("组成的数有"..#str) print(table.unpack(str)) 运行的结果如下 组成的数有24 1…...
由亚马逊云科技 Graviton4 驱动的全新内存优化型实例 Amazon EC2 实例(R8g),现已开放预览
下一代 Amazon Elastic Compute CloudAmazon EC2) 实例的预览版现已公开 提供。全新的 R8g 实例 搭载新式 Graviton4 处理器,其性价比远超任何现有的内存优化实例。对于要求较高的内存密集型工作负载,R8g 实例是不二之选:大数据分析、高性能数…...
sqlserver alwayson部署文档手册
1、ALWAYSON概述 详细介绍参照官网详细文档,我就不在这里赘述了: https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server?viewsql-server-ver16 下图显示的是一个包含一个…...
【FFmpeg】ffplay 命令行参数 ① ( 设置播放分辨率 | 禁用 音频 / 视频 / 字幕 选项 )
文章目录 一、ffplay 命令行参数 - 设置播放分辨率1、强制设置通用播放分辨率 -x -y 参数2、命令行示例 - 正常播放视频3、命令行示例 - 强制设置播放分辨率4、设置 YUV 播放分辨率 -video_size 和 像素设置 -pixel_format5、全屏播放 -fs 参数 二、ffplay 命令行参数 - 禁用 音…...
CSS写渐变边框线条
box-sizing: border-box; border-top: 1px solid; border-image: linear-gradient(to right, red, blue) 1;...
【Linux网络编程三】Udp套接字编程网络应用场景
【Linux网络编程三】Udp套接字编程网络应用场景 应用场景一:远程命令执行应用场景二:与Windos端相互通信应用场景三:简单聊天1.多线程化2.输入输出分开 应用场景一:远程命令执行 简单的服务器上一篇已经完成,接下来我…...
计算机网络实验二
目录 实验二 交换机的基本配置 1、实验目的 2、实验设备 (1)实验内容: (2)练习: 1.实验内容一:(交换机的配置方式) 2.实验内容二:(交换机…...
PS一键磨皮插件Delicious Retouch for mac中文 支持PS2024
Delicious Retouch for Mac是一款优秀的Photoshop插件,专注于人像修饰。以下是该插件的一些主要特点和功能: 软件下载:Delicious Retouch for mac中文 支持PS2024 人像修饰工具:Delicious Retouch专注于人像修饰,提供了…...
信息安全管理措施
本文已收录至《全国计算机等级考试——信息 安全技术》专栏 目的 信息是企业存在和发展的重要基础。为规范企业信息管理,保障信息安全,明确信息安全管理的程序、职责、义务和权限,特制定本制度。 职责 网络管理员(委外…...
『运维备忘录』之 Vim 命令详解
运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大…...
Gcc多版本安装和切换
添加本地source sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update安装 gcc9 和 g9(ubuntu18.04) sudo apt-get install gcc-9 gcc-9-multilib g-9 g-9-multilib安装 gcc13 和 g13(ubuntu22.04) sudo …...
【python】OpenCV—Tracking(10.1)
学习来自《Learning OpenCV 3 Computer Vision with Python》Second Edition by Joe Minichino and Joseph Howse 文章目录 检测移动的目标涉及到的 opencv 库cv2.GaussianBlurcv2.absdiffcv2.thresholdcv2.dilatecv2.getStructuringElementcv2.findContourscv2.contourAreacv2…...
计算机网络(复习资料)
1.互联网的两个重要基本特点 连通性和共享性 2.计算机网络由若干节点和连接这些节点的链路组成 3.有多个网络通过路由器相互连接起来,构成一个更大的计算机网络称为互联网 4.网络把许多计算机连接在一起,互联网把许多网络通过一些路由器连接在一起,与网络相连的计算机称为…...
AIGC技术讲解以及应用的落地
简介 近期,火爆的“AI绘画”、图片转AI图,智能聊天软件ChatGPT,引起了人们广泛关注。人工智能潜力再次被证明,而这三个概念均来自同一个领域:AIGC。AIGC到底是什么?为什么如此引人关注?AIGC能产…...
Unity_ShaderGraph示例项目启动
Unity_ShaderGraph示例项目启动 大前提不变:URP模板,Unity2023.1.19使用 Shader Graph - Unity 手册Shader Graph 是一个工具,能够让您直观地构建着色器。您可以在图形框架中创建并连接节点,而不必手写代码。Shader Graph 提供了能反映所作更改的即时反馈,对于不熟悉着色…...
【Eclipse平台】1Eclipse平台总体概览
Eclipse平台总览 欢迎来到【Eclipse平台系列】,本文介绍Eclipse平台的总体概览 文章目录 Eclipse平台总览1. 什么Eclipse开放的架构2. 如何下载Eclipse3. Eclipse的命名规则3. Eclipse的构成3.1 Workbench1. 什么Eclipse Eclipse是一个流行的集成开发环境(Integrated Devel…...
Dijkstra求最短路 I
题目 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出−1。 输入格式: 第一行包含整数n和m。 接下来m行,每…...
复习单向,双向链表,并且实现两种链表的增加和删除功能。
单链表头插 Linklist insert_head(datatype element,Linklist head) {//创建新节点 Linklist screate_node();if(NULLs)return head; s->dataelement;//1,判断链表为空if(NULLhead){heads;}else //链表不为空{s->nexthead;heads;}return head; } 单链表尾插 Linklist …...
【webpack】技巧使用
webpack和TypeScript 安装webpack相关内容安装TS相关内容配置初始化数据初始化运行展示和目录展示报错解决(缺失文件配置) 安装前端必备神奇lodash测试一下entry配置index.html模板配置修改打包出来的index.html的titleinject注入chunks 属性多页面配置 …...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
