更新时间:
-
2017.5.9 :删掉了大部分琐碎,留下了很重要的东西
-
2019.4.17 迁移到tensorflow 2.x
这个部分的所有示例代码都可以在我的GitHub上面找到:LearningTensorFlow/6.Probability/
一.数学函数tf.math
tensorflow 2.x 简化和统一了常见额数学函数。因为很简单,这里就不展开一个个说了,反正涉及到基本或者复杂的数学运算,尤其是非常用的reduce_xxx
或者segment_xxx
操作都可以找到。
二.随机值tf.random
TensorFlow里面有一些产生带有不同分布的随机tensor的操作。每次被这些操作每次被计算(evaluated)的时候都能够产生一个新的随机值。这里为什么讲这个呢?是因为很多时候对于网络的权重初始化的时候,要是需要随机初始化,这里的函数就非常有用了.
tensorflow 2.x继续统一了和简化了API,这里也不多细讲了,直接去tf.random可以找到。
三.基本形状操作
tf.shape(input,out_type=tf.dtypes.int32,name=None)
作用:
返回一个1维tensor表示input的形状
参数:
input: 输入的tensor
out_type: (可选)输出的类型(int32 or int64), 默认tf.int32
name: 可选,这个操作的名字
tf.size(input, name=None, out_type=tf.int32)
作用:返回一个tensor的size,也即是input的元素数量
参数:
input: 输入的tensor
name: 操作的名字
out_type: 输出的类型 (int32 or int64),默认int32
tf.rank(input, name=None)
作用:返回一个tensor的rank,也可以理解为维度数
参数:
input: 输入的tensor
name: 操作名字
tf.reshape(tensor, shape, name=None)
作用:
改变一个tensor的形状,按照指定的shape返回一个tensor。要是形状的某个分量是特殊值-1,那么就会计算该维度的大小,使得总大小(元素数量)保持不变,特殊的,如果传入的形状是[-1],那么意味着把整个tensor弄平为1维。必须确保变形前和变形之后的总元素个数是相同的。
参数:
tensor: tensor,待被改变形状的tensor
shape: tensor,必须是 int32, int64.决定了输出tensor的形状
name: (可选),操作的名称
如果形状的一个分量是特殊值-1,则计算该维度的大小,以使总大小保持不变。
还有其他的一些函数如下,可以参考官方文档获得更加详细的使用.
tf.squeeze(input, squeeze_dims=None, name=None)
tf.expand_dims(input, dim, name=None)
举个例子:
import tensorflow as tf
#基本形状操作
def basic_shape():
a=tf.constant(value=[[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
print("tf.shape:",tf.shape(a))
print("tf.size:",tf.size(a))
print("tf.rank:",tf.rank(a))
def reshape_ops():
a = tf.constant(value=[[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
print("a:\n",a)
b=tf.reshape(tensor=a,shape=(a.shape[0]*a.shape[1],-1))
print("b:\n",b)
if __name__=="__main__":
basic_shape()
reshape_ops()**
结果:
tf.shape: tf.Tensor([2 2 3], shape=(3,), dtype=int32)
tf.size: tf.Tensor(12, shape=(), dtype=int32)
tf.rank: tf.Tensor(3, shape=(), dtype=int32)
a:
tf.Tensor(
[[[1 1 1]
[2 2 2]]
[[3 3 3]
[4 4 4]]], shape=(2, 2, 3), dtype=int32)
b:
tf.Tensor(
[[1 1 1]
[2 2 2]
[3 3 3]
[4 4 4]], shape=(4, 3), dtype=int32)
因为结果是很简单的,所以这里就不多分析了。
二.操作同时降维
这部分的需求其实是非常大的,我们经常用到,但是函数还是很简单的,目前都已经移动到tf.math
里面去了。可以参考那些名字叫做tf.math.reduce_xxx
的函数。这里就不多说了。