tensorflow是一个深度学习的开源工具,它的设计理念主要有以下两点:
  1.计算图的定义和图的运算是分开的.tensorflow是一个’符号主义的库’.编程模式分为两类,命令式(imperative style)和符号式(symbolic style).命令式的程序很容易理解和调试,它按照原有的逻辑运行.符号式则相反,在现有的深度学习框架中,torch是命令式的,Caffe,Mxnet是两种模式的混合,tensorflow完全采用符号式.符号式编程,一般先定义各种变量,然后建立一个计算图(数据流图),计算图指定了各个变量之间的计算关系,此时对计算图进行编译,没有任何输出,计算图还是一个空壳,只有把需要运算的输入放入后,才会在模型中形成数据流.形成输出.
  2.tensorflow中的运算都要放在图中,图中的运算进行发生在回话启动后(session),给节点填充数据,进行运算,关闭会话,结束运算.

# 命令式
c = 1 + 2
print (c)
3
# 符号式
import tensorflow as tf
d = tf.add(1, 2)
print (d)
Tensor("Add:0", shape=(), dtype=int32)

上面输出的结果是一个张量d的信息
张量的三个属性,name,shape,dtype.
1.name第一个属性是张量的一个标识符name=’参数为字符串类型’,如果没有指定,会根据张量是通过什么操作(运算)自动添加,后面的0表示张量d是计算节点add的第一个输出.
2.shape,描述张量的维度信息
3.dtype,张量的类型,tensorflow会对参与计算张量的类型进行检查,不匹配会报错

在命令式编程中,运行即输出结果,在tensorflow中,加法运算并没有发生.tf.add(1, 2)只是定义了一个操作.操作要在session,开启后,才会执行.print(d)只是将节点d添加到了计算图当中.

# 创建图
a = tf.constant(1, name='input_a')
b = tf.constant(2, name='input_b')
f = tf.add(a,b, name='add_ab')

  上面创建的每一个节点(比如a这个节点),都被称为一个Operation(Op),每个Op都可以接受/输出0个或多个tensor对象.上面的例子中,tf.constant()创建了一个常量,也就是一个Op,该函数会自动把一个标量转换为一个tensor对象.此外还传入了一个可选的字符串参数name,对节点(Op)进行标识,除了name属性,还有dtype属性,指定数据类型,(dtype=tf.int32).如果在创建节点时,没有指定dtype,没有小数点的数默认为tf.int32,有小数点的默认为tf.float32

# 创建会话
sess = tf.Session()
# 计算f这个张量(对应Op:tf.add())
print sess.run(f)
# 关闭会话
sess.close()
3

计算图中的边

计算图中的边包含这两种关系:数据依赖和控制依赖.(不需要对计算图中的边进行定义,因为在tensorflow中创建节点是已包含了相应的Op完成计算所需的全部输入,tensorflow会自动绘制必要的连接)
实线的边代表着数据依赖.标识连接的两个节点之间有tensor的流动(传递)
虚线的边代表着控制依赖.用于控制操作的运行,确保happens-before关系,连接的节点之间间没有tensor的传递,但是源节点必须在目的节点执行前完成执行.

tensorflow中的节点(Op)

  在上面创建图中,每一个节点代表着一个操作(operation,Op),一般用来表示施加的的数学运算,也可以表示数据输入的起点以及输出的终点,或者是读取/写入持久变量(persistent veriable)的终点,Op也可用于状态初始化的任务.tensorflow中的其他数学运算tf.mul(),tf.sub,tf.div,tf.mod分别是乘法,减法,除法,取模. tf.div()执行的除法取决于提供的数据类型,如果要使用浮点数除法,可以使用:tf.truediv()
Tensorflow中还有很多操作函数,与之相关的代码都在tensorflow/python/ops/目录下的文件中

 
tensorflow中的张量(tensor):
在tensorflow中所有的数据都是以张量的形式来表示的,张量可以理解为多维数组,零阶张量表示标量(一个数),一阶张量就是一个向量类似一维数组,二阶张量相当于二维数组.但是张量在tensorflow中并不是直接采用数组的形式,在tensorflow中张量不用来保存结果,它是对计算结果的引用,保存的是得到计算结果的计算过程.
仍以上面例子:
 

a = tf.constant(1, name='input_a')
b = tf.constant(2, name='input_b')
f = tf.add(a,b, name='add_ab')
print (a)
print (b)
print (f)

从输出的结果可以发现a,b是对生成常量(零阶张量)这个运算结果的引用(生成张量运算过程保存),f是对两个常量求和运算的引用
Tensor(“input_a_5:0”, shape=(), dtype=int32)
Tensor(“input_b_6:0”, shape=(), dtype=int32)
Tensor(“add_ab_5:0”, shape=(), dtype=int32)

sess = tf.Session()
# 通过张量获取计算结果
print sess.run(a)
print sess.run(f)
sess.close()

 
张量两个用途:
1.对节点计算结果的引用,(计算过程的保存)
2.通过张量来或去计算结果
 
在tensorflow中Op接受标准的Python数据类型,整数,浮点数,字符串,并将它们转换为张量
手工创建tensor的方式:
1.Python原生数据类型
  tensorflow接收,python数值,布尔值,字符串或构成的列表.单个数值被转换为0阶张量,列表转换为1阶张量,列表构成的列表转换为二阶张量.tensorflow中支持tf.float32和tf.float64浮点数类型,和tf.int8~int64的有符号整数类型,tf.uint8八位无符号整数,tf.string字符串,tf.bool布尔型,tf.complex64复数(实部和虚部分别为32为浮点型)还有用于量化Op的:tf.qint8,tf.qint16,tf.qunit8在tf中整数的数据类型很多,但是Python中所有的整数具有相同的类型,因此在Python原生数据类型传入是,tensorflow需要对数据类型进行推断,推断结果不一定靠谱.所以尽量不用Python原生数据类型.

2.Numpy数组

  numpy中的数据类型跟tensorflow中的数据类型是完全兼的,np.int32=tf.int32,所以任何的numpy数组都可以传递给tf的Op(Operation/节点) 建议显式声明对象类型
a = np.array([1, 2], dtype=np.int32)
b = np.array([3, 4], dtype=np.int32)
c = tf.add(a, b)

3.张量的shape

  每个张量对象都有一个属性shape,在计算图中可以通过tf.shape()函数来获取张量的形.这个获取张量shape的操作跟计算图中的其他Op是一样的,通过session对象得到

shape = tf.shape(a, name='tensor_a_shape')
print sess.run(shape)

在tensorflow中也支持和Python中一样的运算符重载


a = tf.constant(1, name='input_a')
b = tf.constant(2, name='input_b')
f = tf.add(a,b, name='add_ab') #与 f = a + b 是一样的
# 只不过使用运算符是,无法给Op的name属性指定值

注意:在tensorflow中 == 运算符不会返回一个布尔型的tensor对象,它判断的是两个tensor对象名是否引用了同一个对象,是返回True,否返回False.所以在判断两个张量的值是否相同的时候,使用tf.equal()和tf.not_equal()

TensorFlow基础知识:计算图中的Op,边,和张量相关推荐

  1. 教程▍一步步上手TensorFlow——基础知识

    作者|blackblog  编辑| 布袋熊 AI基础技能学习 一步步上手TensorFlow TensorFlow 是一个用于人工智能的开源神器.作为常用的机器学习框架,可被用于语音识别或图像识别等多 ...

  2. iptables的基础知识-iptables中的状态检测

    2019独角兽企业重金招聘Python工程师标准>>> iptables的基础知识-iptables中的状态检测:iptabels被认为是Linux中实现包过滤功能的第四代应用程序. ...

  3. 3.1 Tensorflow基础知识

    3.1 Tensorflow基础知识 3.1.1 深度学习框架介绍 框架对比: 1.技术层面 对于个人开发者,它的主要用途为科研,而企业用户的主要用途为进行AI应用,提升生产效率.在此,主要从两类用户 ...

  4. 机器学习Tensorflow基础知识、张量与变量

    TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组, ...

  5. 损耗的基础知识(中)

    书接前文,讲了损耗的基础知识,还有相关损耗方面的知识需要补充. 1.衰减 当信号沿传输线传播时,损耗对信号的主要影响就是使信号幅度衰减. 关于衰减,记住下面的公式 若功率加倍,则分贝值变化为10log ...

  6. 计算机专业基础知识(中)

    大纲 分专题讲解 4. 操作系统的基本概念.功能.组成及分类 概念理解 主要功能 组成和分类 主流的操作系统 推荐书籍和课程 5. Windows 操作系统的基本概念和常用术语,文件.文件夹.库等 W ...

  7. tensorflow基础知识10,三维可视化embedding

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data from tensorflow.c ...

  8. java定义一个eat方法_小黄鸭系列java基础知识 | java中的方法

    前言 今天我们要探讨的问题,是java基础语法的最后一个问题,也就是java中的方法,今天主要从以下几个方面来介绍: 方法是什么(定义) 方法的分类 方法的调用 应该说,学完今天的知识,你至少应该看懂 ...

  9. Tensorflow基础知识

    1. tf.expand_dims() 作用:给函数增加纬度. 参数: tf.expand_dims( input, # 输入张量 axis=None, # 给定张量输入input,此操作为选择维度索 ...

  10. tensorflow基础知识(CNN)

    1.在cnn的嵌入层看到如下代码 embedding=tf.get_variable('embedding',[3,2]) 这时创建了一个类似3x2矩阵的变量,而且这个变量是的.所以要进行初始化,或者 ...

最新文章

  1. Find Minimumd in Rotated Sorted Array
  2. NetLogo入门(二)——模型基本语法
  3. 大一新生开发的小工具火了!不一样的 Python 编程体验,还是可视化的那种
  4. linux之cut命令使用和总结
  5. css3新增了哪三种边框效果,怎么在CSS3中实现一个边框效果
  6. Linux下添加eigen头文件,移植Eigen库到SylixOS下及使用方法
  7. 数据结构与算法 | Leetcode 19. Remove Nth Node From End of List
  8. DHTML3(表格动态创建,删除行/列,表格行排序,行颜色交替高亮显示)
  9. Missing session attribute 'user' of type List 解决办法
  10. AI和大数据结合,智能运维平台助力流利说提升竞争力
  11. 利用Matlab进行图像处理
  12. 音频D类功放LC滤波器设计(一)
  13. python小程序实现 --- 乌龟吃鱼(练习点——面向对象的特性:继承,多态,封装)
  14. 1g内存编译android,如何让Android手机1G内存就“够用”?
  15. 【BSP视频教程】STM32H7视频教程第4期:从启动到运行过程全解析,电源域,复位,时钟,软硬件启动流程到堆栈,map和htm文件分析(2022-01-26)
  16. 健康体检管理系统源码 运营级PEIS系统源码 PEIS健康体检系统源码 PEIS源码 B/S架构开发
  17. 编写SQL语句,检索Customers表中所有的列,再编写另外的SELECT语句,仅检索顾客的ID
  18. 菜鸟站长之家教各位菜鸟站长用WordPress如何给文章生成推广二维码
  19. 使用omniverse:一张照片快速生成一个3D数字人
  20. LNK1104:无法打开文件\.obj

热门文章

  1. 时间字段加一秒_面试Java后端却问我时间轮(Time Wheel)算法,面试官没想到我看过Dubbo源码!...
  2. davinci项目服务器无法,【工程管理】为达芬奇建一个项目管理服务器 多人协同调色...
  3. ai一个线段多个箭头_「平面设计」Illustrator(AI)基础教学-第2章 绘制简单的图形...
  4. [转]前端HTML书写不得不掌握的Emmet缩写语法
  5. CentOS 7安装Mysql并设置开机自启动
  6. 浅谈压缩感知(二十七):压缩感知重构算法之稀疏度自适应匹配追踪(SAMP)
  7. 关于SUSE linux
  8. Android 压缩解压zip文件
  9. 如何在论坛里提高自己的从业水平
  10. Hyper-V 测试