tensorflow学习笔记(2)-常用运算函数

tf.slice(input_,begin,size)

slice常翻译成切片,这个翻译不好。用”片段”,“截断”更准确,因为这儿是“部分”的意思。我们知道,在python中slice表示取list,tuple的一部分。比如可以将list当做一个循环队列,arr[1:9:-1]是取arr 下标2-9的部分,而且是倒序。
而tensorflow中的slice同样是从一个张量中取其中一块。
其中begin[i]的值是第i维度的起始index,size[i]的值是从begin[i]取多少位。如果size[i]=-1则该维度全都保留
size[i] = input.dim_size(i) - begin[i]

>>>t =
 tf.constant([[[1, 1, 1], [2, 2, 2]],
                    [[3, 3, 3], [4, 4, 4]],
                    [[5, 5, 5], [6, 6, 6]]])
>>>tf.slice(t, [1, 0, 0], [2, 1, 3])

[[[3, 3, 3]],
[[5, 5, 5]]]

从第零维度的第2位开始取2个(也就是3x3x:张量的右下方2x2x:矩阵)一维的第1位开始取1个(2x2矩阵进一步限制为只能取2x1x:),第三维从0取到3,所以最终部分如上代码。

tf.tile(A, repeats)

将数组/张量沿着repeats所代表的轴复制对应的次数。比如

>>>a = np.array([0, 1, 2])
>>>np.tile(a, 2)#沿着第1维度复制2次
array([0, 1, 2, 0, 1, 2])
>>>np.tile(a, (2, 2))#沿着第12维度复制2次
array([[0, 1, 2, 0, 1, 2],[0, 1, 2, 0, 1, 2]])
>>> np.tile(a, (2, 1, 2))
array([[[0, 1, 2, 0, 1, 2]],
       [[0, 1, 2, 0, 1, 2]]])

tf.concat(A, axis)

沿着axis将列表A中的张量串接起来。

t1 = [[1, 2, 3], [4, 5, 6]]  
t2 = [[7, 8, 9], [10, 11, 12]]  
tf.concat(0, [t1, t2]) == > [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]  
#如果是两个一维的张量,
#1.则需要用expand_dims来扩充维度
t1=tf.constant([1,2,3])  
t2=tf.constant([4,5,6])  
#concated = tf.concat(1, [t1,t2])这样会报错  
t1=tf.expand_dims(tf.constant([1,2,3]),1)  
t2=tf.expand_dims(tf.constant([4,5,6]),1)  
concated = tf.concat(1, [t1,t2])#这样就是正确的  
#2.或者tf.stack
Stacks a list of rank-R tensors into one rank-(R+1) tensor
# 'x' is [1, 4]
# 'y' is [2, 5]
# 'z' is [3, 6]
stack([x, y, z], axis=1) => [[1, 2, 3], [4, 5, 6]]

tf.reduce_*系列

该系列是tensorflow的加(*sum)乘(*prod),以及求最大值:*max
平均值:*mean
理解这些函数有理可寻。
它们都是既可以沿着某一维度做以上乘等操作用,也可以对所有元素都进行以上操作。
近乎相同的参数:(input_tensor, axis=None,
keep_dims=False,
name=None
reduction_indices=None
)
keep_dims为True时,结果保留成一个1x1的向量,为False时,否则就成为Vector或Scalar.
每次运算,input_tensor中与axis对应的轴减1.也就是如果axis是一个list的话,它对应的轴都会消失。

tf.squeeze(input, axis=None)

squeeze的意思是紧握(squeeze his hand),压榨(squeeze the orange)。在这里表示将所有维度中size为1的维度全部去除,也就是降下无用的维度。比如一个tensor A的shape是1,3,1,2,那么tf.squeeze(A)后A的大小为3,2。如果不希望所有维度中size为1的被消除,则可以用axis指定。

猜你喜欢

转载自blog.csdn.net/kevin_cc98/article/details/79566188