参考 Tensorflow一些常用基本概念与函数,这里讲的很全,作者只是记录一些工作中用到了的函数。
参考tensorflow官方手册Tensorflow。
一、获得tensor的shape。
tf.shape(),返回一个列表
import tensorflow as tf
A = tf.random_normal((1,2),seed=1)
B = tf.random_normal((1,3),seed=2)
#想要合并返回一个(1,5)的tensor
C= tf.concat([A,B], 1)
sess = tf.Session()
print(sess.run(tf.shape(C)))
返回的是
[1,5]
########################################################
即使在做coursera作业的时候,获得一个变量的shape,或者给几个维度赋值,通过这个操作来完成。这里的x是一个numpy得到的向量,并不是tensor。
# Retrieve dimensions from shapes of x and parameters['Wy'] (≈2 lines)
n_x, m, T_x = x.shape
n_y, n_a = Wy.shape
二、将两个相同的tensor合并起来
tf.concat([A,B], 1),1代表axis=1
三、one hot
B = tf.one_hot([1,3,5,7,9], 10)
其中10代表向量维数,前面的列表参数,代表会有五个onehot向量返回
[[ 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]
四,求一个向量的二范数
tf.shape(A) = tf.shape(B) = [2,3]
4.1 、norm标准2范数
如果用norm,即,tf.norm的步骤)
- A-B之后得到一个2*3的矩阵C,然后按元素平方tf.shape(C) = [2,3]
- 根据axis的值进行降维运算
比如axis等于1,就是所有列元素相加,然后消去第1轴。此时tf.shape(C) = [2] - 对于上述得到的值,每个元素开根号。
根据上面所述,tf.shape(tensor)得到的是一个列表list_s=[2,3,4]。
说明,tensor的第0轴上有两个向量,第1轴上有3个向量,第2轴上有4个向量。那么,axis等于1,代表对第1轴进行操作。。
比如,tf.shape(A)=[2,3],那么reduce_sum(A,axis = 1).就代表对第1轴进行操作,并消去第1轴,所以完事以后,只有第0轴存在,且有两个向量。
4.2 有时为了反向传播好计算,不开根号
二范数的步骤(只是少了开根号的步骤)
- A-B之后得到一个2*3的矩阵C,然后按元素平方tf.shape(C) = [2,3]
- 根据axis的值进行降维运算
比如axis等于1,就是所有列元素相加,然后消去第1轴。此时tf.shape(C) = [2]
一行代码就可以完成
AB2 = tf.reduce_sum(tf.square(A - B),axis = 1)
接下来是norm与二范数的代码。
import tensorflow as tf
A = tf.Variable(tf.random_normal((2,3),seed = 1))
B = tf.Variable(tf.random_normal((2,3),seed = 3))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
AB1 = tf.norm(A - B, ord=2, axis=1)
AB2 = tf.reduce_sum(tf.square(A - B),axis = 1)
print(sess.run([AB1,A-B]))
print(sess.run([AB2,A-B]))
五、数据类型转换
六、更改tensor的值
更改替换一整个tensor 的值。tf.assign
注意这是对一整个tensor的操作,而且听说对graph也有要求。
如果想实现元素级的操作,更改一个元素的值,还是查找一些切片等方法。
如果想筛选出一整个tensor中大于0.5的树,那么就可以用上述的tf.to_float(x>0.5),那么在整个x中,所有元素大于0.5的都会变成1,小于0.5的都会变成0.
七、生成和一个tensor拥有相同shape,即结构相同的元素均为1的tensor
参考tensorflow如何生成规定shape的元素均为1的矩阵
假设一个tensor1的shape为[2,4],那么利用ones_like函数,将tensor1传给ones_like函数,就可以生成shape相同但元素全为1的tensor2了。
代码:
import tensorflow as tf
import numpy as np
#把numpy用constant常量函数转换成tensor
t1 = tf.constant(np.arange(8))
t1 = tf.reshape(t1,[2,4])
t2 = tf.ones_like(t1)
with tf.Session() as sess:
print('t1:',sess.run(t1))
print('t2:',sess.run(t2))
输出结果:
t1: [[0 1 2 3]
[4 5 6 7]]
t2: [[1 1 1 1]
[1 1 1 1]]
同理,利用zeros_like可以生成元素全为1的shape相同的新tensor。