项目2 TensorFlow 2语法基础_第1页
项目2 TensorFlow 2语法基础_第2页
项目2 TensorFlow 2语法基础_第3页
项目2 TensorFlow 2语法基础_第4页
项目2 TensorFlow 2语法基础_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目2TensorFlow2语法基础目录01知识点一:创建张量学习如何使用各种方法创建不同类型的张量02知识点二:张量基本操作探讨张量的类型转换和打乱顺序等基础操作03知识点三:张量维度操作深入学习形状改变、维度增减、拼接、分割等操作知识点一:创建张量学习使用不同方法创建各种类型的张量,包括常量张量、随机张量和序列张量。CHAPTER01任务1:使用tf.constant方法创建张量任务描述使用数值5创建张量。使用数值5创建张量,并使用shape指定其形状为(2,4)。使用列表[[1,2],[3,4]]创建张量,并使用dtype指定其数据类型为float32。使用NumPy数组np.array([1,2])创建张量。知识准备张量(Tensor):多维数组,是TensorFlow中数据的核心表示形式。与Python列表对比:列表元素类型可不同,内存非连续,效率低。与NumPy数组对比:NumPy数组效率高,但无法直接利用GPU加速;而TensorFlow张量可以高效运行在GPU/TPU上。任务1:任务实施代码实现:创建TensorFlow张量#导入库importtensorflowastfimportnumpyasnp#1.数值创建标量re1=tf.constant(value=5)#2.数值创建指定形状张量re2=tf.constant(value=5,shape=(2,4))#3.列表创建浮点张量re3=tf.constant([[1,2],[3,4]],dtype=tf.float32)#4.NumPy数组创建张量re4=tf.constant(np.array([1,2]))控制台输出结果re1:tf.Tensor(5,shape=(),dtype=int32)re2:tf.Tensor([[5555][5555]],shape=(2,4),dtype=int32)re3:tf.Tensor([[1.2.][3.4.]],shape=(2,2),dtype=float32)re4:tf.Tensor([12],shape=(2,),dtype=int32)提示:张量的shape属性表示维度信息,dtype属性表示数据类型,创建时可通过参数指定。任务2:创建张量(tf.convert_to_tensor)任务描述将NumPy数组np.arange(12).reshape(3,4)转换为张量(float32)将列表[[1,2],[3,4]]转换为张量(float32)将数字5转换为张量(float32)将布尔型False转换为张量(float32)知识准备tf.convert_to_tensor方法:用于将各种类型的数据(数组、列表、数字、布尔值等)统一转换为TensorFlow张量。主要参数:value:待转换的输入数据;dtype:指定转换后的目标数据类型。任务2:任务实施1.数据类型转换实现使用tf.convert_to_tensor函数,将NumPy数组、列表、数字及布尔值统一转换为TensorFlow张量格式,实现数据标准化。2.输出结果解析数组/列表转换为对应维度张量;数字转为标量;布尔值False被转换为浮点型0.0,True则转为1.0,符合数值计算规范。importtensorflowastfimportnumpyasnp#数组转张量re1=tf.convert_to_tensor(np.arange(12).reshape(3,4))#列表转张量re2=tf.convert_to_tensor([[1,2],[3,4]])#数字/布尔转张量re3=tf.convert_to_tensor(5)re4=tf.convert_to_tensor(False)图示:tf.convert_to_tensor数据转换代码示例提示:tf.convert_to_tensor是连接原生数据与TensorFlow计算图的核心桥梁,转换时注意数据类型的自动兼容。任务3:创建全0张量和全1张量任务描述创建一个2行4列的全0张量。创建一个2行4列的全1张量。知识准备tf.zeros(shape,dtype):创建指定形状和类型的全0张量。tf.ones(shape,dtype):创建指定形状和类型的全1张量。任务3:任务实施1.张量创建功能使用tf.zeros和tf.ones函数快速创建指定形状的全0或全1张量,常用于神经网络权重初始化。2.核心参数解析shape:定义张量维度(如(2,4)表示2行4列);dtype:指定数据类型(如64)。这两个参数决定了张量的结构。importtensorflowastf#创建一个2行4列的全0张量re1=tf.zeros(shape=(2,4),dtype=64)print(re1)#创建一个2行4列的全1张量re2=tf.ones(shape=(2,4),dtype=64)print(re2)代码示例:创建全0和全1张量提示:tf.zeros和tf.ones是TensorFlow中最基础的张量初始化方法,常用于偏置项初始化或占位符创建。任务4:创建符合正态分布的随机张量任务描述创建形状为(2,4)、均值为0、标准差为1的正态分布随机张量。创建形状为(2,4)、均值为100、标准差为10的正态分布随机张量。创建形状为(2,4)、均值为0、标准差为1的截断式正态分布随机张量。知识准备tf.random.normal(shape,mean,stddev):用于创建服从指定均值和标准差的正态分布随机张量。tf.random.truncated_normal:创建截断式正态分布张量,值限制在均值附近的两个标准差范围内,常用于权重初始化以避免梯度消失。任务4:任务实施1.标准正态分布使用tf.random.normal生成随机张量,数值默认围绕0波动。2.指定均值与标准差通过mean和stddev参数自定义分布中心和离散程度,例如均值100。3.截断式正态分布使用tf.random.truncated_normal限制数值范围在[-2,2]之间,避免极端值。importtensorflowastf#1.标准正态分布re1=tf.random.normal(shape=(2,4))print(re1)#2.指定均值和标准差re2=tf.random.normal(shape=(2,4),mean=100,stddev=10)print(re2)#3.截断式正态分布re3=tf.random.truncated_normal(shape=(2,4))print(re3)任务5:创建均匀分布的随机张量任务描述创建形状为(2,4)、在0到10之间均匀分布的随机张量,默认为float32类型。创建形状为(2,4)、在0到10之间均匀分布的随机张量,指定为int32类型。知识准备tf.random.uniform函数:用于创建在[minval,maxval)区间内均匀分布的随机张量。参数说明:shape定义张量形状;minval/maxval定义数值范围;dtype指定数据类型(浮点型或整型)。任务5:任务实施代码演示:创建均匀分布张量1.浮点均匀分布:re1=tf.random.uniform(shape=(2,4),minval=0,maxval=10)2.整型均匀分布:re2=tf.random.uniform(shape=(2,4),minval=0,maxval=10,dtype=32)输出结果说明re1:生成值在0到10之间的float32类型张量。re2:生成值在0到9之间的int32类型张量(左闭右开区间)。TensorFlow随机数生成UniformDistributionVisualization提示:均匀分布常用于神经网络权重的随机初始化和随机采样场景。任务6:创建序列张量任务描述创建0到9的序列张量。创建2到9的序列张量。创建2到9的序列张量,步长为2。知识准备tf.range(start,limit,delta):创建一个序列张量,生成的值范围是[start,limit),步长为delta。任务6:任务实施代码实现:tf.range生成序列importtensorflowastfre1=tf.range(10)#0-9re2=tf.range(2,10)#2-9re3=tf.range(2,10,2)#2-9,步长2代码解析tf.range是生成数字序列的核心函数。参数灵活,可通过不同的参数组合控制序列的起始、结束和步长。输出结果展示re1:[0123456789]re2:[23456789]re3:[2468]注意:结束值是开区间,生成的序列不包含limit本身。提示:tf.range是构建张量数据的基础工具,常用于生成索引或测试数据。知识点二:张量基本操作学习张量的基本操作,包括数据类型转换、随机打乱和信息获取。CHAPTER02任务7:改变张量中元素的数据类型任务描述创建float32类型的张量re1。将re1转换为float64类型,得到张量re2。知识准备tf.cast(x,dtype):将张量x的数据类型转换为指定的dtype。这在需要不同精度计算或数据类型匹配时非常重要。任务7:任务实施代码展示importtensorflowastf#创建float32张量并转换类型re1=tf.constant(12,dtype=tf.float32)re2=tf.cast(re1,dtype=tf.float64)输出结果re1:tf.Tensor(12.0,shape=(),dtype=float32)re2:tf.Tensor(12.0,shape=(),dtype=float64)代码解析1.导入TensorFlow库:基础操作的前提。2.创建张量:使用tf.constant定义float32类型的标量。3.类型转换:通过tf.cast将数据类型升级为float64,确保数值精度提升且数值不变。说明:数据类型转换在混合精度训练中至关重要提示:tf.cast仅改变数据类型,不会改变张量的数值大小,是保证计算精度的常用手段。任务8:随机打乱张量的顺序任务描述定义一个形状为(4,2)的张量re1。设置随机种子为612,确保结果可复现。打乱张量re1,得到打乱顺序的张量re2。知识准备tf.random.shuffle(value,seed):随机打乱张量的第一维元素,常用于数据洗牌。tf.random.set_seed(seed):设置全局随机种子,以确保实验的可重复性。任务8:任务实施1.代码逻辑解析首先定义一个4行2列的张量,然后设置随机种子以确保结果可复现,最后调用shuffle函数打乱数据顺序。2.关键知识点tf.random.shuffle默认只打乱第一维(行)的元素,每行内部数据保持不变。设置随机种子可保证实验结果的一致性。#定义张量re1=tf.constant([[1,2],[3,4],[5,6],[7,8]])tf.random.set_seed(612)#设置随机种子re2=tf.random.shuffle(re1)#输出结果:re1:[[12][34][56][78]]re2:[[56][34][78][12]]代码实现与运行结果展示提示:设置随机种子是复现实验结果的重要手段,确保每次运行代码都能得到相同的随机打乱顺序。任务9:获取张量的信息任务描述创建形状为(2,3,4)的随机张量re1。获取包含re1形状信息的张量re2。获取包含re1中元素个数的张量re3。获取包含re1维度信息的张量re4。知识准备tf.shape(input):返回一个包含张量形状信息的张量。tf.size(input):返回一个包含张量元素总个数的张量。tf.rank(input):返回一个包含张量维度(阶数)的张量。任务9:任务实施1.代码实现逻辑导入TensorFlow库,创建2×3×4的三维随机张量,分别调用shape、size、rank函数获取张量的形状、元素总数和维度信息。2.输出结果解析re2显示形状为[2,3,4];re3计算得总元素数24(2×3×4);re4显示张量维度为3。这些信息是排查维度不匹配错误的关键。importtensorflowastf#创建2x3x4的三维张量re1=tf.random.normal(shape=(2,3,4))#获取形状、元素数、维度re2=tf.shape(re1)re3=tf.size(re1)re4=tf.rank(re1)print(re2,re3,re4)图示:TensorFlow张量属性获取代码示例提示:tf.shape返回的是张量对象而非普通列表,其值反映原张量各维度大小,调试时需注意数据类型。知识点三:张量维度操作学习张量的维度变换操作,包括改变形状、增减维度、交换维度、拼接、分割、堆叠和分解。CHAPTER03任务10:改变张量的形状任务描述创建形状为(8,)的张量re1。将re1的形状改变为(2,4),得到张量re2。知识准备tf.reshape(tensor,shape):改变张量的形状。改变前后的元素总数必须保持一致,否则会报错。这只是改变了数据的组织方式,并未改变数据在内存中的存储顺序。任务10:任务实施1.创建一维张量使用tf.range(8)创建一个包含8个元素的一维张量,作为数据输入基础。2.执行形状重塑调用tf.reshape函数,将一维张量转换为2行4列的二维张量。注意新形状元素总数需与原张量一致。importtensorflowastf#创建形状为(8,)的张量re1=tf.range(8)print(re1)#[01234567]#将形状改变为(2,4)re2=tf.reshape(re1,(2,4))print(re2)#[[0123][4567]]代码示例:TensorFlow张量形状变换提示:tf.reshape不会改变数据的存储顺序,仅改变视图。常用于将展平数据恢复为图像格式(如784->28x28)。任务11:增加张量的维度任务描述创建一维张量re1,在不同轴上增加维度。创建二维张量re5,在不同轴上增加维度。知识准备张量的轴(Axis):维度即轴的个数。轴索引从0开始(正数)或从-1开始(负数,代表最后一维)。tf.expand_dims:在指定轴上增加长度为1的维度。任务11:任务实施代码展示:维度扩展操作importtensorflowastf#一维张量增加维度re1=tf.range(5)re2=tf.expand_dims(re1,0)#shape(1,5)re3=tf.expand_dims(re1,1)#shape(5,1)#二维张量增加维度同理...输出结果说明代码展示了对一维和二维张量在不同轴上增加维度后的形状变化,验证了expand_dims函数的效果。核心概念:维度扩展在深度学习中,我们经常需要调整张量的形状以匹配模型输入要求。tf.expand_dims函数用于在指定轴(axis)上增加一个维度,这对于将标量转为向量、向量转为矩阵等操作非常关键。图示:维度扩展逻辑示意提示:维度增加不改变数据本身,只改变数据的组织方式和视图。任务12:删除张量的维度-任务描述与知识准备任务描述创建形状为(1,2,1,3)的随机张量re1。在re1的0轴上删除一个维度,得到re2。在re1的2轴上删除一个维度,得到re3。知识准备tf.squeeze(input,axis):删除张量中所有长度为1的维度,或删除指定轴上长度为1的维度。这是tf.expand_dims的逆操作。任务12:任务实施-tf.squeeze维度删除1.创建四维张量使用tf.random.normal创建形状为(1,2,1,3)的四维张量,其中包含两个长度为1的冗余维度。2.维度删除操作通过指定axis参数删除特定的长度为1的维度;若不指定axis,则自动删除所有长度为1的维度,简化张量结构。importtensorflowastf#创建形状为(1,2,1,3)的张量re1=tf.random.normal(shape=(1,2,1,3))print(re1.shape)#(1,2,1,3)#删除0轴维度re2=tf.squeeze(re1,axis=0)#(2,1,3)#删除所有长度为1的维度re4=tf.squeeze(re1)#(2,3)代码:tf.squeeze维度删除示例提示:tf.squeeze仅能删除长度为1的维度,若尝试删除长度大于1的维度会引发错误。任务13:交换张量的维度任务描述创建形状为(2,3)的随机张量re1。对re1进行交换维度操作:交换0轴和1轴的维度。知识准备tf.transpose(a,perm):用于交换张量的维度。参数perm是一个列表,指定了新维度的排列顺序。对于二维张量,perm=[1,0]就是矩阵的转置。任务13:任务实施1.代码逻辑解析首先固定随机种子确保可复现,生成2x3的随机张量,然后使用tf.transpose进行维度转置操作。2.预期输出结果re1:shape=(2,3)的张量。re2:shape=(3,2)的张量,是re1的转置。importtensorflowastftf.random.set_seed(8)re1=tf.random.normal(shape=(2,3))print(re1)#交换0轴和1轴的维度(矩阵转置)re2=tf.transpose(re1,[1,0])print(re2)代码:张量转置操作示例提示:tf.transpose的perm参数定义了新维度的顺序,对于图像处理常用perm=[0,3,1,2]。任务14:张量的拼接操作任务描述创建两个形状为(2,3)的随机张量re1和re2。将re1和re2在0轴进行拼接,得到张量re3。将re1和re2在1轴进行拼接,得到张量re4。知识准备tf.concat(values,axis):将多个张量在指定的轴上进行拼接。拼接时,除了拼接轴外,其他轴的形状必须完全相同。任务14:任务实施1.代码实现:张量拼接importtensorflowastftf.random.set_seed(8)re1,re2=tf.random.normal((2,3)),tf.random.normal((2,3))re3=tf.concat([re1,re2],axis=0)#垂直堆叠re4=tf.concat([re1,re2],axis=1)#水平拼接2.输出结果分析•re3:形状为(4,3),是按行拼接的结果。•re4:形状为(2,6),是按列拼接的结果。核心知识点解析1.拼接维度(axis):决定了张量是按行(axis=0)还是按列(axis=1)进行扩展。2.形状兼容性:参与拼接的张量在非拼接轴上的形状必须完全一致。例如,在axis=0拼接时,列数必须相同。3.常用场景:数据预处理阶段合并特征、网络层输出的多分支融合等。提示:若张量形状不匹配(如尝试将(2,3)和(3,2)在axis=0拼接),TensorFlow会抛出ValueError异常。任务15:张量的分割操作任务描述创建形状为(2,4)的随机张量re1。将re1在0轴和1轴上等分分割。将re1在1轴上按1:3的比例不等分分割。知识准备tf.split函数:将一个张量在指定轴上分割成多个张量。参数num_or_size_splits可以是整数(表示等分)或列表(表示按长度分割)。任务15:任务实施1.代码逻辑解析代码展示了三种张量分割方式:0轴等分、1轴等分以及按长度列表分割。使用tf.split实现高效数据切分。2.分割结果输出re11,re12:形状均为(1,4)

re13,re14:形状均为(2,2)

re15:(2,1);re16:(2,3)importtensorflowastftf.random.set_seed(8)re1=tf.random.normal(shape=(2,4))#在0轴上等分分割为2份re11,re12=tf.split(re1,2,axis=0)#在1轴上等分分割为2份re13,re14=tf.split(re1,2,axis=1)#在1轴上按[1,3]的长度分割re15,re16=tf.split(re1,[1,3],1)图示:TensorFlow张量分割代码示例提示:分割操作在需要将一个大的批次数据拆分成小批次进行处理时非常有用。任务16:张量的堆叠操作任务描述创建两个形状为(2,3)的随机张量re1和re2。在0轴、1轴、2轴上分别对re1和re2进行堆叠操作。知识准备tf.stack函数:将多个张量堆叠起来,创建一个新的维度。堆叠要求所有张量的形状完全相同。与concat的区

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论