本文总结了TensorFlow2中常见的张量操作。
张量定义
常量
在TensorFlow中,创建常量的函数主要有tf.constant、tf.zeros、tf.ones、tf.fill。
- tf.constant
1 | tf.constant( |
- tf.zeros:创建一个元素值全为0的张量
1 | tf.zeros( |
示例:
1 | 3, 4], dtype=tf.int32)) print(tf.zeros([ |
- tf.ones:创建一个元素值全为1的张量
1 | tf.ones( |
示例:
1 | 3, 4], dtype=tf.int32)) print(tf.ones([ |
- tf.fill:使用某个值填充张量
1 | tf.fill( |
示例:
1 | 2, 3], 9) tf.fill([ |
变量
在TensorFlow中,如果要创建变量,需要使用类tf.Variable。
1 | tf.Variable([2,2]) |
张量运算
假设$\mathbf{a},\mathbf{b} \in \mathbb{R}^n$
逐元素相加
$$
\mathbf{a} + \mathbf{b} =
\begin{bmatrix}
a_1 + b_1 \\
a_2 + b_2 \\
\vdots\\
a_n + b_n
\end{bmatrix}
$$
tf.add(x,y,name=None)
示例:
1 | print(tf.add(1,2)) |
1 | tf.Tensor(3, shape=(), dtype=int32) |
逐元素相减
$$
\mathbf{a} - \mathbf{b} =
\begin{bmatrix}
a_1 - b_1 \\
a_2 - b_2 \\
\vdots\\
a_n - b_n
\end{bmatrix}
$$
tf.subtract(x, y, name=None)
示例:
1 | print(tf.subtract([1,2],[3,4])) |
逐元素相乘
$$
\mathbf{a} \odot \mathbf{b} =
\begin{bmatrix}
a_1 \times b_1 \\
a_2 \times b_2 \\
\vdots \\
a_n \times b_n
\end{bmatrix}
$$
tf.multiply(x, y, name=None)
示例:
1.使用tf.multiply
1 | 1, 2, 3, 4]) x = tf.constant([ |
2.使用乘号
1 | x * x |
可以看到:对两个张量执行tf.multiply,和直接使用乘号,效果是一样的。
矩阵乘法
$$
\mathbf{A}_{m \times n} \times \mathbf{B}_{n \times k} = \mathbf{C}_{m \times k}
$$
tf.matmul
示例:
1 | a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3]) |
1 | tf.Tensor( |
平方
$$
\mathbf{a} \odot \mathbf{a} =
\begin{bmatrix}
a_1^2 \\
a_2^2 \\
\vdots\\
a_n^2
\end{bmatrix}
$$
tf.square(x,name=None)
示例:
1 | print(tf.square(5)) |
1 | tf.Tensor(25, shape=(), dtype=int32) |
幂操作
tf.pow(x, y, name=None)
指数
tf.exp
逐元素相除
tf.divide(x, y, name=None)
拼接
tf.concat(values, axis, name=’concat’)
- 一维张量
1 | 2) a = tf.ones( |
- 二维张量
1 | 2,2]) a = tf.ones([ |
求和
tf.reduce_sum(input_tensor, axis=None, keepdims=False, name=None)
维度变换
扩展维度
expand_dims
reshape
stack
transpose
Tile
(正在完善中…)
与NumPy N维数组的相互转换
- TensorFlow张量=>NumPy ndarray:使用类tf.Tensor的numpy()方法
1 | 2, 3]) x = tf.ones([ |
- NumPy N维数组=>TensorFlow张量
实战:实现softmax
softmax公式如下:
$$
\mathrm{softmax}(\mathbf{x})_k = \frac{\exp(x_k)}{\sum_{i = 1}^n \exp(x_i)}
$$
首先,使用TensorFlow内置的softmax函数进行计算
1 | 1., 2., 3.], [2., 5., 6.]]) x = tf.constant([[ |
然后,再利用上述张量运算,自己实现softmax,并对比二者的计算结果
1 | exp = tf.exp(x) |