• TensorFlow 1+1

    TensorFlow 1+1

    我们可以先简单地将TensorFlow视为一个科学计算库(类似于Python下的NumPy)。

    首先,我们导入TensorFlow:

    1. import tensorflow as tf

    警告

    本手册基于TensorFlow的Eager Execution模式。在TensorFlow 1.X版本中, 必须 在导入TensorFlow库后调用 tf.enable_eager_execution() 函数以启用Eager Execution模式。在TensorFlow 2.0版本中,Eager Execution模式将成为默认模式,无需额外调用 tf.enable_eager_execution() 函数(不过若要关闭Eager Execution,则需调用 tf.compat.v1.disable_eager_execution() 函数)。

    TensorFlow使用 张量 (Tensor)作为数据的基本单位。TensorFlow的张量在概念上等同于多维数组,我们可以使用它来描述数学中的标量(0维数组)、向量(1维数组)、矩阵(2维数组)等各种量,示例如下:

    1. # 定义一个随机数(标量)
    2. random_float = tf.random.uniform(shape=())
    3.  
    4. # 定义一个有2个元素的零向量
    5. zero_vector = tf.zeros(shape=(2))
    6.  
    7. # 定义两个2×2的常量矩阵
    8. A = tf.constant([[1., 2.], [3., 4.]])
    9. B = tf.constant([[5., 6.], [7., 8.]])

    张量的重要属性是其形状、类型和值。可以通过张量的 shapedtype 属性和 numpy() 方法获得。例如:

    1. # 查看矩阵A的形状、类型和值
    2. print(A.shape) # 输出(2, 2),即矩阵的长和宽均为2
    3. print(A.dtype) # 输出<dtype: 'float32'>
    4. print(A.numpy()) # 输出[[1. 2.]
    5. # [3. 4.]]

    小技巧

    TensorFlow的大多数API函数会根据输入的值自动推断张量中元素的类型(一般默认为 tf.float32 )。不过你也可以通过加入 dtype 参数来自行指定类型,例如 zero_vector = tf.zeros(shape=(2), dtype=tf.int32) 将使得张量中的元素类型均为整数。张量的 numpy() 方法是将张量的值转换为一个NumPy数组。

    TensorFlow里有大量的 操作 (Operation),使得我们可以将已有的张量进行运算后得到新的张量。示例如下:

    1. C = tf.add(A, B) # 计算矩阵A和B的和
    2. D = tf.matmul(A, B) # 计算矩阵A和B的乘积

    操作完成后, CD 的值分别为:

    1. tf.Tensor(
    2. [[ 6. 8.]
    3. [10. 12.]], shape=(2, 2), dtype=float32)
    4. tf.Tensor(
    5. [[19. 22.]
    6. [43. 50.]], shape=(2, 2), dtype=float32)

    可见,我们成功使用 tf.add() 操作计算出 \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} + \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} = \begin{bmatrix} 6 & 8 \\ 10 & 12 \end{bmatrix},使用 tf.matmul() 操作计算出 \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} \times \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} = \begin{bmatrix} 19 & 22 \\43 & 50 \end{bmatrix}