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}