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

淄博企业做网站班级优化大师怎么用

淄博企业做网站,班级优化大师怎么用,深圳建筑工程网,徐州网站建设哪家专业torch 是 PyTorch 库的核心模块#xff0c;提供了以下关键功能#xff1a; 张量#xff08;Tensor#xff09;#xff1a;类似于 NumPy 的 ndarray#xff0c;但可以无缝地在 CPU 或 GPU 上运行#xff0c;并且支持自动微分#xff0c;是深度学习模型中数据的主要表示形…torch 是 PyTorch 库的核心模块提供了以下关键功能 张量Tensor类似于 NumPy 的 ndarray但可以无缝地在 CPU 或 GPU 上运行并且支持自动微分是深度学习模型中数据的主要表示形式。 数学运算包括基本的数学运算符重载如加减乘除、矩阵运算如矩阵乘法、点积、卷积、统计函数如求和、平均值、最大值、最小值等以及更复杂的数学操作。 数据类型转换允许用户创建不同数据类型的张量例如 float, double, int8, bool 等并进行数据类型的相互转换。 随机数生成提供了一系列方法用于生成符合不同分布如均匀分布、正态分布、泊松分布等的随机张量。 线性代数运算包括矩阵分解如 SVD、LU、QR 分解、特征值与特征向量计算、矩阵逆、伪逆以及其他相关的线性代数操作。 自动微分通过 autograd 子模块实现允许张量上的操作自动生成梯度为训练神经网络提供便利。 存储和序列化支持将张量保存到磁盘以及从磁盘加载同时还能序列化和反序列化整个模型结构及其参数。 多GPU支持能够将计算任务分配到多个GPU上进行并行处理提高计算效率。 神经网络层与优化器虽然这些不是 torch 模块的一部分但 PyTorch 中的 torch.nn 和 torch.optim 模块分别提供了构建和训练神经网络所需的层组件及优化算法。 1.  张量Tensor 在 PyTorch 中张量Tensor是其核心数据结构之一它类似于 NumPy 的 ndarray但具备更多特性尤其是支持 GPU 加速和自动微分。以下是 torch.Tensor 的详细介绍 定义与创建 张量可以表示多维数组支持多种数据类型包括浮点数、整数、布尔值等。创建张量的常见方法有 Python 1import torch 2 3# 直接从数据创建张量 4x torch.tensor([1, 2, 3]) # 一维张量 5y torch.tensor([[1, 2], [3, 4]]) # 二维张量 6 7# 根据现有张量或 Python 列表创建 8z torch.from_numpy(np.array([1, 2, 3])) # 从 NumPy 数组创建 9a torch.zeros(3, 4) # 创建全零张量 10b torch.ones_like(x) # 创建与给定张量形状相同且元素为1的张量 11c torch.randn(5, 6) # 创建服从正态分布的随机张量 12 13# 指定设备CPU 或 GPU 14if torch.cuda.is_available(): 15 device torch.device(cuda) 16 d torch.tensor([1, 2, 3], devicedevice) # 创建在 GPU 上的张量 属性 张量的维度可以通过 .shape 或 .size() 获取。数据类型可通过 .dtype 查看。存储位置设备通过 .device 获取。 操作 张量支持丰富的数学运算包括但不限于加法、减法、乘法、矩阵乘法、点积、求和、平均、最大值/最小值、指数、对数、索引访问、切片等。可以进行广播机制下的运算类似 NumPy。 动态特性 PyTorch 张量具有动态形状可以在运行时修改张量的大小和形状例如使用 torch.view() 或 torch.reshape()。 自动微分 当一个张量的 requires_grad 属性设置为 True 时它会记录在其上的所有运算形成一个计算图。调用 .backward() 方法时会根据链式法则自动生成并累积梯度。 存储和序列化 张量可以通过 torch.save() 和 torch.load() 进行持久化存储和加载。使用 torch.jit.script 或 torch.onnx.export 可将包含张量和运算的模型转换为可执行文件或ONNX格式便于部署和跨平台使用。 与其他库集成 与 NumPy 的无缝交互可以直接将张量转换为 NumPy 数组并反之亦然。 总之torch.Tensor 是 PyTorch 库中的基石提供了构建和训练深度学习模型所需的数据容器和高效计算环境。 2. 数学运算 在 PyTorch 中torch 模块提供了丰富的数学运算功能这些运算可以应用于 torch.Tensor 对象。以下是 torch 模块中部分关键的数学运算 基本数学运算 加法a b 或 torch.add(a, b)减法a - b 或 torch.sub(a, b)乘法元素级a * b 或 torch.mul(a, b)除法元素级a / b 或 torch.div(a, b)幂运算元素级a ** b 或 torch.pow(a, b)点积内积对于向量 a 和 b使用 torch.dot(a, b) 或 (a * b).sum(dim-1)矩阵乘法torch.mm(a, b) 或 torch.matmul(a, b) (支持广播和多维张量) 聚合操作 求和a.sum(dim...) 计算指定维度上的和平均值a.mean(dim...)最大值和最小值a.max(dim...) 和 a.min(dim...)标准差和方差a.std(dim...) 和 a.var(dim...) 指数与对数运算 自然指数torch.exp(x)自然对数torch.log(x)常用对数torch.log10(x) 比较运算 大于、小于、等于等比较操作符a b, a b, a b返回的是布尔张量。 索引和切片 类似 NumPy 的索引操作a[indices]切片操作a[:, start:end:step] 矩阵运算 矩阵求逆torch.inverse(matrix)矩阵转置matrix.T 或者 torch.t(matrix)QR 分解torch.qr(matrix)SVD 分解torch.svd(matrix)Cholesky 分解torch.cholesky(matrix)LU 分解torch.lu(matrix) 随机数生成 正态分布torch.randn(size(...))均匀分布torch.rand(size(...))其他分布例如泊松分布 (torch.poisson(lamda, size(...))) 和伯努利分布 (torch.bernoulli(probs, size(...))) 线性代数运算 行列式torch.det(matrix)解线性系统torch.solve(b, A)范数计算torch.norm(tensor, pNone, dimNone, keepdimFalse, outNone) 所有这些数学运算都支持自动微分并且能够灵活地在 CPU 或 GPU 上运行。此外如果涉及到的数据分布在多个设备上还可以进行跨设备的运算。 3. 数据类型转换 在 PyTorch 中数据类型转换是通过 torch.Tensor 类的方法或直接使用 torch.*Tensor 构造函数来实现的。以下是一些详细的数据类型转换方法 通过构造函数转换 当你创建一个新的张量时可以通过指定其数据类型来完成转换。 Python 1# 创建一个浮点型张量并转换为整型 2float_tensor torch.tensor([1.23, 4.56], dtypetorch.float32) 3int_tensor torch.tensor(float_tensor, dtypetorch.int32) 4 5# 直接创建特定类型张量 6long_tensor torch.tensor([1, 2, 3], dtypetorch.long) 通过 .to() 方法转换 张量上的 .to() 方法可以用于改变现有张量的数据类型并可以选择将其移动到不同的设备如CPU或GPU上。 Python 1float_tensor torch.tensor([1.0, 2.0]) 2int_tensor float_tensor.to(torch.int32) # 只改变数据类型 3cuda_int_tensor float_tensor.to(torch.device(cuda), dtypetorch.int32) # 改变设备和数据类型 使用 .type() 或 .astype() 方法 .type(new_type)将张量转换为新的数据类型。.type() 在旧版本中广泛使用但在新版本中推荐使用 .to() 方法。.astype(dtype, copyTrue)与 NumPy 的接口类似用于转换数据类型。此方法可能需要复制张量内容取决于是否要求 copy 参数为 True。 Python 1float_tensor torch.tensor([1.0, 2.0]) 2int_tensor float_tensor.type(torch.int32) # 老式用法 3new_float_tensor int_tensor.astype(torch.float32) # 类似NumPy的接口不过在PyTorch中不常用 常见的数据类型包括但不限于 torch.float32 或 torch.float: 32位单精度浮点数torch.float64 或 torch.double: 64位双精度浮点数torch.int32 或 torch.int: 默认的32位有符号整数torch.int64 或 torch.long: 通常用于索引操作的64位有符号整数torch.uint8: 无符号8位整数常用于存储像素值 转换时需要注意的是从浮点数到整数类型的转换会进行截断不是四舍五入并且从低精度到高精度转换通常是安全的但反之可能会导致精度损失。 4. 随机数生成 在PyTorch中随机数生成是通过torch库提供的多种方法来实现的这些方法允许用户根据不同的概率分布创建不同形状和数据类型的随机张量。以下是一些常用的PyTorch随机数生成函数 均匀分布Uniform Distribution: torch.rand(*sizes, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse) 该函数返回一个指定形状sizes的张量其中元素是从[0, 1)区间内的均匀分布中抽取的。示例 Python 1uniform_tensor torch.rand(3, 4) 标准正态分布Standard Normal Distribution: torch.randn(*sizes, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse) 这个函数返回一个形状为sizes的张量其元素服从标准正态分布均值为0方差为1。示例 Python 1normal_tensor torch.randn(5, 2) 离散分布Discrete Distributions: torch.randint(low, high, *sizes, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse) 返回从low到high-1范围内的整数均匀分布中的随机数组成的张量。示例 Python 1discrete_tensor torch.randint(0, 10, (2, 3)) 泊松分布Poisson Distribution: torch.poisson(lam1, *size, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse) 生成形状为size的张量其元素服从参数为lam的泊松分布。示例 Python 1poisson_tensor torch.poisson(torch.tensor([2.0, 3.0]), (2,)) 随机排列Random Permutation: torch.randperm(n, outNone, dtypetorch.long, deviceNone) 返回一个大小为n的一维张量其中包含从0到n-1之间的一个随机排列。示例 Python 1permuted_indices torch.randperm(10) 线性间距向量Linearly-Spaced Vector: torch.linspace(start, end, steps, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse) 不是严格意义上的随机数生成函数但它会创建一个从start到end等间距的steps个数的张量。示例 Python 1linspace_tensor torch.linspace(0, 1, 5) 其它分布 PyTorch还支持更多复杂的概率分布例如高斯分布、伯努利分布、指数分布等可以通过torch.distributions模块来创建相应的分布对象并使用.sample()方法来生成随机数。 确保在进行随机实验时能够控制随机种子以确保可复现性可以使用 torch.manual_seed(seed) 或 torch.cuda.manual_seed_all(seed) 来设置全局随机种子。 5. 线性代数运算 在PyTorch中线性代数运算被广泛应用于深度学习和数值计算中。以下是一些PyTorch模块提供的主要线性代数操作 矩阵乘法 torch.matmul(a, b)进行矩阵乘法或向量-矩阵乘法点积。torch.mm(a, b)用于2维张量的矩阵乘法等同于matmul在特定场景下。torch.bmm(a, b)进行两个3D张量的批量矩阵乘法每个2D切片独立相乘。 点积、内积与范数 torch.dot(a, b)计算两个向量的点积内积。a bPython 3.5及更高版本中的矩阵乘法运算符等价于torch.matmul(a, b)。torch.norm(input, p2, dimNone, keepdimFalse, outNone)计算张量的各个维度上的范数默认为L2范数。 转置和矩阵求逆 torch.t(input) 或 input.T计算张量的转置。torch.transpose(input, dim0, dim1)根据指定的维度交换输入张量的轴。torch.inverse(A)计算方阵A的逆矩阵返回一个与A形状相同的张量。 矩阵分解 torch.svd()奇异值分解Singular Value Decomposition。torch.eig(eigenvectorsTrue)计算方阵的特征值和特征向量。torch.linalg.qr(input, modereduced)QR分解。torch.lu(input, pivotTrue)LU分解。 行列式与迹 torch.det(input)计算方阵的行列式。torch.trace(input)计算对角线上元素之和即矩阵的迹。 特征值与特征向量 torch.linalg.eigvals(A)只计算方阵A的特征值。torch.linalg.eigvalsh(A)计算Hermitian矩阵A的特征值。 正交化与归一化 torch.nn.functional.normalize(input, p2, dim, eps1e-12, outNone)对张量进行长度规范化使其成为单位向量。 标量与矩阵运算 torch.mul(a, b) 或 a * b按元素逐个相乘。torch.add(a, b) 或 a b按元素逐个相加。更多高级线性代数函数如矩阵求幂、解线性系统等可通过torch.linalg子模块实现。 广播规则下的数学运算 PyTorch支持NumPy风格的广播规则在执行大多数线性代数运算时会自动应用这些规则来匹配不同大小的张量进行操作。 以上函数可以帮助用户在构建神经网络模型或者进行科学计算时方便地处理涉及线性代数的各种问题。 6. 存储和序列化 在PyTorch中存储和序列化是模型部署、迁移学习以及持久保存训练结果的关键环节。以下是如何使用torch模块中的功能进行存储和序列化的详细介绍 存储张量与模型参数 存储张量 使用 torch.save() 函数可以将张量或任何可序列化的Python对象如模型保存到磁盘。 Python 1# 保存单个张量 2torch.save(tensor, tensor.pt) 3 4# 保存字典或列表等复杂结构其中包含张量 5model_params {weights: weights_tensor, bias: bias_tensor} 6torch.save(model_params, model_params.pt) 加载张量 使用 torch.load() 函数从磁盘加载先前保存的张量或其他对象。 Python 1tensor torch.load(tensor.pt) 2model_params torch.load(model_params.pt) 序列化模型 保存整个模型 对于继承自 torch.nn.Module 的模型可以直接保存整个模型及其状态包括权重和优化器状态。 Python 1torch.save(model.state_dict(), model.pth) # 只保存模型参数 2torch.save({model_state_dict: model.state_dict(), 3 optimizer_state_dict: optimizer.state_dict()}, 4 model_and_optimizer.pth) # 保存模型和优化器状态 加载模型 加载时需要创建一个与保存时相同架构的新模型实例并使用 .load_state_dict() 方法恢复其参数。 Python 1model MyModelClass() 2model.load_state_dict(torch.load(model.pth)) 3 4# 如果还保存了优化器状态 5optimizer torch.optim.SGD(model.parameters(), lr0.01) 6checkpoint torch.load(model_and_optimizer.pth) 7model.load_state_dict(checkpoint[model_state_dict]) 8optimizer.load_state_dict(checkpoint[optimizer_state_dict]) 脚本模式Scripting与 TorchScript 要序列化模型为独立运行的脚本可以使用 torch.jit.script() 或者 torch.jit.trace() 来编译模型到 TorchScript。编译后的模型可以通过 torch.jit.save() 和 torch.jit.load() 进行保存和加载并且可以在不依赖 PyTorch 环境的情况下运行。 Python 1scripted_model torch.jit.script(model) # 或者 trace_module() for tracing 2torch.jit.save(scripted_model, scripted_model.pt) 3 4loaded_scripted_model torch.jit.load(scripted_model.pt) 通过上述方法用户能够灵活地保存和加载模型参数甚至可以将模型转换成独立执行文件便于部署到没有安装完整 PyTorch 的环境或者移动端设备上。 7. 多GPU支持 在PyTorch中多GPU支持主要通过torch.nn.DataParallel和torch.nn.parallel.DistributedDataParallel两个模块实现。这两个模块都允许模型在多个GPU上并行执行从而加速训练过程。 torch.nn.DataParallel nn.DataParallel 是一种简单且易于使用的多GPU并行机制它将模型复制到所有可用的GPU设备上并自动分配输入数据的不同部分到各个GPU进行前向传播计算。使用时需要将模型包装在一个DataParallel实例内 Python 1model MyModel() 2if torch.cuda.device_count() 1: 3 model nn.DataParallel(model) 4model.to(device) # device可以是cuda:0, cuda:1, etc. 在后向传播过程中梯度会在各个GPU间同步然后更新主GPU上的模型参数。 torch.nn.parallel.DistributedDataParallel (DDP) DDP是一种更高级、更灵活也更高效的多GPU并行策略适用于大规模分布式训练场景。 它不仅支持单机多卡multi-GPU还支持多机多卡训练在大型集群上实现高效的大规模深度学习模型训练。 使用DPP需要初始化进程组、设置全局唯一的rank和world_size并将模型封装进DistributedDataParallel Python 1import torch.distributed as dist 2from torch.nn.parallel import DistributedDataParallel as DDP 3 4os.environ[MASTER_ADDR] localhost 5os.environ[MASTER_PORT] 12355 6 7rank int(os.environ[RANK]) 8world_size int(os.environ[WORLD_SIZE]) 9 10dist.init_process_group(backendnccl, init_methodenv://, rankrank, world_sizeworld_size) 11 12model MyModel() 13model DDP(model, device_ids[rank], output_devicerank) DDP不仅会把模型参数分布在不同的GPU上还会在每个GPU上维护模型的一份完整副本这使得模型可以在每个GPU上独立地完成前向传播和反向传播然后通过高效的通信库如NCCL来聚合梯度最后在每个GPU上更新参数。 注意使用多GPU并行时要确保数据正确地分布在各个GPU之间。对于简单的数据并行处理DataLoader可以通过设置num_workers和pin_memory属性以优化CPU与GPU之间的数据传输。而对于DDP通常会结合torch.utils.data.distributed.DistributedSampler来均衡地将数据分配到不同进程中。此外还需考虑网络结构中的批次归一化层BatchNorm在多GPU训练时的特殊性以及可能需要调整的学习率和其他超参数。
http://www.zqtcl.cn/news/853681/

相关文章:

  • 2015做那些网站能致富60天做网站
  • 沈阳个人建站模板网站图片计时器怎么做
  • 福州定制网站开发北京排名seo
  • 地方门户网站开发方案长沙有哪个学校可以学网站建设
  • 建个购物网站水果建设网站前的市场分析
  • 建网站的目的小程序登录代码
  • 南京有名的网站建设公司自学室内装修设计教程
  • 新乡市做网站的公司开发公司简介企业介绍
  • 礼品网站模板淘宝店铺购买交易平台
  • 属于公司的网站怎么做外贸服装网站开发
  • 做暧网站泸州公司做网站
  • 做文库类网站网站所有权 备案
  • 网站开发主要内容站长之家网站查询
  • 网站推广优化排名公司wordpress添加说说
  • 维护一个网站要多少钱企业怎么做网站
  • 怎么做兼职网站成都必去十大网红景点
  • 网站建设如何传视频教程电脑网站设计公司
  • 网站开发培训教程制作网站开发公司
  • 网站前端做报名框代码seo教育培训机构
  • 做网站要学习什么分销网站
  • 镇江市住房和城乡建设局网站常州建设网站
  • 学做美食的网站男女做暖暖到网站
  • 手机的网站建设目标刚做的网站 搜不到
  • 重庆网站建设哪里比较好呢ps怎么做网站logo
  • 网站建设五项基本原则优化关键词的公司
  • 高端网站的特点p2p网站开发的流程
  • 什么网站做外贸最好坪地网站建设公司
  • 做网站费用怎么核算没有公司 接单做网站
  • 如何建设一个优秀的电商网站wordpress注册去掉电子邮件
  • 站长工具 seo综合查询长沙高校网站制作公司