当前位置: 首页 > news >正文

黄渡网站建设汽车维修东莞网站建设

黄渡网站建设,汽车维修东莞网站建设,公司网站域名的设计,刷QQ砖的网站咋做文章目录 一、张量简介与创建1.1 简介1.2 张量的创建 二、张量的操作2.1 张量的拼接与切分2.2 张量索引 三、张量的数学运算 一、张量简介与创建 1.1 简介 1. 张量是一个多维数组#xff0c;它是标量、向量、矩阵的高维拓展。 2. 在张量的定义中#xff0c;方括号用于表示张… 文章目录 一、张量简介与创建1.1 简介1.2 张量的创建 二、张量的操作2.1 张量的拼接与切分2.2 张量索引 三、张量的数学运算 一、张量简介与创建 1.1 简介 1. 张量是一个多维数组它是标量、向量、矩阵的高维拓展。 2. 在张量的定义中方括号用于表示张量的形状。例如torch.tensor([[1, 2, 3], [4, 5, 6]]) 定义了一个2x3的二维张量其中方括号 [[…], […]] 表示该张量有2行3列。 例如torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) 定义了一个2x2x3的三维张量其中方括号 [[[…, …], […, …]], [[…, …], […, …]]] 表示该张量有2个2x3的矩阵。 3. PyTorch中的张量Tensor和数组Array之间存在一些关键区别。尽管它们在许多方面都很相似但在一些重要的方面也有所不同。以下是它们之间的主要区别 底层库PyTorch的张量是基于PyTorch库的而数组通常是基于NumPy库的。这是两者之间的主要区别。动态计算图PyTorch的张量支持动态计算图这意味着可以在运行时动态构建、修改和执行计算图。这使得PyTorch非常适合于构建复杂的神经网络和其他动态计算任务。数组则不支持动态计算图。GPU加速PyTorch的张量可以方便地在CPU和GPU之间移动以便利用GPU加速计算。这使得PyTorch非常适合于大规模数据处理和深度学习任务。数组也可以通过NumPy的库函数在GPU上运行但不如PyTorch方便。自动求导PyTorch的张量支持自动求导功能可以自动计算函数的梯度。这使得PyTorch非常适合于深度学习和优化任务。数组本身不支持自动求导但可以通过NumPy的库函数手动计算梯度。操作和函数PyTorch的张量和NumPy的数组都提供了大量的操作和函数用于执行各种数学运算、统计分析等。然而PyTorch的张量还提供了一些专门用于深度学习的函数和操作如卷积、池化等。 4. 张量中的8个属性 data存储的实际数据是一个多维数组。dtype张量中元素的数据类型如torch.float32、torch.int64等。shape张量的形状表示每个维度的大小。它是一个元组例如(3, 256, 832)。device张量所在的设备可以是CPU或GPU。requires_grad一个布尔值表示是否需要计算梯度。如果设置为True则PyTorch将记录该张量的操作历史以便在反向传播时自动计算梯度。grad张量的梯度形状与data一致。它存储了关于张量的梯度信息用于反向传播和优化。grad_fn创建该张量时所用的函数Function。它记录了创建张量的操作历史是自动求导的关键。is_leaf一个布尔值表示该张量是否是叶子节点。叶子节点是指在计算图中没有依赖其他张量的节点。对于叶子节点反向传播结束时其梯度仍会保存非叶子节点的梯度会被释放以节省内存。 1.2 张量的创建 1. 直接创建 import torch # 定义一个标量张量 x torch.tensor(5) print(x)# 定义一个一维张量向量 y torch.tensor([1, 2, 3, 4, 5]) print(y) # 定义一个二维张量矩阵 z torch.tensor([[1, 2, 3], [4, 5, 6]]) print(z)# 定义一个高维张量 w torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) print(w)2. 依据数值创建 arr np.array([1, 2, 3, 4, 5]) print(arr) x torch.tensor(arr) print(x)3. torch.arange用于创建一个包含等间隔数值的一维张量tensor。注意数值区间是[start, end。 import torch # 创建一个从 0 到 9 的一维张量步长为 1 a torch.arange(0, 10) print(a) # 输出tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # 创建一个从 1 到 10 的一维张量步长为 2 b torch.arange(1, 10, step2) print(b) # 输出tensor([1, 3, 5, 7, 9])4. torch.linspace用于创建一个包含等间隔数值的一维张量tensor。与torch.arange不同的是torch.linspace 指定了序列中数值的个数而不是步长。 import torch # 创建一个从 0 到 1 的一维张量包含 10 个数值 a torch.linspace(0, 1, steps10) print(a) # 输出tensor([0.0000, 0.1111, 0.2222, 0.3333, 0.4444, 0.5556, 0.6667, 0.7778, 0.8889, 1.0000])5. torch.normal用于生成服从正态分布高斯分布的张量。其中每个元素都是从给定均值和标准差的正态分布中随机采样得到的。它可以用于生成随机数、模拟数据等。它的用法是torch.normal(mean, std, size)。 mean正态分布的均值。std正态分布的标准差。size生成张量的形状。 import torch # 生成一个形状为 (3, 3) 的张量服从均值为 0、标准差为 1 的正态分布 a torch.normal(0, 1, size(3, 3)) print(a)#输出如下 tensor([[ 0.6692, -0.6885, -0.3282], [-1.0229, 0.2951, 1.3966], [ 0.2123, -0.6048, 0.9535]])6. torch.randn用于生成服从标准正态分布均值为 0标准差为 1的张量。torch.randn函数返回一个指定形状的张量其中每个元素都是从标准正态分布中随机采样得到的。它可以用于生成随机数、模拟数据等。与torch.normal不同的是torch.randn默认生成的是标准正态分布的张量而torch.normal可以指定均值和标准差。 import torch # 生成一个形状为 (3, 3) 的张量服从标准正态分布 a torch.randn(3, 3) print(a)二、张量的操作 2.1 张量的拼接与切分 1. torch.cat()用于将多个张量按照指定的维度连接成一个新的张量。它的用法是torch.cat(tensors, dim0)。 tensors一个包含多个张量的序列或元组。dim连接的维度默认为 0表示在第 0 维上进行连接。 import torch # 创建两个形状为 (3, 4) 的张量 a torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) b torch.tensor([[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]) # 在第 0 维上连接两个张量 c torch.cat((a, b), dim0) print(c)#输出为 tensor([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]])2. torch.stack()用于将多个张量沿着新的维度进行堆叠。它的用法是torch.stack(seq, dim0)。注意torch.stack()函数要求所有被堆叠的张量的形状必须相同。 将 seq 序列中的每个张量视为一行构建一个新的二维张量即矩阵其中第 i 行对应于第 i 个张量。在指定的 dim 维度上对这些行进行堆叠从而得到一个新的张量。 import torch # 创建两个形状为 (3,) 的张量 a torch.tensor([1, 2, 3]) b torch.tensor([4, 5, 6]) # 在第 0 维上堆叠两个张量 c torch.stack((a, b), dim0) print(c)#输出为 tensor([[1, 2, 3], [4, 5, 6]])3. torch.chunk()用于将张量拆分成多个块。它的用法是torch.chunk(input, chunks, dim0)。 input要拆分的输入张量。chunks拆分后的块数。dim要进行拆分的维度默认为0第 0 维。 函数会将输入张量在指定的维度上均匀拆分成 chunks 个块并返回一个包含这些块的元组。每个块的形状是将输入张量的形状在第 dim 维上分割成 chunks 个相等的部分而得到的。 import torch # 创建一个形状为 (6,) 的张量 x torch.tensor([1, 2, 3, 4, 5, 6]) # 在第 0 维上拆分成 3 个块 chunks torch.chunk(x, 3) # 打印拆分后的块 for i, chunk in enumerate(chunks): print(fChunk {i}: {chunk})#输出为 Chunk 0: tensor([1, 2]) Chunk 1: tensor([3, 4]) Chunk 2: tensor([5, 6])4. torch.split()用于将张量拆分成多个块与torch.chunk()类似。它的用法是torch.split(tensor, split_size, dim0)。 tensor要拆分的输入张量。split_size每个块的大小。dim要进行拆分的维度默认为0第 0 维。 import torch # 创建一个形状为 (8, 3) 的张量 x torch.randn(8, 3) # 在第 0 维上拆分成大小为 2 的块 splits torch.split(x, 2, dim0) # 打印拆分后的块 for i, split in enumerate(splits): print(fSplit {i}: {split.shape})#输出为 Split 0: torch.Size([2, 3]) Split 1: torch.Size([2, 3]) Split 2: torch.Size([2, 3]) Split 3: torch.Size([2, 3])在这个示例中我们创建了一个形状为 (8, 3) 的张量 x。然后我们使用 torch.split(x, 2, dim0) 在第 0 维上将其拆分成大小为 2 的块。最后我们打印了每个块的形状。可以看到输入张量被均匀拆分成了 4 个大小为 (2, 3) 的块。 2.2 张量索引 1. torch.index_select()用于沿着指定维度对张量进行索引。它返回一个新的张量该张量是按照给定的索引从源张量中选择的元素构成的。它的用法是torch.index_select(input, dim, index)。 input源张量即要进行索引操作的张量。dim要进行索引的维度。index包含索引值的张量。索引值必须是非负整数且不超过源张量在指定维度上的大小。 import torch # 创建一个 3x3 的张量 x torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 选择第 0 行索引为 0和第 2 行索引为 2 indices torch.tensor([0, 2]) # 沿着维度 0即行进行索引选择 selected torch.index_select(x, 0, indices) print(selected)#输出为 tensor([[1, 2, 3], [7, 8, 9]])在这个例子中我们首先创建了一个 3x3 的张量 x。然后我们指定要选择的行的索引即第 0 行和第 2 行。最后我们调用torch.index_select()函数指定要索引的维度为 0即行并传入源张量和索引张量。函数返回一个新的张量其中包含了选择的行。 2. torch.masked_select()用于根据掩码张量从源张量中选择元素。它返回一个新的张量(返回值一维张量)该张量包含源张量中对应掩码值为 True 的元素。它的用法是torch.masked_select(input, mask)。 input源张量即要进行选择的张量。mask掩码张量具有与源张量相同的形状并包含布尔值。True 表示选择对应的元素False 表示不选择。 import torch # 创建一个 3x3 的张量 x torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 创建一个掩码张量选择大于 4 的元素 mask x 4 # 根据掩码选择元素 selected torch.masked_select(x, mask) print(selected)#输出为 tensor([5, 6, 7, 8, 9])在这个例子中我们首先创建了一个 3x3 的张量 x。然后我们创建一个掩码张量 mask其中大于 4 的元素被标记为 True。最后我们调用 torch.masked_select() 函数传入源张量和掩码张量。函数返回一个新的张量其中包含了源张量中对应掩码值为 True 的元素。 三、张量的数学运算 1. torch.reshape()用于改变张量的形状。它返回一个新的张量该张量与原始张量共享数据但具有不同的形状。它的用法是torch.reshape(input, shape)。 input要进行形状改变的原始张量。shape新的形状表示为一个整数列表或元组。新的形状必须与原始张量中的元素总数相同。 import torch # 创建一个形状为 [2, 3] 的张量 x torch.tensor([[1, 2, 3], [4, 5, 6]]) # 改变形状为 [3, 2] reshaped torch.reshape(x, [3, 2]) print(reshaped)#输出为 tensor([[1, 2], [3, 4], [5, 6]])在这个例子中我们首先创建了一个形状为 [2, 3] 的张量 x。然后我们调用 torch.reshape() 函数将 x 的形状改变为 [3, 2]。函数返回一个新的张量 reshaped它与 x 共享数据但具有不同的形状。 2. torch.transpose()用于交换张量中的两个维度。它返回一个新的张量其中指定的两个维度互换位置。它的用法是torch.transpose(input, dim0, dim1)。 input要进行维度交换的原始张量。dim0要交换的第一个维度的索引。dim1要交换的第二个维度的索引。 import torch# 创建一个形状为 [2, 3, 4] 的张量 x torch.randn(2, 3, 4) print(x) # 交换第 0 和第 1 个维度 y torch.transpose(x, 0, 1) print(y)print(y.shape) # 输出torch.Size([3, 2, 4])在这个例子中我们首先创建了一个形状为 [2, 3, 4] 的张量 x。然后我们调用 torch.transpose() 函数将 x 中的第 0 和第 1 个维度交换。函数返回一个新的张量 y其中第 0 和第 1 个维度互换位置形状变为 [3, 2, 4]。
http://www.pierceye.com/news/49002/

相关文章:

  • 内容管理系统做网站wordpress跑一亿数据
  • 网站开发建设的步骤网站建设培训西安
  • 备案查询站长之家网站网页设计的组成
  • 登录河北建设厅网站进入不了阿里云企业网站备案
  • 网站体验步骤辽阳建设网站找哪家
  • 网站建设案例教程视频教程做soho要不要注册网站
  • 藁城住房和城乡建设局网站中国前十强企业排名
  • 宁夏建设厅网站官网郑州关键词seo
  • 阿里网站建设彩票网站怎么做ip管理
  • 石家庄网站建设远策科技网站链群怎么做
  • 自己建设一个网站软件php图书管理系统
  • 总结做网站诊断步骤免费的黄冈网站有哪些平台可以聊天呢
  • 金山郑州阳网站建设活动营销
  • 企业网站建设 百度文库免费google账号注册入口
  • 网站搜索引擎友好性分析网站设计h5
  • 网站开发主要有两个阶段网站的建立与运营
  • wordpress文章美化框网站推广优化开发建设
  • 公司建网站多少钱qcjxkd东莞网页设计
  • 潞城网站建设哈尔滨建工建设
  • 最专业的网站建设组织搭建免费网站
  • 建设网站 证件wordpress会员注册管理系统
  • 打开国外网站很慢企业vi形象设计是什么意思
  • 个人网站的前途seo博客网址
  • 家电维修做网站生意怎么样局域网视频网站搭建
  • 网站服务器设置地点建设施工网络平台
  • 个人做的网站有什么危险吗简单大气好记的公司名
  • 做直播网站收费吗百度推广售后
  • 怎样增加网站会员量深圳设计招聘
  • 做网站赚钱还是做app赚钱正规代运营公司
  • 一个域名可以做多少个二级网站宁波网站建设相信荣胜网络