tensorflow20学习_1.docx
《tensorflow20学习_1.docx》由会员分享,可在线阅读,更多相关《tensorflow20学习_1.docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、tensorflow2.0学习1、张量张量的操作主要包括张量的构造操作以及张量的数学运算。张量构造操作诸如张量创立索引切片维度变换合并分割。张量数学运算主要有标量运算向量运算矩阵运算。另外我们会介绍张量运算的播送机制。本篇我们介绍张量的构造操作。创立张量张量创立的许多方法以及numpy中创立array的方法很像。importtensorflowastfimportnumpyasnpatf.constant(1,2,3,dtypetf.float32)tf.print(a)btf.range(1,10,delta2)ctf.linspace(0.0,2*3.14,100)dtf.zeros(3,
2、3)atf.ones(3,3)btf.zeros_like(a,dtypetf.float32)btf.fill(3,2,5)#均匀分布随机tf.random.set_seed(1.0)atf.random.uniform(5,minval0,maxval10)#正态分布随机btf.random.normal(3,3,mean0.0,stddev1.0)#正态分布随机剔除2倍方差以外数据重新生成ctf.random.truncated_normal(5,5),mean0.0,stddev1.0,dtypetf.float32)#特殊矩阵Itf.eye(3,3)#单位矩阵ttf.linalg.d
3、iag(1,2,3)#对角阵索引切片张量的索引切片方式以及numpy几乎是一样的。切片时支持缺省参数以及省略号。对于tf.Variable,可以通过索引以及切片对局部元素进展修改。x1,:.assign(tf.constant(0.0,0.0)对于提取张量的连续子区域可以以使用tf.slice。tf.slice(t,1,0,3,5)此外对于不规那么的切片提取,可以使用tf.gather,tf.gather_nd,tf.boolean_mask。tf.boolean_mask功能最为强大它可以实现tf.gather,tf.gather_nd的功能并且tf.boolean_mask还可以实现布尔索
4、引。假如要通过修改张量的某些元素得到新的张量可以使用tf.wheretf.scatter_nd。#对于不规那么的切片提取,可以使用tf.gather,tf.gather_nd,tf.boolean_mask。#考虑班级成绩册的例子有4个班级每个班级10个学生每个学生7门科目成绩。可以用一个4107的张量来表示。scorestf.random.uniform(4,10,7),minval0,maxval100,dtypetf.int32)#抽取每个班级第0个学生第5个学生第9个学生的全部成绩ptf.gather(scores,0,5,9,axis1)#抽取每个班级第0个学生第5个学生第9个学生的
5、第1门课程第3门课程第6门课程成绩qtf.gather(tf.gather(scores,0,5,9,axis1),1,3,6,axis2)#抽取第0个班级第0个学生第2个班级的第4个学生第3个班级的第6个学生的全部成绩#indices的长度为采样样本的个数每个元素为采样位置的坐标stf.gather_nd(scores,indices(0,0),(2,4),(3,6)#以上tf.gather以及tf.gather_nd的功能可以以用tf.boolean_mask来实现。#抽取每个班级第0个学生第5个学生第9个学生的全部成绩ptf.boolean_mask(scores,True,False,
6、False,False,False,True,False,False,False,True,axis1)#抽取第0个班级第0个学生第2个班级的第4个学生第3个班级的第6个学生的全部成绩stf.boolean_mask(scores,True,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,True,False,False,False,False,False,False,
7、False,False,False,False,False,True,False,False,False)#利用tf.boolean_mask可以实现布尔索引#找到矩阵中小于0的元素ctf.constant(-1,1,-1,2,2,-2,3,-3,3,dtypetf.float32)tf.print(c,n)tf.print(tf.boolean_mask(c,c0),n)tf.print(cc0)#布尔索引为boolean_mask的语法糖形式以上这些方法仅能提取张量的局部元素值但不能更改张量的局部元素值得到新的张量。假如要通过修改张量的局部元素值得到新的张量可以使用tf.where以及tf
8、.scatter_nd。tf.where可以理解为if的张量版本此外它还可以用于找到知足条件的所有元素的位置坐标。tf.scatter_nd的作用以及tf.gather_nd有些相反tf.gather_nd用于采集张量的给定位置的元素而tf.scatter_nd可以将某些值插入到一个给定shape的全0的张量的指定位置处。#找到张量中小于0的元素,将其换成np.nan得到新的张量#tf.where以及np.where作用类似可以理解为if的张量版本ctf.constant(-1,1,-1,2,2,-2,3,-3,3,dtypetf.float32)dtf.where(c0,tf.fill(c.
9、shape,np.nan),c)#假如where只有一个参数将返回所有知足条件的位置坐标indicestf.where(c0)indices#将张量的第0,0以及2,1两个位置元素交换为0得到新的张量dc-tf.scatter_nd(0,0,2,1,c0,0,c2,1,c.shape)#scatter_nd的作用以及gather_nd有些相反#可以将某些值插入到一个给定shape的全0的张量的指定位置处。indicestf.where(c0)tf.scatter_nd(indices,tf.gather_nd(c,indices),c.shape)维度变换相关函数主要有tf.reshape,t
10、f.squeeze,tf.expand_dims,tf.transpose.tf.reshape可以改变张量的形状。tf.squeeze可以减少维度。tf.expand_dims可以增加维度。tf.transpose可以交换维度。tf.reshape可以改变张量的形状但是其本质上不会改变张量元素的存储顺序所以该操作实际上非常迅速并且是可逆的。#改成3,6形状的张量btf.reshape(a,3,6)#改回成1,3,3,2形状的张量ctf.reshape(b,1,3,3,2)假如张量在某个维度上只有一个元素利用tf.squeeze可以消除这个维度。以及tf.reshape相似它本质上不会改变张量
11、元素的存储顺序。张量的各个元素在内存中是线性存储的其一般规律是同一层级中的相邻元素的物理地址也相邻。stf.squeeze(a)dtf.expand_dims(s,axis0)#在第0维插入长度为1的一个维度tf.transpose可以交换张量的维度与tf.reshape不同它会改变张量元素的存储顺序。tf.transpose常用于图片存储格式的变换上。转换成Channel,Height,Width,Batchstf.transpose(a,perm3,1,2,0)合并分割以及numpy类似可以用tf.concat以及tf.stack方法对多个张量进展合并可以用tf.split方法把一个张量分
12、割成多个张量。tf.concat以及tf.stack有略微的区别tf.concat是连接不会增加维度而tf.stack是堆叠会增加维度。atf.constant(1.0,2.0,3.0,4.0)btf.constant(5.0,6.0,7.0,8.0)ctf.constant(9.0,10.0,11.0,12.0)tf.concat(a,b,c,axis0)#shape(6,2)tf.concat(a,b,c,axis1)#shape(2,6)tf.stack(a,b,c)#shape(3,2,2)#tf.stack(a,b,c,axis1)#shape(2,3,2)tf.split是tf.c
13、oncat的逆运算可以指定分割份数平均分割可以以通过指定每份的记录数量进展分割。dtf.split(c,3,axis0)#指定分割份数平均分割shape(2,2)etf.split(c,2,2,2,axis0)#指定每份的记录数量shape(2,2)2、张量的数学运算张量数学运算主要有标量运算向量运算矩阵运算。另外我们会介绍张量运算的播送机制。标量运算加减乘除乘方和三角函数指数对数等常见函数逻辑比拟运算符等都是标量运算符。标量运算符的特点是对张量施行逐元素运算。有些标量运算符对常用的数学运算符进展了重载。并且支持类似numpy的播送特性。许多标量运算符都在tf.math模块下。a*b,ab,a
14、/b,tf.sqrt(a),tf.maximum(a,b)等向量运算只在一个特定轴上运算将一个向量映射到一个标量或另外一个向量。许多向量运算符都以reduce开始。#向量reduceatf.range(1,10)tf.print(tf.reduce_sum(a)tf.print(tf.reduce_mean(a)tf.print(tf.reduce_max(a)tf.print(tf.reduce_min(a)tf.print(tf.reduce_prod(a)#张量指定维度进展reducebtf.reshape(a,(3,3)tf.print(tf.reduce_sum(b,axis1,ke
15、epdimsTrue)#61524tf.print(tf.reduce_sum(b,axis0,keepdimsTrue)#121518#bool类型的reduceptf.constant(True,False,False)qtf.constant(False,False,True)tf.print(tf.reduce_all(p)#0tf.print(tf.reduce_any(q)#1#利用tf.foldr实现tf.reduce_sumstf.foldr(lambdaa,b:ab,tf.range(10)#45#tf.math.top_k可以用于对张量排序利用tf.math.top_k可以
16、在TensorFlow中实现KNN算法atf.constant(1,3,7,5,4,8)values,indicestf.math.top_k(a,3,sortedTrue)#arg最大最小值索引atf.range(1,10)tf.print(tf.argmax(a)tf.print(tf.argmin(a)矩阵运算矩阵必须是二维的。类似tf.constant(1,2,3)这样的不是矩阵。矩阵运算包括矩阵乘法矩阵转置矩阵逆矩阵求迹矩阵范数矩阵行列式矩阵求特征值矩阵分解等运算。除了一些常用的运算外大局部以及矩阵有关的运算都在tf.linalg子包中。#矩阵乘法atf.constant(1,2,3
17、,4)btf.constant(2,0,0,2)ab#等价于tf.matmul(a,b)#矩阵转置atf.constant(1.0,2,3,4)tf.transpose(a)#矩阵逆必须为tf.float32或者tf.double类型atf.constant(1.0,2,3.0,4,dtypetf.float32)tf.linalg.inv(a)#矩阵求traceatf.constant(1.0,2,3,4)tf.linalg.trace(a)#矩阵求范数atf.constant(1.0,2,3,4)tf.linalg.norm(a)#矩阵行列式atf.constant(1.0,2,3,4)t
18、f.linalg.det(a)#矩阵svd分解atf.constant(1.0,2.0,3.0,4.0,dtypetf.float32)v,s,dtf.linalg.svd(a)tf.matmul(tf.matmul(s,tf.linalg.diag(v),d)#利用svd分解可以在TensorFlow中实现主成分分析降维播送机制TensorFlow的播送规那么以及numpy是一样的:1、假如张量的维度不同将维度较小的张量进展扩展直到两个张量的维度都一样。2、假如两个张量在某个维度上的长度是一样的或其中一个张量在该维度上的长度为1那么我们就讲这两个张量在该维度上是相容的。3、假如两个张量在所有
19、维度上都是相容的它们就能使用播送。4、播送之后每个维度的长度将取两个张量在该维度长度的较大值。5、在任何一个维度上假如一个张量的长度为1另一个张量长度大于1那么在该维度上就好似是对第一个张量进展了复制。tf.broadcast_to以显式的方式按照播送机制扩展张量的维度。atf.constant(1,2,3)btf.constant(0,0,0,1,1,1,2,2,2)ba#等价于btf.broadcast_to(a,b.shape)#shape(3,3)tf.broadcast_to(a,b.shape)tf.Tensor:shape(3,3),dtypeint32,numpyarray(1
20、,2,3,1,2,3,1,2,3,dtypeint32)#计算播送后计算结果的形状静态形状TensorShape类型参数tf.broadcast_static_shape(a.shape,b.shape)TensorShape(3,3)#计算播送后计算结果的形状动态形状Tensor类型参数ctf.constant(1,2,3)dtf.constant(1,2,3)tf.broadcast_dynamic_shape(tf.shape(c),tf.shape(d)tf.Tensor:shape(2,),dtypeint32,numpyarray(3,3,dtypeint32)#播送效果cd#等价
21、于tf.broadcast_to(c,3,3)tf.broadcast_to(d,3,3)tf.Tensor:shape(2,2),dtypefloat32,numpyarray(6.5760484,7.8174157,6.8174157,6.4239516,dtypefloat32)3、AutoGraph的使用标准有三种计算图的构建方式静态计算图动态计算图和Autograph。TensorFlow2.0主要使用的是动态计算图以及Autograph。动态计算图易于调试编码效率较高但执行效率偏低。静态计算图执行效率很高但较难调试。而Autograph机制可以将动态图转换成静态计算图兼收执行效率以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- tensorflow20 学习 _1
限制150内