广播操作(Broadcasting operation)

一种用numpy-style broadcasting来保证tensor参数的形态兼容的操作。

Devices

一块可以用来运算并且拥有自己的地址空间的硬件,比如GPU和CPU。

eval

Tensor 的一个方法,返回 Tensor 的值。触发任意一个图计算都需要计算出这个值。只能在一个已经启动的会话的图中才能调用该 Tensor 值。

Feed
TensorFlow 的一个概念:把一个 Tensor 直接连接到一个会话图表中的任意节点。feed 不是在构建图(graph)的时候创建,而是在触发图的执行操作时去申请。一个 feed 临时替代一个带有 Tensor 值的节点。把feed数据作为run( )方法和eval( )方法的参数来初始化运算。方法运行结束后,替换的 feed 就会消失,而最初的节点定义仍然还在。可以通过tf.placeholder( )把特定的节点指定为 feed 节点来创建它们。

Fetch

TensorFlow中的一个概念:为了取回运算操作的输出结果。取回的申请发生在触发执行图操作的时候,而不是发生在建立图的时候。如果要取回一个或多个节点(node)的 Tensor 值,可以通过在 Session 对象上调用run()方法并将待取回节点(node)的列表作为参数来执行图表(graph)。

Graph(图)

把运算任务描述成一个直接的无环图形(DAG),图表中的节点(node)代表必须要实现的一些操作。图中的边代表数据或者可控的依赖。GratheDef 是系统中描述一个图表的协议(api),它由一个 NodeDefs 集合组成。一个GraphDef可以转化成一个更容易操作的图表对象。

IndexedSlices(索引化切片)

在 Python API 中,TensorFlow 仅仅在第一维上对 Tensor 有所体现。如果一个 Tensor 有k维,那么一个 IndexedSlices 实例在逻辑上代表一个沿着这个 Tensor 第一维的(k-1)维切片的集合。切片的索引被连续储存在一个单独的一维向量中,而对应的切片则被拼接成一个单独的k维 Tensor。如果 sparsity 不是受限于第一维空间,请用 SparseTensor。

Node(节点)

图中的一个元素。 把启动一个特定操作的方式称为特定运算图表的一个节点,包括任何用来配置这个操作的属性的值。对于那些多形态的操作,这些属性包括能完全决定这个节点(Node)签名的充分信息。

操作(Op/operation)

在 TensorFlow 的运行时中,它是一种类似 add 或 matmul 或 concat的运算。可以用相关的方法来向运行时添加新的操作。在 Python 的API中,它是图中的一个节点。一个操作(Operation)的 type 属性决定这个节点(node)的操作类型,比如add和matmul。

Run

在一个运行的图中执行某种操作的行为。要求图必须运行在会话中。在 Python 的 API 中,它是 Session 类的一个方法可以通过 Tensors 来订阅或获取run()操作。

Session(会话)

启动图的第一步是创建一个 Session 对象。Session 提供在图中执行操作的一些方法。在 Python API中,使用[tf.Sessionhref="https://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/
SOURCE/api_docs/python/client.md")。
在 C++ 的API中,[tensorflow::Sessionhref="https://github.com/jikexueyuanwiki/tensorflow-zh/blob/mas
ter/SOURCE/api_docs/cc/ClassSession.md")是用来创建一个图并运行操作的类:

Shape

Tensor 的维度和它们的大小。在一个已经启动的图中,它表示流动在节点(node)之间的 Tensor 的属性。一些操作对 shape 有比较强的要求,如果没有 Shape 属性则会报告错误。在 Python API中,用创建图的 API 来说明 Tensor 的 Shape 属性。Tensor 的Shape 属性要么只有部分已知,要么全部未知。在C++中,Shape 类用来表示 Tensor 的维度。

SparseTensor

在 Python API 中,它用来表示在 TensorFlow 中稀疏散落在任意地方的 Tensor 。SparseTensor 以字典-值格式来储存那些沿着索引的非空值。换言之,m个非空值,就包含一个长度为m的值向量和一个由m列索引(indices)组成的矩阵。为了提升效率,SparseTensor 需要将 indice(索引)按维度的增加来按序存储,比如行主序。如果稀疏值仅沿着第一维度,就用 IndexedSlices。

Tensor

Tensor是一种特定的多维数组。比如,一个浮点型的四维数组表示一小批由[batch,height,width,channel]组成的图片。
在一个运行的图(graph)中,它是一种流动在节点(node)之间的数据。 在 Python 中,Tensor 类表示添加到图的操作中的输入和输出。

笔记补充:Tensorflow的tf.graph()和verbosity

1、tf.logging.set_verbosity

为将要被记录的的东西(日志)设置开始入口

例如:tf.logging.set_verbosity(tf.logging.INFO)

2、TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。

TensorFlow可被用于语音识别图像识别等多项机器深度学习领域,对2011年开发的深度学习基础架构istBelief进行了各方面的改进,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。TensorFlow将完全开源,任何人都可以用。

原生接口文章

  1. 【Tensorflow】tf.placeholder函数
  2. 【TensorFlow】tf.nn.conv2d是怎样实现卷积的
  3. 【TensorFlow】tf.nn.max_pool实现池化操作
  4. 【Tensorflow】tf.nn.relu函数
  5. 【Tensorflow】tf.reshape 函数
  6. 【Tensorflow】tf.nn.dropout函数
  7. 【Tensorflow】tf.argmax函数
  8. 【Tensorflow】tf.cast 类型转换 函数
  9. 【Tensorflow】tf.train.AdamOptimizer函数
  10. 【Tensorflow】tf.Graph()函数
  11. 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
  12. 【Tensorflow】tf.dynamic_partition 函数 分拆数组

 原生接口实例

  1. 【Tensorflow】实现简单的卷积神经网络CNN实际代码
  2. 【Tensorflow 实战】实现欧式距离

slim接口文章

  1. 【Tensorflow】tensorflow.contrib.slim 包
  2. 【Tensorflow slim】 slim.arg_scope的用法
  3. 【Tensorflow slim】slim.data包
  4. 【Tensorflow slim】slim evaluation 函数
  5. 【Tensorflow slim】slim layers包
  6. 【Tensorflow slim】slim learning包
  7. 【Tensorflow slim】slim losses包
  8. 【Tensorflow slim】slim nets包
  9. 【Tensorflow slim】slim variables包
  10. 【Tensorflow slim】slim metrics包

slim 实例

  1. 【Tensorflow slim 实战】写MobileNet
  2. 【Tensorflow slim 实战】写Inception-V4 Inception-ResNet-v2结构

keras 接口文章

  1. 【Tensorflow keras】Keras:基于Theano和TensorFlow的深度学习库
  2. 【Tensorflow keras】轻量级深度学习框架 Keras简介

tensorflow使用过程中的辅助接口或通过tensorflow实现的批量操作接口

  1. 将非RGB图片转换为RGB图片
  2. 【opencv】python3 将图片生成视频文件
  3. 【opencv】selective_search函数

 

============================================================

 

tf.Graph() 函数非常重要,主要体现在两个方面

1. 可以通过tensorboard用图形化界面展示出来流程结构

2. 可以整合一段代码为一个整体存在于一个图中

声明情况大体有三种

1. tensor:通过张量本身直接出graph


1. # -*- coding: utf-8 -*-  
2. import tensorflow as tf  
3.   
4. c = tf.constant(4.0)  
5.   
6. sess = tf.Session()  
7. sess.run(tf.global_variables_initializer())  
8. c_out = sess.run(c)  
9. print(c_out)  
10. print(c.graph == tf.get_default_graph())  
11. print(c.graph)  
12. print(tf.get_default_graph())


输出

 


1. 4.0  
2. True  
3. <tensorflow.python.framework.ops.Graph object at 0x7f382f9ef110>  
4. <tensorflow.python.framework.ops.Graph object at 0x7f382f9ef110>

2.通过声明一个默认的,然后定义张量内容,在后面可以调用或保存


1. # -*- coding: utf-8 -*-  
2. import tensorflow as tf  
3.   
4. g = tf.Graph()  
5. with g.as_default():  
6.     c = tf.constant(4.0)  
7.   
8. sess = tf.Session(graph=g)  
9. c_out = sess.run(c)  
10. print(c_out)  
11. print(g)  
12. print(tf.get_default_graph())

输出

 


1. 4.0  
2. <tensorflow.python.framework.ops.Graph object at 0x7f65f1cb2fd0>  
3. <tensorflow.python.framework.ops.Graph object at 0x7f65de447c90>

3.通过多个声明,在后面通过变量名来分别调用


    1. # -*- coding: utf-8 -*-  
    2. import tensorflow as tf  
    3.   
    4. g1 = tf.Graph()  
    5. with g1.as_default():  
    6.     c1 = tf.constant(4.0)  
    7.   
    8. g2 = tf.Graph()  
    9. with g2.as_default():  
    10.     c2 = tf.constant(20.0)  
    11.   
    12. with tf.Session(graph=g1) as sess1:  
    13.     print(sess1.run(c1))  
    14. with tf.Session(graph=g2) as sess2:  
    15.     print(sess2.run(c2))

    输出

     

     

    1. 4.0  
    2. 20.0

    对graph的操作大体有三种

     

    1.保存

     


      1. # -*- coding: utf-8 -*-  
      2. import tensorflow as tf  
      3.   
      4. g1 = tf.Graph()  
      5. with g1.as_default():  
      6. # 需要加上名称,在读取pb文件的时候,是通过name和下标来取得对应的tensor的
      7. 'c1')  
      8.   
      9. g2 = tf.Graph()  
      10. with g2.as_default():  
      11.     c2 = tf.constant(20.0)  
      12.   
      13. with tf.Session(graph=g1) as sess1:  
      14.     print(sess1.run(c1))  
      15. with tf.Session(graph=g2) as sess2:  
      16.     print(sess2.run(c2))  
      17.   
      18. # g1的图定义,包含pb的path, pb文件名,是否是文本默认False
      19. tf.train.write_graph(g1.as_graph_def(),'.','graph.pb',False)

       

       

      输出

       



      1. 4.0  
      2. 20.0

      并且在当前文件夹下面生成graph.pb文件

       

       

       

       

       

      2.从pb文件中调用

       

      1. # -*- coding: utf-8 -*-  
      2. import tensorflow as tf  
      3. from tensorflow.python.platform import gfile  
      4.   
      5. #load graph
      6. with gfile.FastGFile("./graph.pb",'rb') as f:  
      7.     graph_def = tf.GraphDef()  
      8.     graph_def.ParseFromString(f.read())  
      9. '')  
      10.   
      11. sess = tf.Session()  
      12. c1_tensor = sess.graph.get_tensor_by_name("c1:0")  
      13. c1 = sess.run(c1_tensor)  
      14. print(c1)

      输出

       

       


      1. 4.0

       

       

       

      3.穿插调用

       

      1. # -*- coding: utf-8 -*-  
      2. import tensorflow as tf  
      3.   
      4. g1 = tf.Graph()  
      5. with g1.as_default():  
      6. # 声明的变量有名称是一个好的习惯,方便以后使用
      7. "c1")  
      8.   
      9. g2 = tf.Graph()  
      10. with g2.as_default():  
      11. "c2")  
      12.   
      13. with tf.Session(graph=g2) as sess1:  
      14. # 通过名称和下标来得到相应的值
      15. "c1:0"], name = '')  
      16.     print(sess1.run(c1_list[0]+c2))

      输出

      
      1. 24.0