目录

前言

  • 矩阵操作是tfboys的基本功之一,本文简单梳理下tf相关的矩阵操作。

定义矩阵

a = tf.constant([[2, 2, 2], [3, 3, 3]], dtype=tf.float32)
b = tf.constant([[1, 1, 1], [2, 2, 2]], dtype=tf.float32)
c = tf.constant([[1, 1], [2, 2], [3, 3]], dtype=tf.float32)
# a =
# [[2. 2. 2.]
# [3. 3. 3.]]
# b =
# [[1. 1. 1.]
# [2. 2. 2.]]
# c =
# [[1. 1.]
# [2. 2.]
# [3. 3.]]

单位矩阵

eye(
    num_rows,
    num_columns=None,
    batch_shape=None,
    dtype=tf.float32,
    name=None
)

# Construct one identity matrix.
tf.eye(2)
==> [[1., 0.],
     [0., 1.]]

# Construct a batch of 3 identity matricies, each 2 x 2.
# batch_identity[i, :, :] is a 2 x 2 identity matrix, i = 0, 1, 2.
batch_identity = tf.eye(2, batch_shape=[3])

# Construct one 2 x 3 "identity" matrix
tf.eye(2, num_columns=3)
==> [[ 1.,  0.,  0.],
     [ 0.,  1.,  0.]]

矩阵相加

tf.add(a, b)
# [[3. 3. 3.]
# [5. 5. 5.]]

矩阵相减

tf. subtract(a, b)
# [[1. 1. 1.]
# [1. 1. 1.]]

矩阵相乘

tf.multiply(a, b)
# [[2. 2. 2.]
# [6. 6. 6.]]

矩阵相除

tf.divide(a, b)
# [[2.  2.  2. ]
# [1.5 1.5 1.5]]

matmul

tf.matmul(a,
b,
transpose_a=False,
transpose_b=False,
adjoint_a=False,
adjoint_b=False,
a_is_sparse=False,
b_is_sparse=False,
name=None)

操作简写

实际上写代码时,为了方便,我们也可以直接使用运算符号:

  • 加法:a+b
  • 减法:a-b
  • 乘法:a*b
  • 除法:a/b

注意:若a是一个tensor,b是一个scalar,则对a里面的每个元素,都执行相同操作(+,-,*,/)scalar

取某一列

input_2 = input[:,:,2]

矩阵转置

tf.transpose(x)