PyTorch 入门
一、说明
深度学习是机器学习的一个分支,其中编写的算法模仿人脑的功能。深度学习中最常用的库是 Tensorflow 和 PyTorch。由于有各种可用的深度学习框架,人们可能想知道何时使用 PyTorch。以下是人们更喜欢使用 Pytorch 来完成特定任务的原因。
Pytorch 是一个开源深度学习框架,提供 Python 和 C++ 接口。Pytorch 驻留在 torch 模块内。在 PyTorch 中,需要处理的数据以张量的形式输入。
二、安装 PyTorch
如果您的系统中安装了 Anaconda Python 包管理器,则在终端中运行以下命令将安装 PyTorch:
conda install pytorch torchvision cpuonly -c pytorch
此命令将安装最新的稳定版本的 PyTorch。Stable 代表当前经过最多测试和支持的 PyTorch 版本。Pytorch 的最新稳定版本是 1.12.1。如果您想使用 PyTorch 而不将其显式安装到本地计算机中,则可以使用 Google Colab。
三、PyTorch 张量
Pytorch 用于处理张量。张量是多维数组,如 n 维 NumPy 数组。然而,张量也可以在 GPU 中使用,而 NumPy 数组则不然。PyTorch 具有各种内置函数,因此可以加速张量的科学计算。
向量是一维张量,矩阵是二维张量。C、C++ 和 Java 中使用的张量和多维数组之间的一个显着区别是张量在所有维度上应具有相同的列大小。此外,张量只能包含数字数据类型。
张量的两个基本属性是:
- 形状:指数组或矩阵的维数
- Rank:指张量中存在的维数
代码:
- Python3
# importing torch import torch # creating a tensors t1 = torch.tensor([ 1 , 2 , 3 , 4 ]) t2 = torch.tensor([[ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ], [ 9 , 10 , 11 , 12 ]]) # printing the tensors: print ( "Tensor t1: \n" , t1) print ( "\nTensor t2: \n" , t2) # rank of tensors print ( "\nRank of t1: " , len (t1.shape)) print ( "Rank of t2: " , len (t2.shape)) # shape of tensors print ( "\nRank of t1: " , t1.shape) print ( "Rank of t2: " , t2.shape) |
输出:
四、在 PyTorch 中创建张量
在 PyTorch 中创建张量有多种方法。张量可以包含单一数据类型的元素。我们可以使用 python 列表或 NumPy 数组创建张量。Torch 有 10 种适用于 GPU 和 CPU 的张量变体。以下是定义张量的不同方法。
torch.Tensor() :它复制数据并创建其张量。它是 torch.FloatTensor 的别名。
torch.tensor() :它还会复制数据以创建张量;但是,它会自动推断数据类型。
torch.as_tensor() :在这种情况下,在创建数据时共享数据而不是复制数据,并接受任何类型的数组来创建张量。
torch.from_numpy() :它类似于tensor.as_tensor(),但它只接受numpy数组。
代码:
- Python3
# importing torch module
import torch import numpy as np # list of values to be stored as tensor data1 = [ 1 , 2 , 3 , 4 , 5 , 6 ] data2 = np.array([ 1.5 , 3.4 , 6.8 , 9.3 , 7.0 , 2.8 ]) # creating tensors and printing t1 = torch.tensor(data1) t2 = torch.Tensor(data1) t3 = torch.as_tensor(data2) t4 = torch.from_numpy(data2) print ( "Tensor: " ,t1, "Data type: " , t1.dtype, "\n" ) print ( "Tensor: " ,t2, "Data type: " , t2.dtype, "\n" ) print ( "Tensor: " ,t3, "Data type: " , t3.dtype, "\n" ) print ( "Tensor: " ,t4, "Data type: " , t4.dtype, "\n" ) |
输出:
五、在 Pytorch 中重构张量
我们可以在 PyTorch 中根据需要修改张量的形状和大小。我们还可以创建 and 张量的转置。以下是根据需要更改张量结构的三种常见方法:
.reshape(a, b) :返回大小为 a,b 的新张量
.resize(a, b) :返回大小与 a,b 相同的张量
.transpose(a, b) :返回a和b维度转置的张量
2*3 矩阵已被重新整形并转置为 3*2。我们可以可视化这两种情况下张量中元素排列的变化。
代码:
- Python3
# import torch module import torch # defining tensor t = torch.tensor([[ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ], [ 9 , 10 , 11 , 12 ]]) # reshaping the tensor print ( "Reshaping" ) print (t.reshape( 6 , 2 )) # resizing the tensor print ( "\nResizing" ) print (t.resize( 2 , 6 )) # transposing the tensor print ( "\nTransposing" ) print (t.transpose( 1 , 0 )) |
六、PyTorch 中张量的数学运算
我们可以使用 Pytorch 对张量执行各种数学运算。执行数学运算的代码与 NumPy 数组的情况相同。下面是在张量中执行四种基本运算的代码。
- Python3
# import torch module import torch # defining two tensors t1 = torch.tensor([ 1 , 2 , 3 , 4 ]) t2 = torch.tensor([ 5 , 6 , 7 , 8 ]) # adding two tensors print ( "tensor2 + tensor1" ) print (torch.add(t2, t1)) # subtracting two tensor print ( "\ntensor2 - tensor1" ) print (torch.sub(t2, t1)) # multiplying two tensors print ( "\ntensor2 * tensor1" ) print (torch.mul(t2, t1)) # diving two tensors print ( "\ntensor2 / tensor1" ) print (torch.div(t2, t1)) |
输出:
要进一步深入了解使用 Pytorch 进行矩阵乘法,请参阅本文。
六、Pytorch 模块
PyTorch 库模块对于创建和训练神经网络至关重要。三个主要的库模块是 Autograd、Optim 和 nn。
# 1. Autograd 模块: autograd 提供了轻松计算梯度的功能,无需明确手动实现所有层的前向和后向传递。
为了训练任何神经网络,我们执行反向传播来计算梯度。通过调用 .backward() 函数,我们可以计算从根到叶子的每个梯度。
代码:
- Python3
# importing torch import torch # creating a tensor t1 = torch.tensor( 1.0 , requires_grad = True ) t2 = torch.tensor( 2.0 , requires_grad = True ) # creating a variable and gradient z = 100 * t1 * t2 z.backward() # printing gradient print ( "dz/dt1 : " , t1.grad.data) print ( "dz/dt2 : " , t2.grad.data) |
输出:
# 2. Optim 模块: PyTorch Optium 模块有助于实现各种优化算法。该软件包包含最常用的算法,例如 Adam、SGD 和 RMS-Prop。要使用 torch.optim,我们首先需要构造一个 Optimizer 对象,它将保留参数并相应地更新它。首先,我们通过提供我们想要使用的优化器算法来定义优化器。我们在反向传播之前将梯度设置为零。然后为了更新参数,调用optimizer.step()。
Optimizer = torch.optim.Adam(model.parameters(), lr=0.01) #定义优化器
Optimizer.zero_grad() #将梯度设置为零
optimizer.step() #参数更新
# 3. nn 模块:这个包有助于构建神经网络。它用于构建层。
为了创建单层模型,我们可以使用 nn.Sequential() 简单地定义它。
模型 = nn.Sequential( nn.Linear(in, out), nn.Sigmoid(), nn.Linear(_in, _out), nn.Sigmoid() )
对于不在单个序列中的模型的实现,我们通过子类化 nn.Module 类来定义模型。
- Python3
class Model (nn.Module) : def __init__( self ): super (Model, self ).__init__() self .linear = torch.nn.Linear( 1 , 1 ) def forward( self , x): y_pred = self .linear(x) return y_pred |
七、PyTorch 数据集和数据加载器
torch.utils.data.Dataset 类包含所有自定义数据集。我们需要实现两个方法,__len__() 和 __get_item__(),来创建我们自己的数据集类。
PyTorch Dataloader 具有一个惊人的功能,可以与自动批处理并行加载数据集。因此,它减少了顺序加载数据集的时间,从而提高了速度。
语法: DataLoader(数据集,shuffle=True,sampler=None,batch_sampler=None,batch_size=32)
PyTorch DataLoader 支持两种类型的数据集:
- 映射式数据集:数据项映射到索引。在这些数据集中, __get_item__() 方法用于检索每个项目的索引。
- 可迭代式数据集:在这些数据集中实现了 __iter__() 协议。数据样本按顺序检索。
请参阅《在 PyTorch 中使用 DataLoader》一文了解更多信息。
八、使用 PyTorch 构建神经网络
我们将在逐步实施中看到这一点:
- 数据集准备:由于PyTorch中的所有内容都以张量的形式表示,因此我们应该首先以张量表示。
- 构建模型:为了构建神经网络,我们首先定义输入层、隐藏层和输出层的数量。我们还需要定义初始权重。权重矩阵的值是使用torch.randn()随机选择的。Torch.randn() 返回一个由标准正态分布的随机数组成的张量。
- 前向传播:将数据输入神经网络,并在权重和输入之间执行矩阵乘法。这可以使用手电筒轻松完成。
- 损失计算: PyTorch.nn 函数有多个损失函数。损失函数用于衡量预测值与目标值之间的误差。
- 反向传播:用于优化权重。改变权重以使损失最小化。
现在让我们从头开始构建一个神经网络:
- Python3
# importing torch import torch # training input(X) and output(y) X = torch.Tensor([[ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ], [ 6 ]]) y = torch.Tensor([[ 5 ], [ 10 ], [ 15 ], [ 20 ], [ 25 ], [ 30 ]]) class Model(torch.nn.Module): # defining layer def __init__( self ): super (Model, self ).__init__() self .linear = torch.nn.Linear( 1 , 1 ) # implementing forward pass def forward( self , x): y_pred = self .linear(x) return y_pred model = torch.nn.Linear( 1 , 1 ) # defining loss function and optimizer loss_fn = torch.nn.L1Loss() optimizer = torch.optim.Adam(model.parameters(), lr = 0.01 ) for epoch in range ( 1000 ): # predicting y using initial weights y_pred = model(X.requires_grad_()) # loss calculation loss = loss_fn(y_pred, y) # calculating gradients loss.backward() # updating weights optimizer.step() optimizer.zero_grad() # testing on new data X = torch.Tensor([[ 7 ], [ 8 ]]) predicted = model(X) print (predicted) |
输出:
相关文章:

PyTorch 入门
一、说明 深度学习是机器学习的一个分支,其中编写的算法模仿人脑的功能。深度学习中最常用的库是 Tensorflow 和 PyTorch。由于有各种可用的深度学习框架,人们可能想知道何时使用 PyTorch。以下是人们更喜欢使用 Pytorch 来完成特定任务的原因。 Pytorch…...

微信自动批量添加好友的方法
在现在的营销中微信已成为一种重要的沟通方式。微信目前是没有自动批量添加好友的功能,需要运营者一个一个手动去添加,这样太过于浪费时间,并且加频繁了还容易被封号,今天给大家介绍几种手动批量加好友的方式以及怎么借助第三方软…...

[网鼎杯 2018]Comment git泄露 / 恢复 二次注入 .DS_Store bash_history文件查看
首先我们看到账号密码有提示了 我们bp爆破一下 我首先对数字爆破 因为全字符的话太多了 爆出来了哦 所以账号密码也出来了 zhangwei zhangwei666 没有什么用啊 扫一下吧 有git git泄露 那泄露看看 真有 <?php include "mysql.php"; session_start(); if(…...

生态兼容性进一步提升!白鲸开源 WhaleStudio 与火山引擎ByteHouse完成产品互认
数据作为新型生产要素,已快速融入生产、分配、流通、消费和社会服务管理等各环节,深刻改变着生产方式、生活方式和治理方式。越来越多企业也在尝试充分利用数据要素,开辟全新发展路径,进一步实现业务价值提升。 在数字化转型的大…...
iOS 内存管理和优化
对内存管理和拓展有独特的描述 iOS学习-内存管理 比较详细说明内存的关系 iOS 内存管理机制与原理 iOS 内存泄漏排查方法及原因分析 对weak的实现原理描写详细 【iOS】—— weak的基本原理 iOS copy & mutableCopy iOS 深拷贝与浅拷贝 对iOS的浅复制和深复制的深入解释…...
常见工具指令【Vim | GIT | ZIP | UNZIP | IDEA】
VIM 快捷键说明Ctrl U (up)向上翻动半页Ctrl B (back)向上翻动一页Ctrl D (down)向下翻页半页Ctrl F (forward)向下翻动一页 GIT 指令解释git init 使用指定目录作为Git仓库git add filename向资源库添加文件filenamegit rm file从资源库中删除文件git branch 分支名称创…...

中国人民大学与加拿大女王大学金融硕士——顺势而为,掌握人生的方向盘
在这个快速发展的时代,每个人在不断面临全新挑战的同时, 也在时刻接收着各种机会。有人抓住时代红利,实现更新迭代;有人却只能作为旁观者,眼看时代发展,而自己被逐渐淘汰。时代从不会抛下任何一个人&#x…...

Apache Ranger:(二)对Hive集成简单使用
1.Ranger Hive-plugin安装 进入 Ranger 编译生成的目录下 找到 ranger-2.0.0-hive-plugin.tar.gz 进行解压 tar -zxvf ranger-2.0.0-hive-plugin.tar.gz -C /opt/module/ 2.修改配置文件 vim install.properties #策略管理器的url地址 POLICY_MGR_URLhttp://[ip]:6080#组件…...

【angular】实现简单的angular国际化(i18n)
文章目录 目标过程运行在TS中国际化参考 目标 实现简单的angular国际化。本博客实现中文版和法语版。 将Hello i18n!变为中文版:你好 i18n!或法语版:Bonjour l’i18n !。 过程 创建一个项目: ng new i18nDemo在集成终端中打开。 添加本地化包&#…...

Redis之主从复制,哨兵模式,集群
Redis之主从复制,哨兵模式,集群 1、主从复制1.1主从复制概述1.2Redis主从复制作用1.3Redis主从复制流程1.4部署Redis 主从复制 2、哨兵模式2.1哨兵模式原理2.2哨兵模式的作用2.3哨兵模式的结构2.4故障转移机制2.5搭建Redis 哨兵模式 3、Redis集群模式3.1…...

掌动智能浅析Web自动化测试的重要性
在现代Web开发中,确保Web应用程序的质量和稳定性至关重要。Web自动化测试工具成为了开发团队的关键资源,帮助他们自动化测试流程、减少手动劳动,提高测试覆盖率和效率。本文将介绍Web自动化测试的重要性是什么! Web自动化测试的重要性&#x…...

JTS: 12 Descriptions 图形覆盖
这里写目录标题 版本代码Intersection 交集Union 并集Difference 差集SymDifference 补集 版本 org.locationtech.jts:jts-core:1.19.0 链接: github 代码 /*** 图形覆盖操作* author LiHan* 2023年10月12日 19:34:09*/ public class GeometryDescriptions {private final Ge…...

业务安全五重价值:防攻击、保稳定、助增收、促合规、提升满意度
目录 防范各类威胁攻击 保障业务的连续性和稳定性 保障业务的合规性 提升企业营收和发展 提升企业满意度和品牌知名度 2023年暑假被“票贩子”和“黄牛”攻陷。他们利用各种手段抢先预约名额,然后加价出售给游客,导致了门票供不应求的局面ÿ…...

shiro反序列化和log4j
文章目录 安装环境shiro漏洞验证log4j 安装环境 进入vulhb目录下的weblogic,复现CVE-2018-2894漏洞: cd /vulhub/shiro/CVE-2010-3863查看docker-compose的配置文件: cat docker-compose.yml如图,里面有一个镜像文件的信息和服…...

『Linux项目自动化构建工具』make/Makefile
前言 如题可知,make/Makefile为在Linux下的项目自动化构建工具; 在上一篇文章『Linux - gcc / g』c程序翻译过程 中讲解了C/C程序的翻译过程; 而make/Makefile即可以看成,是Makefile在使用gcc/g使在Linux环境下能够更好的高效率的进行项目构建; 在此之前首先要对make/Makefile…...
github提示Permission denied (publickey),如何才能解决
当GitHub提示“Permission denied (publickey)”错误,这通常意味着您的SSH密钥没有被正确地配置。以下是一些常见的解决步骤,帮助您诊断和解决该问题: 检查是否已设置SSH密钥: 运行以下命令检查是否存在SSH密钥: bash…...

金x软件有限公司安全测试岗位面试
目录 一、自我介绍 二、你是网络空间安全专业的,那你介绍下网络空间安全这块主要学习的东西? 三、本科专业是网络工程,在嘉兴海视嘉安智城科技有限公司实习过,你能说下干的工作吗?(没想到问的是本科实习…...
c语言之strlen函数使用和实现
文章目录 前言一、strlen函数使用二、实现方法 前言 c语言之strlen函数使用和实现 一、strlen函数使用 strlen函数返回的是在字符串中的个数,但不包含字符串结束符’\0’ #include<stdio.h> #include<string.h> int main() {char str1[] "abcd…...

网络初识(JAVA EE)
文章目录 一、网络发展史二、网络通信基础三、协议分层四、封装和分用 一、网络发展史 独立模式:计算机之间相互独立,每个终端都各自持有客户数据,且当处理一个业务时,按照业务流程进行 网络互连:将多台计算机连接在一…...

kantts docker化
kan-tts docker本地化 环境安装 下载docker镜像(python3.8的) registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope:ubuntu20.04-cuda11.8.0-py38-torch2.0.1-tf2.13.0-1.9.2 安装基础模型 pip install modelscope 安装语音模型 pip install "modelscope…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...