【TensorFlow1.X】系列学习笔记之TF总览

news/2024/4/24 15:28:19/文章来源:https://blog.csdn.net/yangyu0515/article/details/130363266

【TensorFlow1.X】系列学习笔记之TF总览

大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识


文章目录

  • 【TensorFlow1.X】系列学习笔记之TF总览
  • 前言
  • 计算图(The computation graph)
    • 构建计算图(Building the graph)
    • 在会话中载入图(Launching the graph in a session)
    • 交互式使用(Interactive Usage)
    • 张量(Tensors)
    • 变量(Variables)
    • 取回(Fetches)
    • 供给(Feeds)
  • 总结


前言

使用 TensorFlow1.X之前你需要了解关于 TensorFlow1.X 的以下基础知识:

  1. 使用图 (graphs) 来表示计算;
  2. 在会话 (Session) 中执行图;
  3. 使用张量 (tensors) 来代表数据
  4. 通过变量 (Variables) 维护状态;
  5. 使用供给 (feeds) 和取回 (fetches) 将数据传入或传出任何操作。

计算图(The computation graph)

  通常,TensorFlow 编程可按两个阶段组织起来:构建阶段和执行阶段; 前者用于组织计算图,而后者使用 session 执行计算图中的 op 操作。例如,在构建阶段创建一个图来表示和训练神经网络,然后在执行阶段反复执行一组 op 来实现图中的训练。TensorFlow 支持 C、C++、Python 编程语言。目前, TensorFlow 的 Python 库更加易用,它提供了大量的辅助函数来简化构建图的工作,而这些函数在 C 和 C++ 库中尚不被支持。这三种语言的会话库 (session libraries) 是一致的。

构建计算图(Building the graph)

  刚开始基于 op 建立图的时候一般不需要任何的输入源 (source op),例如输入常量(Constance),再将它们传递给其它 op 执行运算。Python 库中的 op 构造函数返回代表已被组织好的 op 作为输出对象,这些对象可以传递给其它 op 构造函数作为输入。TensorFlow(Python库)有一个可被op构造函数加入计算结点的默认图(default graph)。对大多数应用来说,这个默认图已经足够用了。

import tensorflow as tf
# 创建一个产生1x2矩阵的常量运算
# op将作为节点添加到默认图形中
# 构造函数返回的值就是Constant op 的输出
matrix1 = tf.constant([[3., 3.]])
# 创建另一个生成2x1矩阵的常数
matrix2 = tf.constant([[2.], [2.]])
# 创建一个以“matrix1”和“matrix2”作为输入的Matmul操作
# 返回的值,“product”表示矩阵相乘的结果
product = tf.matmul(matrix1, matrix2)
print(product)
# =>Tensor("MatMul:0", shape=(1, 1), dtype=float32)

默认图现在拥有三个节点,两个constant() op 和一个matmul() op,为了真正进行矩阵乘法运算,得到乘法结果,你必须在一个会话 (session) 中载入动这个图。

在会话中载入图(Launching the graph in a session)

  构建过程完成后就可运行执行过程。为了载入之前所构建的图,必须先创建一个会话对象 (Session object)。会话构建器在未指明参数时会载入默认的图。

import tensorflow as tf
# 创建一个产生1x2矩阵的常量运算
# op将作为节点添加到默认图形中
# 构造函数返回的值就是Constant op 的输出
matrix1 = tf.constant([[3., 3.]])
# 创建另一个生成2x1矩阵的常数
matrix2 = tf.constant([[2.], [2.]])
# 创建一个以“matrix1”和“matrix2”作为输入的Matmul操作
# 返回的值,“product”表示矩阵相乘的结果
product = tf.matmul(matrix1, matrix2)
print(product)
# =>Tensor("MatMul:0", shape=(1, 1), dtype=float32)
# 启动默认图形。
sess = tf.Session()
# 要运行matmul-op,调用会话“run()”方法,传递“product”,其表示matmul运算的输出
# op 所需的所有输入都由会话自动运行,通常是并行运行的
# 调用“run(product)”会导致在图中执行三个操作:两个常量 op 和matmul op
result = sess.run(product)
# 操作的输出在“result”中作为numpy“ndarray”对象返回
print(result)
# =>[[12.]]
print(type(result))
# =><class 'numpy.ndarray'>
# 完成后关闭会话
sess.close()

会话在完成后必须关闭以释放资源。你也可以使用"with"句块开始一个会话,该会话将在"with"句块结束时自动关闭。

import tensorflow as tf
# 创建一个产生1x2矩阵的常量运算
# op将作为节点添加到默认图形中
# 构造函数返回的值就是Constant op 的输出
matrix1 = tf.constant([[3., 3.]])
# 创建另一个生成2x1矩阵的常数
matrix2 = tf.constant([[2.], [2.]])
# 创建一个以“matrix1”和“matrix2”作为输入的Matmul操作
# 返回的值,“product”表示矩阵相乘的结果
product = tf.matmul(matrix1, matrix2)
print(product)
# =>Tensor("MatMul:0", shape=(1, 1), dtype=float32)
# 完成后关闭会话
with tf.Session() as sess:# 要运行matmul-op,调用会话“run()”方法,传递“product”,其表示matmul运算的输出# op 所需的所有输入都由会话自动运行,通常是并行运行的# 调用“run(product)”会导致在图中执行三个操作:两个常量 op 和matmul opresult = sess.run([product])print(result)# =>[[12.]]print(type(result))# =><class 'numpy.ndarray'>

  TensorFlow 事实上通过一个“翻译”过程,将定义的图转化为不同的可用计算资源间实现分布计算的操作,如 CPU 或是显卡 GPU。通常不需要用户指定具体使用的 CPU 或 GPU,TensorFlow 能自动检测并尽可能的充分利用找到的第一个 GPU 进行运算。如果你的设备上有不止一个 GPU,你需要明确指定 op 操作到不同的运算设备以调用它们。使用with…Device语句明确指定哪个 CPU 或 GPU 将被调用:

import tensorflow as tf
with tf.Session() as sess:with tf.device("/gpu:0"):matrix1 = tf.constant([[3., 3.]])matrix2 = tf.constant([[2.], [2.]])product = tf.matmul(matrix1, matrix2)result = sess.run([product])print(result)print(type(result))
字符串指定设备设备(前提是可用)
“/cpu:0”计算机的 CPU
“/cpu:0”计算机的第一个 GPU
“/gpu:0”计算机的第二个 GPU
“/gpu:x”计算机的第x个 GPU

交互式使用(Interactive Usage)

  下列代码是 Python 示例,使用一个会话 Session 来启动图,并调用 Session.run() 方法执行操作。考虑到如IPython这样的交互式 Python 环境的易用,可以使用InteractiveSession 代替Session类,使用 Tensor.eval()和Operation.run() 方法代替 Session.run()。这样可以避免使用一个变量来持有会话,如result = sess.run([product])中的result。

import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])
# “initializer op”的run()方法初始化“x”
# Operation.run()<--initializer.run()
x.initializer.run()
# 添加一个“op”以从“x”中减去“a”
sub = tf.subtract(x, a)
# 运行它并打印结果
# Tensor.eval()<--sub.eval()
print(sub.eval())
# ==> [−2. −1.]
sess.close()

张量(Tensors)

  TensorFlow 程序使用 tensor 数据结构来代表所有的数据,计算图中,操作间传递的数据都是 tensor. 可以把 TensorFlow 的张量看作是一个 n 维的数组或列表. 一个 tensor包含一个静态类型 rank 和一个 shape。

变量(Variables)

  变量维持了图执行过程中的状态信息。下面的代码演示了如何使用变量实现一个简单的计数器。

import tensorflow as tf
state = tf.Variable(0, name="counter")
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)
# 在启动图形后,必须通过运行“init op”来初始化变量。
init_op = tf.initialize_all_variables()
with tf.Session() as sess:# 执行 'init op'sess.run(init_op)print(sess.run(state))for _ in range(3):sess.run(update)print(sess.run(state))
# 0 1 2 3

代码中assign()操作是图所描绘的表达式的一部分,正如add()操作一样。所以在调用run()执行表达式之前,它并不会真正执行赋值操作。通常会将一个统计模型中的参数表示为一组变量。例如,你可以将一个神经网络的权重作为某个变量存储在一个 tensor 中,在训练过程中通过重复运行训练图, 更新这个tensor。

取回(Fetches)

  为了取回操作的输出内容,可以在使用 Session 对象的 run() 调用执行图时,传入一些 tensor,这些 tensor 会取回结果。在之前的例子里, 只取回了单个节点state,其实也可以取回多个 tensor。

import tensorflow as tf
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.multiply(input1, intermed)
with tf.Session() as sess:result = sess.run([mul, intermed])# 取出了 mul intermed 俩个 tensorprint(result)# =>[21.0, 7.0]

供给(Feeds)

  在计算图中引入了 tensor 以 常量 (Constants) 或 变量 (Variables) 的形式存储。TensorFlow 还提供给 (feed) 机制,该机制可临时替代图中的任意操作中的 tensor 可以对图中任何操作提交补丁,直接插入一个 tensor。feed 使用一个 tensor 值临时替换一个操作的输出结果,可以提供 feed 数据作为 run() 调用的参数。feed 只在调用它的方法内有效,方法结束 feed 就会消失。
  最常见的用例是将某些特殊的操作指定为"feed" 操作,标记的方法是使用tf.placeholder()为这些操作创建占位符。

import tensorflow as tf
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1, input2)
with tf.Session() as sess:print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))# =>[array([14.], dtype=float32)]

如果没有正确供给,placeholder() 操作将会产生一个错误提示。


总结

  TensorFlow是一个以图(graphs)来表示计算的编程系统,图中的节点被称之为op (operation 的缩写)。一个 op 获得零或多个张量 (tensors) 执行计算,产生零或多个张量。张量是一个按类型划分的多维数组。例如,你可以将一小组图像集表示为一个四维浮点数数组,,这四个维度分别是[batch, height, width, channels]。
  TensorFlow 的图是一种对计算的抽象描述。在计算开始前, 图必须在会话 (Session()) 中被启动。会话将图的 op 分发到如 CPU 或 GPU 之类的设备 (Devices()) 上,同时提供执行 op 的方法。这些方法执行后, 将产生的张量 (tensor) 返回。在 Python 语言中, 将返回numpy的ndarray 对象;在 C 和 C++ 语言中, 将返回tensorflow::Tensor实例。

个人总结:任何tf.xxx都是一个 op,除了用于创建会话 (Session())的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103334.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SGM431的电路设计问题分析

本案例中,采用SGM431芯片设计了一个过压保护电路。 这个电路初次设计,有很多的问题,下面逐一分析 1.当输入24V,测得Vref=1.59V。Vout为1.15V;,mos管关断 2。经过多次测量发现,临界值在10V到10.5之间; 当输入10.5V时,测量Vref=1.69V。vout=1.15V;mos管关断 当输入1…

智慧物联网边缘协同感知(EICS)技术方案: 低功耗无线扫描唤醒技术

物联网的传感器或控制节点通常有体积限制&#xff0c;只能使用钮扣电池、小型电池&#xff0c;甚至使用能量收集源进行运作。在许多工业应用中&#xff0c;需要人工更换电池的成本&#xff0c;特别是在难以接近地方更换所需的成本&#xff0c;使得人们更加重视降低平均电流消耗…

深度学习入门到实践:相关基础概述

绪论 深度学习&#xff08;Deep Learning&#xff09;是近年来发展十分迅速的研究领域&#xff0c;并且在人工智能的很多子领域都取得了巨大的成功。从根源来讲&#xff0c;深度学习是机器学习的一个分支&#xff0c;是指一类问题以及解决这类问题的方法。     深度学习问题…

halcon灰度积分投影/垂直积分投影

简介:关于灰度投影积分可以用到的场合很多,例如分割字符,分割尺子上的刻度等,适用于有规律的变化这些内容的检测。本文复现了论文《基于深度学习和灰度纹理特征的铁路接触网绝缘子状态检测》中灰度积分投影实现了对绝缘子缺陷位置的检测。见(图1)灰度积分垂直方向投影获得…

AI智能智能课程第四讲 -数据库领域专家

使用chatGPT让你成为数据库领域专家 作业 现在要测试电商的下单功能&#xff1a;测试员张三在公司的电商平台上下了几个单&#xff0c;现在需要验证&#xff1a;张三这个客户下单的所有订单信息&#xff0c;包含订单编号&#xff0c;商品名称&#xff0c;商品价格&#xff0c;…

分支和循环语句(2)

文章目录 3.2 for循环3.2.1 for语句的语法3.2.2 for循环中的break和continue3.2.3 for语句的循环控制变量3.2.4 一些for循环的变种3.2.5 一道笔试题 3.3 do while循环3.3.1 do语句的语法3.3.2 do语句的特点3.3.3 do while循环中的break和continue 3.4 练习3.4.1 计算 n的阶乘3.…

Compiler- 尾调用

我们还是用例子来引入本次要探讨的问题--尾调用 #include <stdio.h>int fib(int a) {return a < 2 ? 1 : fib(a - 1) fib(a - 2); }int main() {int n,result;scanf("%d",&n);result fib(n);printf("result is %d.\n",result);return 0; …

创建路由React router(使用react-router dom V6版本)

React路由 隔了很长一段时间&#xff0c;重新捡起来React学习。 发现React的路由从原来的 Switch改成了Routes。nice&#xff0c;nice&#xff0c;nice&#xff01;&#xff01;&#xff01;&#xff01; 刚开始接触确实还是有一点生疏的。之前的关于【传参】【js跳转】【跳转模…

矿井下无人值守变电所电力监控系统的探讨与产品选型

摘要&#xff1a;为了探讨井下无人值守变电所的电力监控系统技术&#xff0c;以西山煤电马兰矿为背景&#xff0c;详细阐述了井下无人值守变电所电力监控系统技术的各项基本参数&#xff0c;如额定工作电压及整机输入视在功率、交换机或监控分站的传输口、高压配电装置的传输口…

下载VMWare

1、首先登录到vmware官网 官网&#xff1a;https://www.vmware.com/ 2、点击Resource 3、找到Product Downloads 4、找到我们要下载的产品&#xff0c;点击download product 5、选择自己要下载的版本和对应的系统 6、点击去下载 7、点击download now

国云筑基“翼”气风发,天翼云以科技创新绘就数字中国蓝图

科技云报道原创。 全球新一轮技术革命方兴未艾&#xff0c;特别是以数字技术为核心的信息技术革命&#xff0c;正在实现群体突破和加快广泛深度应用。 从2017年的“促进数字经济加快成长”&#xff0c;到2019年的“壮大数字经济”&#xff0c;到2020年的“全面推进‘互联网&am…

SpringBoot的配置和日志

1.配置文件的作用和意义 配置文件中配置整个项目中所有重要的数据&#xff0c;比如&#xff1a; 1.数据库的连接信息&#xff08;包含用户名和密码的设置&#xff09;&#xff1b; 2.项目的启动端口&#xff1b; 3.第三方系统的调用秘钥等信息&#xff1b; 4.用于发现和定位问…

Unity之OpenXR+XR Interaction Toolkit实现 抓取物体

前言 我们今天来说一下如何使用XR Interaction Toolkit来实现和3D物体的交互之&#xff1a;抓取&#xff0c;简单说就是通过VR手柄拿起来一个物体。 二.准备工作 有了前两篇的配置介绍,我们就不在详细说明这些了&#xff0c;大家自行复习 Unity之OpenXRXR Interaction Toolk…

BPF技术学习与整理

目录 eBPF是什么&#xff1f; eBPF是做什么的&#xff1f;可以解决什么问题&#xff1f; eBPF可以带来的解决方案是什么&#xff1f; eBPF的技术点 eBPF hookeBPF MapeBPF Helper FunctioneBPF有什么限制吗&#xff1f; 前言 21年因为项目需求而要开发一个工具&#xff0c;可以…

每日一个小技巧:1招教你wav格式如何转换mp3

wav是一种质量较高的音频格式&#xff0c;但它的文件大小通常比较大。为了更方便地分享和存储音频文件&#xff0c;许多人都会选择将其转换为mp3格式。因为mp3格式能够在保持较高音质的同时&#xff0c;尽量降低文件大小&#xff0c;帮助你节省许多磁盘空间。那你们知道wav格式…

Java基础——多线程创建

&#xff08;1&#xff09;什么是线程&#xff1f; 线程(thread)是一个程序内部的一条执行路径。程序中只有一条执行路径&#xff0c;那么这个程序就是单线程的程序。 &#xff08;2&#xff09;多线程是什么&#xff1f; 多线程是指从软硬件上实现多执行流程的技术。 &…

让 ChatGPT 扮演一个艺术家,协助我们生成绘图 prompt

stable-diffusion Prompt 生成 直接生成 按照惯用的扮演思路&#xff0c;我们可以让 ChatGPT 扮演一个艺术家&#xff0c;协助我们生成绘图 prompt。考虑到 ChatGPT 和 DallE 同为 openai 公司产品&#xff0c;且 stable-diffusion 开源模型出现较晚&#xff0c;ChatGPT 训练…

【软件工程】UML序列图

一.概述 序列图&#xff08;时序图&#xff09;是一种软件工程行化建模方法&#xff0c;用于可视化系统或应用程序中多个对象之间 的交互。在序列图中&#xff0c;每个对象都表示为竖直线&#xff0c;对象之间的消息则表示为水平箭头 从一个对象指向另一个对象。 序列图可以…

搞懂 API ,地图 API 制作方法分享

地图 API 是一种基于 Web 开发的应用程序编程接口&#xff0c;可以用于创建和展示地图及地理信息。以下是一些地图 API 制作的方法&#xff1a; 选择地图 API 平台&#xff1a;目前市场上有很多地图 API 平台供选择&#xff0c;比如 Google Maps API、百度地图 API、高德地图 A…

2023年五月份图形化三级打卡试题

活动时间 从2023年5月1日至5月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…