深度学习(10)TensorFlow基础操作六: 数学运算
第四章 TensorFlow基础操作
06 数学运算
Outline
-
-
-
- /
-
-
- **, pow, squre
- sqrt
- //, %
- exp, log
- @, matmul
- linear layer
1. Operation type
(1) element-wise
- {+ - * /}
(2) matrix-wise
- @, matmul
(3) dim-wise
- reduce_mean/max/min/sum
2. + - * / % //
b = tf.fill([2, 2], 2.)
: 2×2的元素都为2的Tensor;
a = tf.ones([2, 2])
: 2×2的元素都为1的Tensor;
(1) a + b
: 2×2的元素都为3的Tensor;
(2) a - b
: 2×2的元素都-1的Tensor;
(3) a * b
: 2×2的元素都为2的Tensor;
(4) a / b
: 2×2的元素都为0.5的Tensor;
(5) b // a
: 整除操作,得到2×2的元素都为2的Tensor;
(6) b % a
: 余除操作,得到2×2的元素都为0的Tensor;
3. tf.math.log & tf.exp
(1) tf.math.log(a)
:
l
o
g
e
a
log_ea
logea,因为
l
o
g
e
1
=
0
log_e1=0
loge1=0,所以得到2×2的元素都为0的Tensor;
(2) tf.exp(a):
e
a
e^a
ea,因为
e
1
=
e
e^1=e
e1=e,而
e
≈
2.7182817
e≈2.7182817
e≈2.7182817,所以得到2×2的元素都为2.7182817的Tensor;
4. log2, log10?
没有这俩API,不过我们可以利用:
l
o
g
a
b
l
o
g
a
c
=
l
o
g
c
b
\frac{log_a b}{log_a c}=log_c b
logaclogab=logcb
→
\to
→
l
o
g
e
b
l
o
g
e
c
=
l
o
g
c
b
\frac{log_e b}{log_e c}=log_c b
logeclogeb=logcb
来计算,如下图所示:
(1) tf.math.log(8.)/tf.math.log(2.)
:
l
o
g
2
8
=
3.0
log_2 8=3.0
log28=3.0;
(2) tf.math.log(100.)/tf.math.log(10.)
:
l
o
g
10
100
=
2.0
log_{10} 100=2.0
log10100=2.0;
5. pow, sqrt
(1) tf.pow(b, 3)
: n次方操作,因为
2
3
=
8
2^3=8
23=8,所以得到2×2的元素都为8的Tensor;
(2)b**3
: 与tf.pow(b, 3)
的作用一样,所以得到2×2的元素都为8的Tensor;
(3) tf.sqrt(b)
: 开方操作,因为
√
2
≈
1.4142135
√2≈1.4142135
√2≈1.4142135,所以得到2×2的元素都为1.4142135的Tensor;
6. @ & matmul
(1) a@b
: 矩阵a与矩阵b相乘,得到2×2的元素都为4的Tensor;
(2) tf.matmul(a, b)
: 作用与a@b
一样;
a = tf.ones([4, 2, 3])
: 可以看成是4个2×3的矩阵元素都为1的Tensor;
a = tf.fill([4, 2, 3], 2.)
: 可以看成是4个2×3的矩阵元素都为2的Tensor;
(3) a@b
: 可以看成是[2, 3]的矩阵和[3, 5]的矩阵相乘,这个操作是可以并行的,我们可以一次并行4个这样的操作,所以得到4个2×5的矩阵,所以其shape=[4, 2, 5];
(4) tf.matmul(a, b)
: 作用与a@b一样;
7. With Broadcasting
(1) bb = tf.broadcast_to(b, [4, 3, 5])
: 使用Broadcasting方法将b.shape由[3, 5]变为[4, 3, 5];
(2) a@bb
: 可以看成是[2, 3]的矩阵和[3, 5]的矩阵相乘,这个操作是可以并行的,我们可以一次并行4个这样的操作,所以得到4个2×5的矩阵,所以其shape=[4, 2, 5];
8. Recap
- y = w ∗ x + b y=w*x+b y=w∗x+b
- Y = X @ W + b Y=X@W+b Y=X@W+b
- [ x 0 0 x 0 1 x 1 0 x 1 1 ] [ w 00 w 01 w 02 w 10 w 11 w 12 ] + [ b 0 , b 1 , b 2 ] → [ y 0 0 y 0 1 y 0 2 y 1 0 y 1 1 y 1 2 ] \begin{bmatrix}x_0^0&x_0^1\\x_1^0&x_1^1\end{bmatrix}\begin{bmatrix}w_{00}&w_{01}&w_{02}\\w_{10}&w_{11}&w_{12}\end{bmatrix}+[b_0,b_1,b_2]\to\begin{bmatrix}y_0^0&y_0^1&y_0^2\\y_1^0&y_1^1&y_1^2 \end{bmatrix} [x00x10x01x11][w00w10w01w11w02w12]+[b0,b1,b2]→[y00y10y01y11y02y12]
- [ b , 2 ] → [ b , 3 ] [b,2]→[b,3] [b,2]→[b,3]
9. Y = X @ W + b Y=X@W+b Y=X@W+b
10. o u t = r e l u ( X @ W + b ) out=relu(X@W+b) out=relu(X@W+b)
参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》