本篇博客记录tensorflow在数学公式表达中常用的操作。
tf.multiply
element-wise 乘法 $\bigodot $
1 | import tensorflow as tf |
1 | array([[ 0, 1, 4, 9, 16], |
tf.reduce_sum
求和 $\sum$
1 | m1 = tf.reshape(tf.range(15), [3,5]) |
1 | array([[ 0, 1, 2, 3, 4], |
1 | sess.run(tf.reduce_sum(m1)) |
1 | 105 |
1 | sess.run(tf.reduce_sum(m1, 1)) # 指定求和的维度 |
1 | array([10, 35, 60], dtype=int32) |
1 | tf.reduce_sum(m1, 1).get_shape() |
1 | TensorShape([Dimension(3)]) |
tf.reduce_mean
求平均 $\frac{\sum_{i=1}^n{x_i}}{n}$
1 | sess.run(tf.reduce_mean(m1, 1)) |
1 | array([ 2, 7, 12], dtype=int32) |
tf.equal
判断是否相等,返回bool的tensor。
1 | x = tf.placeholder(tf.float32, [5]) |
1 | array([ True, True, True, True, True], dtype=bool) |
1 | w = tf.cast(z, tf.int32) |
1 | array([ 0, 1065353216, 1065353216, 1065353216, 0], dtype=int32) |
tf.nn.top_k
返回最后一维的前k个最大的数值,最小可以考虑加个负号。
tf.nn.top_k(input, k=1, sorted=True, name=None)
返回的是:(values, indices)。
1 | top_k_values = tf.nn.top_k(y, 4, sorted=True)[0] # 返回y中前k大的值 |
1 | [ 2. 1. 1. 0.] |
tensorflow中暂时没有排序的功能,可以使用top_k做一个ugly的替代。
tf.unique
去掉重复的值,返回原序的独一无二的版本。
返回的是:(y, idx)
1 | v = tf.placeholder(tf.float32, [5]) |
1 | [array([ 3., 8., 7., 1.], dtype=float32), array([0, 1, 2, 2, 3], dtype=int32)] |
tf.diag
根据对角向量获取一个对角矩阵。
1 | v = tf.range(5) |
1 | array([[0, 0, 0, 0, 0], |
tf.diag_part
tf.diag
的逆操作,获取一个矩阵的对角向量。
1 | v_ = tf.diag_part(m) |
1 | array([0, 1, 2, 3, 4], dtype=int32) |
tf.truncated_normal
产生随机数矩阵(正态分布)。
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
1 | t = tf.truncated_normal([2,3]) |
1 | array([[ -1.71465219e+38, -1.71465219e+38, -1.71465219e+38], |
tf.nn.l2_normalize
L2正则, $||x||_2$
tf.nn.l2_normalize(x, dim, epsilon=1e-12, name=None)
1 | x = tf.cast(tf.reshape(tf.range(50), [10,5]), tf.float32) |
1 | array([[ 0.00000000e+00, 1.40129846e-45, 2.80259693e-45, |