【自然语言处理】P2 PyTorch 基础 - 张量

目录

  • 安装 PyTorch
  • 张量
    • 创建张量
    • 操作张量
    • 索引、切片、联合操作
  • CUDA张量

本系列博文我们将使用 PyTorch 来实现深度学习模型等。PyTorch 是一个开源的、社区驱动的深度学习框架。拥有强大的工具和库生态系统,包含 TorchVision(用于图像处理)、TorchText(用于文本处理)、TorchAudio(用于音频处理)等。

安装 PyTorch

网址:https://pytorch.org/

在这里插入图片描述

根据系统以及是否有 GPU 进行安装 PyTorch 库;

如我在 Windows 电脑上安装 CPU 版本的 PyTorch, Anaconda Prompt 中输入命令为:

pip3 install torch torchvision torchaudio

张量

PyTorch 库的核心是张量,是一种多维的数据结构,类似于 NumPy 中的 ndarray。但是张量在自动微分深度学习方面提供了更多的操作和功能。张量在 PyTorch 中的地位类似于矩阵在 MATLAB 中的地位,是进行计算的基础。

零阶张量: 零阶张量只是一个数字或标量;

一阶张量: 一阶张量是数组或者向量;

二阶张量: 二阶张量是向量数组或矩阵;

N阶张量: 张量可以概括为标量的 N 维数组。


创建张量

torch.tensor():从数据创建张量。
torch.zeros():创建一个指定大小和数据类型的全零张量。
torch.ones():创建一个指定大小和数据类型的全一张量。
torch.rand():创建一个指定大小和数据类型的随机张量。
torch.randn():创建一个指定大小和数据类型的标准正态分布张量。
torch.full():创建一个指定大小和数据类型的填充张量。

e . g . e.g. e.g.

import torch# 从数据创建张量
x = torch.tensor([1, 2, 3])
# 创建3行2列全零张量
zero_tensor = torch.zeros(3, 2)
# 创建3行2列全1张量
one_tensor = torch.ones(3, 2)
# 创建3行2列随机张量
random_tensor = torch.rand(3, 2)
# 创建3行2列标准正态分布张量
normal_tensor = torch.randn(3, 2)
# 创建3行2列填充张量
full_tensor = torch.full((3, 2), 5)

处理 Numpy 与 PyTorch 张量之间的转换很重要:

import torch
import numpy as npnpy = np.random.rand(2, 3)
tf_npy = torch.from_numpy(npy)
print(tf_npy)

由此,我们将 Numpy 数组变换为 PyTorch 张量。


操作张量

import torchx = torch.tensor([[1.2, 2, 3],[4, 5, 6],[7, 8, 9]])# 操作1:获取张量的形状大小
print(x.shape)
print(x.size())# 操作2:计算总和
sum_x = torch.sum(x)
print(sum_x)# 操作3:计算平均值
mean_x = torch.mean(x)
print(mean_x)# 操作4:计算最小值和最大值
min_x = torch.min(x)
max_x = torch.max(x)
print(min_x, max_x)# 操作5:找到最小值和最大值的索引
argmin_x = torch.argmin(x)
argmax_x = torch.argmax(x)
print(argmin_x, argmax_x)

索引、切片、联合操作

索引:

import torchx = torch.tensor([[1.2, 2, 3],[4, 5, 6],[7, 8, 9]])# 根据条件选择元素,被筛选掉的用torch.tensor(x)中x替代
where_tensor = torch.where(x > 2, x, torch.tensor(10))
print(where_tensor)# 根据索引选择元素
index_selected = x[torch.tensor([0, 2])]
print(index_selected)

切片:

import torchx = torch.tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]])# 操作1:获取张量的一部分
subset = x[1:3,2]
print(subset)# 操作2:获取张量的单行元素
element = x[0]
print(element)# 操作3:使用布尔掩码选择元素
mask = x > 2
selected = x[mask]
print(selected)

拼接和堆叠

# 拼接
import torcha = torch.tensor([[1, 2, 3],[4, 5, 6]])b = torch.tensor([[7, 8, 9]])# 拼接张量
# 注意通过 dim 判断行列
cat_tensor = torch.cat((x, y), dim=0)
print(cat_tensor)
# 堆叠
import torcha = torch.tensor([[1, 2],[4, 5],[7, 8]])b = torch.tensor([[3, 11],[6, 12],[9, 13]])# 堆叠张量
# 注意通过dim指定行列
stack_tensor = torch.stack((a, b), dim=1)
print(stack_tensor)

CUDA张量

CUDA张量核心的优势在于它们可以同时执行多个浮点运算,并且高度优化了内存访问模式,从而在执行矩阵乘法和其他线性代数运算时提供了极高的吞吐量。这对于执行深度学习中的大规模并行计算非常有用。

  1. 首先检查 GPU、CUDA 是否可用
import torch
print(torch.cuda.is_available())
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)

如果在含有 GPU 的笔记本显示 CUDA 不可用,可以尝试从 “PyTorch 安装了 CPU 版本”,或者 “GPU 驱动更新” 等角度查找问题。需要注意的是,苹果电脑没有 GPU,自然不存在 CUDA。

  1. 步骤1 CUDA 可用,那么实例化张量并将其移动到 GPU 上
x = torch.rand(3, 3).to(device)

要对 CUDA 和非 CUDA 对象进行操作,需要确保在用一设备上,否则运算将中断。且 GPU CPU 来回移动数据的成本很高,所以典型的过程是在 GPU 上进行并行化的计算,仅在最终结果出来后传输回 CPU。

此外,如果你有多个 GPU,最佳实践是在执行程序时候使用:

CUDA_VISIBLE_DEVICES=0,1,2,3 python main.py

发布:2024/2/2
版本:第一版
如有任何疑问,请联系我,谢谢!

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

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

相关文章

Android Studio非UI线程修改控件——定时器软件

目录 一、UI界面设计 1、UI样式 2、XML代码 二、功能编写 1、定义 2、实现方法 3、功能实现 一、UI界面设计 1、UI样式 2、XML代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android…

Redmine项目管理工具的常见替代方案:从功能到优劣势的全方位分析

RedMine是一个非常受欢迎的项目管理工具&#xff0c;但它并不是万能的。随着时间的推移&#xff0c;许多功能和特性可能会发生变化或被取消。 因此&#xff0c;有许多其他工具可以成为RedMine的替代品。以下是六种可能的选择&#xff1a; 1、Zoho Projects&#xff1a; Zoho Pr…

CSC联合培养博士申请亲历|联系外导的详细过程

在CSC申报的各环节中&#xff0c;联系外导获得邀请函是关键步骤。这位联培博士同学的这篇文章&#xff0c;非常详细且真实地记录了申请过程、心理感受&#xff0c;并提出有益的建议&#xff0c;小编特推荐给大家参考。 2024年国家留学基金委公派留学项目即将开始&#xff0c;其…

【C/C++ 11】贪吃蛇游戏

一、题目 贪吃蛇游戏机制是通过控制蛇上下左右移动并吃到食物得分。 蛇头碰到墙壁或者碰到蛇身就游戏结束。 食物随机生成&#xff0c;蛇吃到食物之后蛇身变长&#xff0c;蛇速加快。 二、算法 1. 初始化游戏地图并打印&#xff0c;地图的边缘是墙&#xff0c;地图的每个坐…

JMeter GUI:测试计划和工作台

什么是测试计划&#xff1f; 测试计划是您添加 JMeter 测试所需元素的地方。 它存储运行所需测试所需的所有元素&#xff08;如线程组、计时器等&#xff09;及其相应的设置。 下图显示了测试计划的示例 测试计划是您添加 JMeter 测试所需元素的地方。 它存储运行所需测试…

Flutter 仿抖音 TikTok 上下滑动 播放视频

Flutter 仿抖音 TikTok 上下滑动 播放视频UI框架&#xff0c;视频播放使用 video_player github&#xff1a;GitHub - PangHaHa12138/TiktokVideo: Flutter 仿抖音 TikTok 上下滑动 播放视频UI框架 实现功能&#xff1a; 1.上下滑动自动播放切换视频&#xff0c;loading 封面…

k8s kubeadm部署安装详解

目录 kubeadm部署流程简述 环境准备 步骤简述 关闭 防火墙规则、selinux、swap交换 修改主机名 配置节点之间的主机名解析 调整内核参数 所有节点安装docker 安装依赖组件 配置Docker 所有节点安装kubeadm&#xff0c;kubelet和kubectl 定义kubernetes源并指定版本…

网络异常案例四_IP异常

问题现象 终端设备离线&#xff0c;现场根据设备ip&#xff0c;ping不通。查看路由器。 同一个路由器显示的终端设备&#xff08;走同一个wifi模块接入&#xff09;&#xff0c;包含不同网段的ip。 现场是基于三层的无线漫游&#xff0c;多个路由器wifi配置了相同的ssid信息&a…

某赛通电子文档安全管理系统 UploadFileToCatalog SQL注入漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

【机器学习】AAAI 会议论文聚类分析

实验五&#xff1a;AAAI 会议论文聚类分析 ​ 本次实验以AAAI 2014会议论文数据为基础&#xff0c;要求实现或调用无监督聚类算法&#xff0c;了解聚类方法。 1 任务介绍 ​ 每年国际上召开的大大小小学术会议不计其数&#xff0c;发表了非常多的论文。在计算机领域的一些大…

【二进制漏洞】缓冲区溢出漏洞

天命&#xff1a;好像复现成功了&#xff0c;又好像没有完全成功 学习视频&#xff1a;抓住漏洞&#xff01;缓冲区溢出漏洞利用实例&#xff0c;如何利用溢出执行Shell Code_哔哩哔哩_bilibili 漏洞复现 实验环境&#xff1a;kali &#xff08;其实啥都试过&#xff0c;windo…

Linux基础知识合集

整理了一下学习的一些关于Linux的一些基础知识&#xff0c;同学们也可以通过公众号菜单栏查看&#xff01; 一、基础知识 Linux基础知识 Linux命令行基础学习 Linux用户与组概念初识 Linux文件与目录权限基础 Linux中文件内容的查看 Linux系统之计划任务管理 二、服务器管理 Vm…

通过与chatGPT交流实现零样本事件抽取

1、写作动机&#xff1a; 近来的大规模语言模型&#xff08;例如Chat GPT&#xff09;在零样本设置下取得了很好的表现&#xff0c;这启发作者探索基于提示的方法来解决零样本IE任务。 2、主要贡献&#xff1a; 提出了基于chatgpt的多阶段的信息抽取方法&#xff1a;在第一阶…

DHCP简介

定义 动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;是一种用于集中对用户IP地址进行动态管理和配置的技术。即使规模较小的网络&#xff0c;通过DHCP也可以使后续增加网络设备变得简单快捷。 DHCP是在BOOTP&#xff08;BOOTstrap Protoc…

[GN] 设计模式—— 创建型模式

文章目录 创建型模式单例模式 -- 确保对象唯一性例子优化饿汉式懒汉式 优缺点使用场景 简单工厂模式例子&#xff1a;优化优缺点适用场景 工厂方法模式 -- 多态工厂的实现例子优缺点优化适用场景 抽象工厂模式 -- 产品族的创建例子优缺点适用场景 总结 创建型模式 单例模式 –…

公共用例库计划--个人版(六)典型Bug页面设计与开发

1、任务概述 本次计划的核心任务是开发一个&#xff0c;个人版的公共用例库&#xff0c;旨在将各系统和各类测试场景下的通用、基础以及关键功能的测试用例进行系统性地归纳整理&#xff0c;并以提高用例的复用率为目标&#xff0c;力求最大限度地减少重复劳动&#xff0c;提升…

接口安全测试

一、后台接口分类 1、接口类别&#xff1a;restful(json) soap(xml) 2、协议 &#xff1a;http https(ssl) 3、restful接口请求类型 get操作是安全的 post的操作是不安全的 同put delete也是不安全的 4、现状和问题 大部分APP的接口都采用restful架构&#xff0c;restful…

G7-Semi-Supervised GAN解读

本文为&#x1f517;365天深度学习训练营 中的学习记录博客 原作者&#xff1a;K同学啊|接辅导、项目定制 我的环境&#xff1a; 1.语言&#xff1a;python3.7 2.编译器&#xff1a;pycharm 3.深度学习框架Pytorch 1.8.0cu111 论文地址 一、理论理解 半监督生成对抗网络&…

C语言系列-联合

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 联合体 联合体类型的声明 联合体的特点 相同成员的结构体和联合体对比 联合体大小的计算 联合的一个练习 联合体 联合体类型的声明 像结构体一样&#xff0c;联合体也是由…

闲聊电脑(4)硬盘分区

夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;上次你说的那个“分区”和“格式化”是什么意思&#xff1f; 冰箱&#xff1a;分区么&#xff0c;就是分…