【自然语言处理】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.mzph.cn/news/663871.shtml

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

相关文章

面试经典150题 -- 哈希表(总结)

总的链接 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 383 . 赎金信 用哈希表模拟 ; 用两个长为26的整数数组模拟哈希表,分别统计r和m中的频次,如果在m中字符出现的都比r中的小,那么m一…

日志记录——单片机可执行文件合并

一:需求场景 现在有一片单片机,执行程序包括自定义boot和应用程序app, 在将打包好的固件给到生产是有以下问题,由于要通过jlink烧录boot,然后上电启动boot,通过boot烧录初始化程序,过程过于复杂&#xff0…

Web实战丨基于django+hitcount的网页计数器

文章目录 写在前面Django简介主要程序运行结果系列文章写在后面 写在前面 本期内容 基于djangohitcount的网页计数器 所需环境 pythonpycharm或vscodedjango 下载地址 https://download.csdn.net/download/m0_68111267/88795611 Django简介 Django 是一个开源的、基于 …

消息总线在微服务中的应用

直连式配置中心 上一篇文章介绍了 Spring Cloud 中的分布式配置组件 Config,每个服务节点可以从Config Server 拉取外部配置信息。但是似乎还有一个悬而未决的问题,那就是当服务节点数量非常庞大的时候,我们不可能一台一台服务器挨个去手工触…

Linux系统编程:进程

目录 相关指令 ps指令 top指令 相关函数及其示例 getpid() getpid()示例: fork() 示例: 示例2:fork()返回值 Fathers pid is 14532.This is FartherProcess, pid is 14532.This is SonProcess, pid is 14533. vfork() 示例&am…

RabbitMQ下载与安装

一、Docker安装 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一:在线拉取 docker pull rabbitmq:3-management方式二:从本地加载 上传到虚拟机中后,使用命令加载镜像即可: docker load -i mq.ta…

Docker上安装配置tomcat

目录 1. 拉取镜像 2. 创建运行镜像 3. 查看是否创建成功 ps:如果出现404错误 tomcat目录结构 1. 拉取镜像 这里使用 tomcat:8.5.40 版本作为安装 docker pull tomcat:8.5.40 2. 创建运行镜像 docker run -d --name tomcat -p 8080:8080 \--privilegedtrue …

改进的 K-Means 聚类方法介绍

引言 数据科学的一个中心假设是,紧密度表明相关性。彼此“接近”的数据点是相似的。如果将年龄、头发数量和体重绘制在空间中,很可能许多人会聚集在一起。这就是 k 均值聚类背后的直觉。 我们随机生成 K 个质心,每个簇一个,并将…

webstorm、vscode、HBuilder配置eslint检查

你们好,我是金金金。 场景 每个人写的代码都有自己所属的风格,所以项目中统一代码风格特别重要,新开的项目中如何快速配置ESLint呢? 安装 npm install --save-dev eslint ----安装eslintnpm install --save-dev eslint-plugin-vu…

事件分发机制:从OnTouchListener开始,按钮变色的Demo

要彻底弄清楚事件分发机制,先要明白OnTouchListener的作用。 我们看下Android 1.6上,OnTouchListener的代码定义,源码在线地址:Android 1.6 sdk4 View.java 可以看到,OnTouchListener就是View类中的一个public接口&am…

django+flask警务案件信息管理系统python-5dg53-vue

1)用户在后台页面各种操作可及时得到反馈。 (2)该平台是提供给多个用户使用的平台,警员使用之前需要注册登录。登录验证后,警员才可进行各种操作[10]。 (3)管理员用户拥有信息新增,修…

Git 实战场景过程(工作总结篇)

目录 前言1. Git远程仓库建立分支,本地未显示1.1 问题所示1.2 知识补充 2. Git暂存内容切换分支2.1 问题所示2.2 知识补充 3. Git放弃修改数据3.1 问题所示3.2 知识补充 4. git merge合并查看差异 前言 主要总结工作中的疑惑点,如果你也有相应的场景&am…

跟着cherno手搓游戏引擎【19】抽象纹理

引入: 导入stb_image: GitHub - nothings/stb: stb single-file public domain libraries for C/C 下载复制stb_image.h的内容(8000多行),然后粘到如图位置 stb_image.cpp: #include"ytpch.h" #define STB_IMAGE_IM…

【Java】MybatisPlus入门

学习目标 能够基于MyBatisPlus完成标准Dao开发 能够掌握MyBatisPlus的条件查询 能够掌握MyBatisPlus的字段映射与表名映射 能够掌握id生成策略控制 能够理解代码生成器的相关配置 一、MyBatisPlus简介 1. 入门案例 问题导入 MyBatisPlus环境搭建的步骤? 1.1 Sp…

部署实战--修改jar中的文件并重新打包成jar文件

一.jar文件 JAR 文件就是 Java Archive ( Java 档案文件),它是 Java 的一种文档格式JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,多出了一个META-INF/MANIFEST.MF 文件META-INF/MANIFEST.MF 文件在生成 JAR 文件的时候…

DPVS 多活部署架构部署

一、目标 利用DPVS部署一个基于OSPF/ECMP的提供HTTP服务的多活高可用的测试环境。 本次部署仅用于验证功能,不提供性能验证。 配置两台DPVS组成集群、两台REAL SERVER提供实际HTTP服务。 注:在虚拟环境里面,通过在一台虚拟服务器上面安装FR…

flinkjar开发 自定义函数

编写自定义加密函数,继承ScalarFunction类,实现eval方法,参数个数类型和返回值根据业务来自定义。 import org.apache.flink.table.functions.ScalarFunction; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax…

ELK集群搭建(基础教程)

ELK集群搭建(基础教程) 目录: 机器准备 集群内各台机器安装Elasticsearch 安装部署Kafka(注:每个节点都配置,注意ip不同) 安装logstash工具 安装filebeat ELK收集Nginx的json日志 ELK收集Nginx正常日志和错误日…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TimePicker组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TimePicker组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 编辑 二、TimePicker组件 TextClock组件通过文本将当前系统时间显示在设备上。…

华为配置使用SNMPv1与网管通信示例

配置使用SNMPv1与网管通信示例 组网图形 图1 配置使用SNMPv1与网管通信组网图 SNMP简介配置注意事项组网需求配置思路操作步骤配置文件 SNMP简介 简单网络管理协议SNMP(Simple Network Management Protocol)是广泛应用于TCP/IP网络的网络管理标准协议。S…