【安装和引入 PyTorch 包,快来收藏】

在本文介绍 PyTorch 中一些最常用的命令和设置。

在这里插入图片描述

一个完成的 PyTorch 工作流程。
在这里插入图片描述

安装和引入 PyTorch 包

最好的安装教程就是去官方网站:https://pytorch.org/get-started/locally/

安装结束之后,直接引入整个 torch 包:

import torch

或者是按需引入:

from torch import nn

由于大多数机器学习都是在数据中寻找模式,因此了解如何在 PyTorch 中处理数据集是很有必要的。

from torch.utils.data import Dataset, DataLoader

创建张量

PyTorch 的主要用例之一是加速深度学习计算。深度学习通常涉及操纵大型张量(大型、多维数字集合)。

PyTorch 有许多创建张量的方法。

# Create a single number tensor (scalar)
scalar = torch.tensor(7)# Create a random tensor
random_tensor = torch.rand(size=(3, 4)) # this will create a tensor of size 3x4 but you can manipulate the shape how you want# Multiply two random tensors
random_tensor_1 = torch.rand(size=(3, 4))
random_tensor_2 = torch.rand(size=(3, 4))
random_tensor_3 = random_tensor_1 * random_tensor_2 # PyTorch has support for most math operators in Python (+, *, -, /)

特定领域相关的库

根据我们正在处理的具体问题,PyTorch 有多个与具体领域相关的库:

TorchVision — PyTorch 的内置计算机视觉库。

TorchText — PyTorch 的内置文本库。

TorchAudio — PyTorch 的音频库。

TorchRec — PyTorch 最新的用于通过深度学习为推荐引擎提供支持的库。

计算机视觉

https://pytorch.org/vision/stable/index.html

# Base computer vision library
import torchvision# Other components of TorchVision (premade datasets, pretrained models and image transforms)
from torchvision import datasets, models, transforms

自然语言处理

https://pytorch.org/text/stable/index.html

# Base text and natural language processing library
import torchtext# Other components of TorchText (premade datasets, pretrained models and text transforms)
from torchtext import datasets, models, transforms

语音

https://pytorch.org/audio/stable/index.html

# Base audio and speech processing library
import torchaudio# Other components of TorchAudio (premade datasets, pretrained models and text transforms)
from torchaudio import datasets, models, transforms

推荐系统


https://pytorch.org/torchrec/

# # Base recommendation system library 
# import torchrec# # Other components of TorchRec
# from torchrec import datasets, models

在不同设备上使用 PyTorch

深度学习的大部分内容都涉及张量计算。

张量计算在 GPU(通常来自 NVIDIA)上通常比在 CPU 上运行得更快。通常是:NVIDIA GPU(cuda)> MPS 设备(mps)> CPU(cpu)。

MPS 代表 Metal Performance Shader ,即 Apple 的 GPU(M1、M1 Pro、M2 等)。关于mps更多详细的教程可以去官方网站:

https://pytorch.org/docs/stable/notes/mps.html

编写自动检测设备的代码:

# Setup device-agnostic code 
if torch.cuda.is_available():device = "cuda" # NVIDIA GPU
elif torch.backends.mps.is_available():device = "mps" # Apple GPU
else:device = "cpu" # Defaults to CPU if NVIDIA GPU/Apple GPU aren't availableprint(f"Using device: {device}")

然后我们可以通过 .to(“device_name”) 方法将 PyTorch 中的对象(模型和张量)移动到不同的设备。

# Create a tensor 
x = torch.tensor([1, 2, 3]) 
print(x.device) # defaults to CPU # Send tensor to target device
x = x.to(device)
print(x.device)

设置随机数种子

许多机器学习和深度学习涉及在张量中获取随机数,然后对这些随机数进行整形以查找/表示真实数据中的模式。

但是,有时我们需要“可重现”的随机性。为此,我们可以设置随机种子。

import torch# Set the random seed (you can set this to any number you like, it will "flavour"
# the randomness with that number.
torch.manual_seed(42)# Create two random tensors
random_tensor_A = torch.rand(3, 4)torch.manual_seed(42) # set the seed again (try commenting this out and see what happens)
random_tensor_B = torch.rand(3, 4)print(f"Tensor A:\n{random_tensor_A}\n")
print(f"Tensor B:\n{random_tensor_B}\n")
print(f"Does Tensor A equal Tensor B? (anywhere)")
random_tensor_A == random_tensor_B

在这里插入图片描述

还可以在 GPU(CUDA 设备)上设置随机种子。

# Set random seed on GPU
torch.cuda.manual_seed(42)

神经网络

PyTorch 拥有一个非常全面的预构建神经网络组件库(其中许多在 PyTorch 生态系统中被称为“模块”)。

从根本上讲,神经网络是层的堆叠。这些层中的每一层都对输入执行某种操作并产生输出。这些层如何堆叠在一起将取决于你正在处理的问题。机器学习中最活跃的研究领域之一是如何将神经网络层堆叠在一起。

PyTorch 中的绝大多数神经网络组件都包含在 torch.nn 包中(nn 是神经网络 neural network 的缩写)。

https://pytorch.org/docs/stable/nn.html

from torch import nn

线性层

PyTorch 有很多内置的线性层。

https://pytorch.org/docs/stable/nn.html#linear-layers

# Create a linear layer with 10 in features and out features
linear_layer = nn.Linear(in_features=10,out_features=10)# Create an Identity layer
identity_layer = nn.Identity()

卷积层

PyTorch 有几个内置的卷积层。


https://pytorch.org/docs/stable/nn.html#convolution-layers

卷积层的命名通常遵循 torch.nn.ConvXd,其中 X 可以是1、2或3。X 值表示卷积将在其上运行的维度数,例如,1表示单维文本,2表示二维图像(高度 x 宽度),3表示视频等3D对象(视频被视为具有时间维度的一系列图像,高度 x 宽度 x 时间)。

# Create a Conv1d layer (often used for text with a singular dimension)
conv1d = nn.Conv1d(in_channels=1,out_channels=10,kernel_size=3)# Create a Conv2d layer (often used for images with Height x Width dimensions)
conv2d = nn.Conv2d(in_channels=3, # 3 channels for color images (red, green, blue)out_channels=10,kernel_size=3)# Create a Conv3d layer (often used for video with Height x Width x Time dimensions)
conv3d = nn.Conv3d(in_channels=3,out_channels=10,kernel_size=3)

Transformer 层

PyTorch 具有内置的,如论文《Attention Is All You Need》中所描述的 Transformer 层。

(https://arxiv.org/abs/1706.03762)

得益于 PyTorch 的 BetterTransformer,使用内置的 PyTorch Transformer 层可以带来潜在的加速优势。

https://pytorch.org/blog/a-better-transformer-for-fast-transformer-encoder-inference/

# Create a Transformer model (model based on the paper "Attention Is All You Need" - https://arxiv.org/abs/1706.03762)
transformer_model = nn.Transformer()# Create a single Transformer encoder cell
transformer_encoder = nn.TransformerEncoderLayer(d_model=768, # embedding dimensionnhead=12) # number of attention heads# Create a single Transformer decoder cell
transformer_decoder = nn.TransformerDecoderLayer(d_model=768,nhead=12)# Stack together Transformer decoder cells
transformer_decoder_stack = nn.TransformerDecoder(decoder_layer=transformer_decoder, # from abovenum_layers=6) # 6 Transformer decoders stacked on top of each other

循环层

PyTorch 内置了对循环神经网络(RNN)层的支持,例如 LSTM 和 GRU。

# Create a single LSTM cell
lstm_cell = nn.LSTMCell(input_size=10, # can adjust as necessaryhidden_size=10) # can adjust as necessary# Stack together LSTM cells
lstm_stack = nn.LSTM(input_size=10,hidden_size=10,num_layers=3) # 3 single LSTM cells stacked on top of each other# Create a single GRU cell
gru_cell = nn.GRUCell(input_size=10, # can adjust as necessaryhidden_size=10) # can adjust as necessary# Stack together GRU cells
gru_stack = nn.GRU(input_size=10, hidden_size=10,num_layers=3) # 3 single GRU cells stacked on top of each other

激活函数

激活函数通常位于神经网络的各层之间,为线性(直线)函数添加非线性(非直线)功能。本质上,神经网络通常由大量线性和非线性函数组成。

PyTorch 在 torch.nn 中内置了几个非线性激活函数。其中一些最常见的是:

nn.ReLU

nn.Sigmoid

nn.Softmax

# ReLU
relu = nn.ReLU()# Sigmoid
sigmoid = nn.Sigmoid()# Softmax
softmax = nn.Softmax()

损失函数

损失函数衡量模型的错误程度。也就是说,它衡量了模型的预测值与真实值的偏差有多大。

PyTorch(以及一般的深度学习)中的损失函数也经常被称为:标准(criterion)、成本函数。PyTorch 在 torch.nn 中内置了几个损失函数。其中一些最常见的是:

nn.L1Loss - 也称为 MAE 或平均绝对误差(此损失通常用于回归问题或预测数字,例如房价)。

nn.MSELoss - 也称为 L2Loss 或均方误差(此损失通常用于回归问题或预测数字,例如房价)。

nn.BCEWithLogitsLoss - 也称为二元交叉熵,此损失函数通常用于二元分类问题。

nn.CrossEntropyLoss——此损失函数通常用于多类分类问题。

# L1Loss
loss_fn = nn.L1Loss() # also known as MAE or mean absolute error# MSELoss
loss_fn = nn.MSELoss() # also known as MSE or mean squared error# Binary cross entropy (for binary classification problems)
loss_fn = nn.BCEWithLogitsLoss()# Cross entropy (for multi-class classification problems)
loss_fn = nn.CrossEntropyLoss()

优化器

优化器的作用是改变神经网络权重,从而降低损失函数值。

PyTorch 在 torch.optim 模块中内置了几个优化函数。两个主要的优化器函数包括:

torch.optim.SGD(lr=0.1, params=model.parameters()) - SGD 也称为随机梯度下降(stochastic gradient descent)。

torch.optim.Adam(lr=0.001, params=model.parameters()) - Adam 优化器。

lr 代表学习率(learning rate),即每一步修改神经网络权重的乘数,小值 = 小调整,大值 = 大调整)。

params 代表“模型参数”,换句话说,就是您希望优化函数在训练期间优化的模型参数/权重。

# Create a baseline model
model = nn.Transformer()# SGD (stochastic gradient descent)
optimizer = torch.optim.SGD(lr=0.1, # set the learning rate (required)params=model.parameters()) # tell the optimizer what parameters to optimize# Create a baseline model
model = nn.Transformer()# Adam optimizer
optimizer = torch.optim.Adam(lr=0.001, # set the learning rate (required)params=model.parameters()) # tell the optimizer what para

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/352501.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习300问】122、RNN面临哪些问题?

循环神经网络(RNN)主要面临梯度消失和梯度爆炸两个核心问题,这严重影响了其处理长期依赖的能力。此外,还存在一些其他的技术挑战。 一、两个主要问题 (1)梯度消失和梯度爆炸问题 这是RNN中最显著的问题之…

示例:WPF中绑定枚举到ComboBox的方式

一、目的:在开发过程中,经常会需要把枚举绑定到ComboxBox下拉列表中,其实方法有很多,这里面通过MarkupExtension扩展GetEnumSourceExtension去绑定到列表 二、实现 定义GetEnumSourceExtension类 public class GetEnumSourceExte…

Elasticsearch-使用Logstash同步Mysql

1.安装logstash es服务器版本必须和logstash版本一致 7.9.2 在/usr/local/src/下新建logstash文件夹,解压 下载logstash后查看是否安装成功,在logstash的bin目录下输入指令: ./logstash -e input { stdin { } } output { stdout {} }2.my…

【乳业巨擘·数字革命先锋】光明乳业:上市公司科技蜕变,搭贝低代码引领未来新纪元

在这个由科技编织的未来世界里,光明乳业股份有限公司以巨人之姿,傲立于乳业之巅,以其无与伦比的胆识与魄力,引领了一场震撼业界的数字化革命。与低代码领域的创新领袖——搭贝的强强联合,不仅标志着光明乳业在数字化转…

吉林省教育学院学报杂志社吉林省教育学院学报编辑部2024年第5期目录

“研培一体”理论与实践 教师培训管理共同体的职能定位与价值追求 张岩; 1-3 数字化转型背景下教师培训工作的发展路径 李春光; 4-6 挖掘数智潜能,推进教师培训融合创新 鲍赫; 7-9《吉林省教育学院学报》投稿:cn7kantougao163.com 精准培…

AcWing 1273:天才的记忆 ← ST算法求解RMQ问题

【题目来源】https://www.acwing.com/problem/content/1275/【题目描述】 从前有个人名叫 WNB,他有着天才般的记忆力,他珍藏了许多许多的宝藏。 在他离世之后留给后人一个难题(专门考验记忆力的啊!),如果谁…

RockChip Android12 Settings一级菜单

一:概述 在之前的文章中对Android8.1 Settings的流程进行了说明,本章将针对Android12 Settings一级菜单的加载逻辑进行详细说明,Settings版本之间的差异不是很大,有兴趣的同学可自行学习,本文不在做赘述。 Android8.1 Settings说明:RockChip Android8.1 Settings-CSDN博…

创邻科技张晨:期待解锁图技术在供应链中的关联力

近日,创邻科技创始人兼CEO张晨博士受浙江省首席信息官协会邀请,参加数字化转型与企业出海研讨会。 此次研讨会旨在深入探讨数字经济时代下,企业如何有效应对成本提升与环境变化所带来的挑战,通过数字化转型实现提效增益&#xff…

解决Unity-2020 安卓异形屏黑边

背景 Unity 2020.3.17 版本开发的游戏,打apk包,发现两个问题 如图下午所示,实体白色导航栏,阻挡了整个安卓UI界面,难看还影响美观。 安卓系统 12-13 版本手机,异形屏。一侧安全区黑边遮挡,占空间…

第2讲:pixi.js 绘制HelloWorld

基于第0讲和第1讲,我们增添了vite.config.ts文件。并配置了其他的http端口。 此时,我们删除掉没用的东西。 删除 conter.ts、typescript.svg 在main.ts中改成如下内容: import {Application, Text} from pixi.js import ./style.css// 指明…

数组元素的内存地址计算【数据结构与算法C#版】

数组元素被存储在连续的内存空间中,这意味着计算数组元素的内存地址非常容易。给定数组内存地址(首 元素内存地址)和某个元素的索引,我们可以使用下方图 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 观…

C# Winform图形绘制

WinForms 应用程序中的控件是基于窗体的,当控件需要重绘时,它会向父窗体发送一个消息请求重绘。但是,控件本身并不直接处理绘制命令,所以你不能直接在控件上绘制图形。 解决方法: 重写控件的OnPaint方法使用CreateGr…

五大维度大比拼:ChatGPT比较文心一言,你的AI助手选择指南

文章目录 一、评估AI助手的五个关键维度二、ChatGPT和文心一言的比较 评估AI助手的五个关键维度,以及ChatGPT和文心一言的比较如下: 一、评估AI助手的五个关键维度 界面友好性 : 评估标准:用户界面是否直观易用,是否…

Java基础 - 练习(一)打印等腰三角形

Java基础练习 打印等腰三角形,先上代码: public static void main(String[] args) {// 打印等腰三角形System.out.println("打印等腰三角形:");isoscelesTriangle(); } public static void isoscelesTriangle() {// for循环控制行…

探索未来工作新伙伴:机器人流程自动化(RPA)揭秘

想象一下,如果你的日常工作中那些繁琐、重复的任务,比如数据录入、文件整理、邮件发送等,都能自动完成,你将拥有更多时间专注于真正需要创造力和智慧的工作,是不是听起来就像拥有了一个私人助理?这并不是遥…

数据结构之线性表(3)

数据结构之线性表(3) 上文我们了解了线性表的静动态存储的相关操作,此篇我们对线性表中链表的相关操作探讨。 在进行链表的相关操作时,我们先来理解单链表是什么? 1.链表的概念及结构 链表是一种物理存储结构上非连…

C++命名空间

命名空间(namespace)的目的&#xff1a;对标识符的名称进行本地化&#xff0c;以避免命名冲突或者名字污染 #include<stdio.h> #include<stdlib.h>int rand 0; int main() { //C语言没有办法解决类似这种的命名冲突&#xff0c;而C提出了namespace来解决printf(&…

【日常记录】【vue】vite-plugin-inspect 插件的使用

文章目录 1、vite-plugin-inspect2、安装3、使用4、链接 1、vite-plugin-inspect vite-plugin-inspect 可以让开发者在浏览器端就可以看到vue文件编译后的代码、vue文件的相互依赖关系 2、安装 npm i -D vite-plugin-inspect// vite.config.ts import Inspect from vite-plugi…

6.17作业

升级优化自己应用程序的登录界面。 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确&#xff0c;则实现登录界面关闭&#xff0c;另一个应用界面显示。 //发送端头文件…

AI + 3D:用单个图像和文本提示创建可交互的3D世界

你是否曾经梦想过只需一张照片和一些简单的文字描述,就能立即进入一个生动的3D虚拟世界?今天,我们将介绍一个革命性的技术,它就像是一台神奇的3D场景制造机,能够根据你的想象快速构建出令人惊叹的虚拟空间。 一、技术概览 这项技术不仅仅是一个简单的图像到3D的转换工具…