【自然语言处理】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 np

npy = np.random.rand(2, 3)
tf_npy = torch.from_numpy(npy)
print(tf_npy)

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


操作张量

import torch

x = 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 torch

x = 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 torch

x = 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 torch

a = 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 torch

a = 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
版本:第一版
如有任何疑问,请联系我,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024 IC FPGA 岗位 校招面试记录

引言 各位看到这篇文章时,24届校招招聘已经渐进尾声了。 在这里记录一下自己所有面试(除了时间过短或者没啥干货的一些研究所外,如中电55所(南京),航天804所(上海))的经…

图像去噪——SpatiallyAdaptiveSSID网络推理测试(详细图文教程)

SpatiallyAdaptiveSSID 是一种有效的图像去噪方法,它通过自适应地处理不同区域的噪声,能够在保持图像细节的同时,有效地去除噪声。 目录 一、SpatiallyAdaptiveSSID网络简介二、源码包准备2.1 测试集2.2 模型权重文件 三、测试环境四、推理测…

【Python-环境搭建】

Python-环境搭建 ▼ Python安装► 进入Python官网 地址如下 [Python官网](https://www.python.org/)► Python安装向导对话框► 测试是否安装成功 ▼ PyCharm 安装► Pycharm的下载和安装 ▼► 开始在 Windows 上使用 Python(初学者) ▼ Python安装 ► …

Web3生态系统:构建去中心化的数字社会

随着科技的飞速发展,我们正处在迈向数字未来的道路上,而Web3生态系统则成为这一变革的中心。不仅仅是技术的演进,Web3代表着对传统互联网体系的颠覆,致力于构建一个去中心化的数字社会。本文将深入探讨Web3的核心特征、对金融、社…

2024年美赛B题思路分析 - 搜索潜水器

# 1 赛题 问题B:搜索潜水器 总部位于希腊的小型海上巡航潜艇(MCMS)公司,制造能够将人类运送到海洋最深处的潜水器。潜水器被移动到该位置,并不受主船的束缚。MCMS现在希望用他们的潜水器带游客在爱奥尼亚海底探险&…

MySQL中where和having的区别

前言 数据库中的 WHERE 和 HAVING 子句在 SQL 查询中扮演着关键的角色,帮助我们有效地筛选和过滤数据。这两个子句虽然都用于限定结果集,但它们的应用场景和操作对象存在明显的区别。在理解和运用这两个子句的过程中,我们能够更灵活地进行数据…

MySql主从同步,同步SQL_ERROR 1032解决办法

1.登录从库 mysql -u root -p 2.输入命令查看状态 SHOW SLAVE STATUS\G; 3.找到对应的错误数据位置 Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB: app_push_centerReplicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Tabl…

仰暮计划|“现在不一样了,时代发展了,年轻人都有自己想做的事了,也不急着结婚生育了,我觉得挺好的”

仰暮计划|“现在不一样了,时代发展了,年轻人都有自己想做的事了,也不急着结婚生孩子了,我觉得挺好的” 忆暖行动 口述人:赵凤云(女) 整理人:王鑫雨 河南财经政法大学 202134060501 …

欧拉函数及其代码实现

欧拉函数: 欧拉函数定义:欧拉函数是指对于一个正整数 n ,小于等于 n 且和 n 互质的正整数(包括 1)的个数,记作 φ(n)。 例如φ(8) 4,因为1,3,5,7均和8互质。 性质: 当 n 是质数…

PythonStudio 控件使用常用方式(六)TMemo

PythonStudio是一个极强的开发Python的IDE工具,它使用的是Delphi的控件,常用的内容是与Delphi一致的。但是相关文档并一定完整。现在我试试能否逐步把它的控件常用用法写一点点,也作为PythonStudio的参考。 TMemo就是一个文本框 常用属性 …

java(面向对象基础)

面向对象的三大特征:封装、继承、多态 一、封装 用 类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。 封装规范:合理隐藏,合理暴露(先将成…

sql注入之GETSHELL

2024.2.1 GETSHELL 利用SQL注入获取MYSQL数据库权限的要求: 文件读写基本要求: 是root用户最高权限 知道网站的绝对路径 文件读写注入的原理: 利用文件的读写权限进行注入,它可以写入一句话木马,也可以读取系统文件的敏感信息 文件读写…

飞腾固件在线更新

这次尝试给飞腾D2000+X100的机器在线更新固件。 1 测试说明 首先说下固件版本: D2000 UEFI:edk2-code-3.5.0.rar PBF:imagefixd2000_v1.70.rar X100 x100packv1.7_0909-2.tar 我们今天试验让固件自己升级自己,也就是先用上面的版本做好固件,先烧到D2000和X100的flash…

前端小案例——导航回顶部(HTML+CSS+JS, 附源码)

一、前言 实现功能: 这个案例实现了页面滚动到一定位置时显示"回到顶部"按钮,并且点击按钮能够平滑滚动回页面顶部的功能。 实现逻辑: 页面结构:通过HTML标签定义了页面的基本结构。页面主要由多个div.content组成&am…

Tomcat(2)安装启动步骤及目录内容说明

1、步骤 Tomcat官网下载压缩包,解压: Windows:解压后打开bin目录(这个目录放的是可执行文件,.bat是windows系统可执行程序,.sh是linux系统里使用的)- 找到startup.bat 双击启动(出…

【百度Apollo】自动驾驶的领航者

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

C++进阶--多态

概念 多态是面向对象编程中的一个重要概念,它允许不同类型的对象对同一个消息做出不同的响应。具体的来说,当相同的消息传递给不同的对象时,这些对象能够以不同的方式进行处理,从而产生不同的行为。 对于多态的实现,…

Leetcode 热门百题斩(第二天)

介绍 针对leetcode的热门一百题,解决大多数实习生面试的基本算法题。通过我自己的思路和多种方法,供大家参考。 1.两数之和(题号:1) 方法一 最先想到的就是两个for去遍历匹配。 class Solution {public int[] twoSum(int[]…

QT播放gstreamer命令(三)---使用QMediaPlayer

前文: 因为之前听说过,QMediaPlayer已经集成了gstreamer,但是并没有什么接口来例子来说明,根本看不出来有任何gstreamer的形式,于是在QT5助手里面搜了一下,发现确实有gstreamer的痕迹,但是例子写的极其拉胯,经过自己尝试,终于发现了一种直接使用QMediaPlayer播放gstre…

二进制安全虚拟机Protostar靶场(6)堆的简单介绍以及实战 heap1

前言 这是一个系列文章&#xff0c;之前已经介绍过一些二进制安全的基础知识&#xff0c;这里就不过多重复提及&#xff0c;不熟悉的同学可以去看看我之前写的文章 程序静态分析 https://exploit.education/protostar/heap-one/#include <stdlib.h> #include <unis…