算法工程师修仙之路:TensorFlow(二)

TensorFlow 入门

TensorFlow 数据模型一一张量


张量的概念

  • 张量是 TensorFlow 管理数据的形式,在 TensorFlow程序中,所有的数据都通过张量的形式来表示。

  • 从功能的角度上看,张量可以被简单理解为多维数组。

    • 零阶张量表示标量(scalar),也就是一个数;
    • 一阶张量为向量(vector),也就是一个一维数组;
    • 第 n 阶张量可以理解为一个 n 维数组。
  • 张量在 TensorFlow 中的实现并不是直接采用数组的形式,它只是对TensorFlow 中运算结果的引用。在张量中并没有真正保存数字,它保存的是如何得到这些数字的计算过程。

  • TensorFlow中的张量和 NumPy 中的数组不同,TensorFlow 计算的结果不是一个具体的数字,而且一个张量的结构。一个张量中主要保存了三个属性 : 名字(name)、维度(shape)和类型(type)。

    # 以向量加法为例,当运行如下代码时,并不会得到加法的结果,而会得到对结果的一个引用。
    import tensorflow as tf 
    # tf.constant是一个计算,这个计算的结果为一个张量,保存在变量a中。
    a = tf.constant([1.0, 2.0], name="a")
    b = tf.constant([2.0, 3.0], name="b")
    result = tf.add(a, b, name="add")
    print(result)
    # 输出:Tensor("add:0", shape=(2,), dtype=float32)
    
  • 张量的第一个属性名字不仅是一个张量的唯一标识符,它同样也给出了这个张量是如何计算出来的。

  • TensorFlow 的计算都可以通过计算图 的模型来建立,而计算图上的每一个节点代表了 一个计算,计算的结果就保存在张量之中,所以张量和计算图上节点所代表的计算结果是对应的。

  • 张量的命名可以通过 “node:src_output”的形式来给出。

    • 其中 node 为节点的名称,src一output 表示当前张量来自节点的第几个输出。
    • 比如“ add:0”就说明了 result 这个张量是计算节点“add” 输出的第一个结果(编号从0开始)。
  • 张量的第二个属性是张量的维度(shape)。

    • 这个属性描述了一个张量的维度信息。
    • 比如shape=(2,)说明了张量 result 是一个一维数组,这个数组的长度为2。
  • 张量的第三个属性是类型(type)。

    • 每一个张量会有一个唯一的类型。
    • TensorFlow 会对参与运算的所有张量进行类型的检查,当发现类型不匹配时会报错。
    • 如果不指定类型,TensorFlow 会给出默认的类型,比如不带小数点的数会被默认为 int32,带小数点的会默认为 float32 。
    • 因为使用默认类型有可能会导致潜在的类型不匹配问题,所以一般建议通过指定 dtype 来明确指出变量或者常量的类型。

张量的使用

  • 张量使用主要可以总结为两大类。
    • 第一类用途是对中间计算结果的引用。
      • 当一个计算包含很多中间结果时,使用张量可以大大提高代码的可读性。
      • 当计算的复杂度增加时(比如在构建深层神经网络时)通过张量来引用计算的中间结果可以使代码的可阅读性大大提升。
      • 通过张量来存储中间结果可以方便获取中间结果。比如在卷积神经网络中,卷积层或者池化层有可能改变张量的维度,通过 result.get_shape 函数来获取结果张量的维度信息可以免去人工计算的麻烦。
    • 使用张量的第二类情况是当计算图构造完成之后,张量可以用来获得计算结果,也就是得到真实的数字。
      • 虽然张量本身没有存储具体的数字,但是通过会话,就可以得到这些具体的数字。

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/85869474
今日推荐