TF低阶API的操作及使用
最近有些事情耽误学习进度,想到之前挖的前后端的坑都没填完,烦烦烦! 这篇文章写的太水了,基本就是巩固一下记忆
1.创建张量及计算
import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='1' # 一些基本的创建张量方法 # 创建常量 a=tf.constant([1.,2,3]) print(a) # 创建一个列表,delta控制步长,默认为1 b=tf.range(1,10) print(b) # 创建一个等距列表 c=tf.linspace(0.,1.,10) print(c) # 创建一个全0,全1的矩阵 d=tf.zeros([1,2]) e=tf.ones([1,2]) print(d,e) # 用一个值填充矩阵 f=tf.fill([2,2],6) print(f) # 单位矩阵、对角矩阵 g=tf.eye(2,2) h=tf.linalg.diag([6,6,6]) print(g,h) #### 切片操作 # 和numpy pandas类似,以逗号为分隔,前面是行,后面是列 tf.random.set_seed(0) ran_matrix=tf.random.uniform([5,5],minval=0,maxval=10,dtype=tf.int32) tf.print(ran_matrix) ## 取第一行 tf.print(ran_matrix[0]) ## 取最后一行 tf.print(ran_matrix[-1]) ## 取最后一列 tf.print(ran_matrix[:,-1]) ## 取前三行前两列 tf.print(ran_matrix[:3,:2]) ## 取前四行每隔一列取一列 tf.print(ran_matrix[:4,::2]) # 一些函数用法 ### 参考https://shelgi.blog.csdn.net/article/details/103083463 复制代码
2. 张量的计算
import tensorflow as tf import numpy as np import os os.environ['TF_CPP_MIN_LOG_LEVEL']='1' # 两个矩阵对应位置元素相加 a=tf.constant([[1.,2.],[-3.,4.]]) b=tf.constant([[5.,6.],[-7.,8.]]) tf.print(a+b) ## 两个矩阵相减,对应位置元素相减 tf.print(a-b) ## 两个矩阵对应位置元素相乘 tf.print(a*b) ## 两个矩阵矩阵乘法 tf.print(a@b,tf.matmul(a,b)) ## 两个矩阵对应位置元素相除 tf.print(a/b) ## 矩阵对应位置元素n次方 tf.print(a**3) ## 两个矩阵对应位置的最大值 tf.print(tf.maximum(a,b)) ## 两个矩阵对应位置的最小值 tf.print(tf.minimum(a,b)) ### 四舍五入 tf.math.round() ### 向下取整 tf.math.floor() ### 向上取整 tf.math.ceil() ### 裁剪,保留规定区间内的数 x=tf.constant([0.1,0.2,0.5,1.2,2.3,20.,-3.]) y=tf.clip_by_value(x,clip_value_min=1,clip_value_max=10) ## 针对L2范数进行剪裁阈值 clip_norm: 裁剪阈值,l2norm(t) > clip_norm 进行梯度裁剪,裁剪方式:t * clip_norm / l2norm(t) z=tf.clip_by_norm(x,clip_norm=3) tf.print(y) tf.print(z) ## 矩阵转置 tf.print(tf.transpose(a)) ## 矩阵求逆 伪逆是pinv() tf.print(tf.linalg.inv(a)) ## 矩阵的迹 tf.print(tf.linalg.trace(a)) ## 矩阵的范数 tf.print("范数") tf.print(tf.linalg.norm(a,ord=1)) tf.print(tf.linalg.norm(a)) ## 矩阵的行列式 tf.print(tf.linalg.det(a)) ## 矩阵的特征值 a1=tf.constant([[3.,2],[2,4]]) tf.print(a1) e,v=tf.linalg.eigh(a1) tf.print(e,v) tf.print(a1@tf.reshape(v[:,0],(2,1))) tf.print(e[0]*tf.reshape(v[:,0],(2,1))) tf.print(a1@tf.reshape(v[:,0],(2,1))-e[0]*tf.reshape(v[:,0],(2,1))) tf.print("=============================================") e,v=np.linalg.eigh(a1) tf.print(e,v) tf.print(np.dot(a1,v[:,0])-e[0]*v[:,0]) tf.print("+================================") ## 矩阵的QR分解 ## https://zhuanlan.zhihu.com/p/112327923 q,r=tf.linalg.qr(a) tf.print(q,r) tf.print(q@tf.transpose(q)) tf.print(q@r) ### SVD分解 ### diag转为对角矩阵 v,s,d=tf.linalg.svd(a) tf.print(s@tf.linalg.diag(v)@d) tf.print("=========================================================") ## 对一列向量进行操作 ran=tf.range(1,10) tf.print(ran) ### 对一列进行求和、平均、内部元素乘法 tf.print(tf.reduce_sum(ran),tf.reduce_mean(ran),tf.reduce_prod(ran)) ### 对一列进行自定义函数操作,l/r代表从左往右还是从右往左 tf.print(tf.foldl(lambda a,b:a-b,ran[0:5]),tf.foldr(lambda a,b:a-b,ran[0:5])) ### 累加及累乘 tf.print(tf.cumsum(ran),tf.math.cumprod(ran)) ### 对张量排序 tf.print(tf.sort(ran)) v,index=tf.math.top_k(ran,2) tf.print(index,v) aa = tf.constant([1,2,3]) bb = tf.constant([[0,0,0],[1,1,1],[2,2,2]]) tf.print(aa+bb) cc=tf.constant([[1],[2],[3]]) tf.print(aa+cc) tf.print(bb+cc) 复制代码
这是最后广播的结果