5.张量索引操作

(1)索引操作

  • 行列索引
  • 列表索引
print(data[[0, 2], [1, 2]]) #返回(0, 1),(2, 2)两个位置的元素print(data[[[0], [1]], [1, 2]]) # 返回0,1行的1,2列共4个元素
  • 范围索引
print(data[:3, :2]) # 前3行前2列数据print(data[2:, :2]) # 第2行到最后的前2列数据
  • 布尔索引
tensor([[0, 7, 6, 5, 9],[6, 8, 3, 1, 0],[6, 3, 8, 7, 3],[4, 9, 5, 3, 1]])
print(data[data[:, 2] > 5])
print(data[:, data[1] > 5])
输出结果:
tensor([[0, 7, 6, 5, 9],[6, 3, 8, 7, 3]])tensor([[0, 7],[6, 8],[6, 3],[4, 9]])
  • 多维索引
data = torch.randint(0, 10, [3, 4, 5])
print(data)
#获取0轴上的第一个数据
print(data[0, :, :])# 获取1轴上的第一个数据
print(data[:, 0, :])# 获取2轴上的第一个数据
print(data[:, :, 0])

6.张量形状操作

(1)reshape函数

import torchdata = torch.tensor([[10, 20, 30], [40, 50, 60]])# 1.使用shape属性或者size方法都可以获得张量的形状
print(data.shape, data.shape[0], data.shape[1])
print(data.size(), data.size(0), data.size(1))# 2.使用reshape函数修改张量形状
new_data = data.reshape(1, 6)
print(new_data.shape)

(2)squeeze()unsqueeze()函数

  • squeeze函数删除形状为1的维度(降维),unsqueeze函数添加形状为1的维度(升维)
import torchtorch.random.manual_seed(22)
data = torch.randint(0, 10, [3, 4, 5])# 添加维度
data1 = data.unsqueeze(dim = 1).unsqueeze(dim = -1)
print(data1.shape)# 降低维度
print(data1.squeeze().shape)
输出结果:
torch.Size([3, 1, 4, 5, 1])
torch.Size([3, 4, 5])

(3)transpose()permute()函数

  • transpose函数可以实现交换张量形状的指定维度;permute函数可以一次交换更多的维度
import torchtorch.random.manual_seed(22)
data = torch.randint(0, 10, [4, 2, 3, 5])
print(data.shape)# 转换成[3, 4, 5, 2]
data1 = torch.transpose(data, 0, 2)
data2 = torch.transpose(data1, 1, 2)
data3 = torch.transpose(data2, 2, 3)
print(data3.shape)data4 = torch.permute(data, [2, 0, 3, 1])
print(data4.shape)print(data.permute([2, 0, 3, 1]).shape)
输出结果:
torch.Size([4, 2, 3, 5])
torch.Size([3, 4, 5, 2])
torch.Size([3, 4, 5, 2])
torch.Size([3, 4, 5, 2])  

(4)view()和contiguous()函数

  • view函数也可以用于修改张量的形状,只能用于存储在整块内存中的张量

  • 一个张量经过了transpose或者permute函数的处理之后,就无法使用view函数进行形状操作,如果要使用view函数,需要使用contiguous()变得连续以后再使用view函数

import torchtorch.random.manual_seed(22)
data = torch.randint(0, 10, [2, 3])
print(data.shape)# 判断内存是否连续
print(data.is_contiguous())print(data.view(-1).shape)data1 = torch.transpose(data, 0, 1)
print(data1.is_contiguous()) # 内存不连续data2 = data1.contiguous()
print(data2.view(-1).shape)if data.is_contiguous():data.view(-1)
else:data.contiguous().view(-1)
输出结果:
torch.Size([2, 3])
True
torch.Size([6])
False
torch.Size([6])

7.张量拼接操作

  • torch.cat():可以将两个张量根据指定的维度拼接起来,不改变维度数
import torch
data1 = torch.randint(0, 10, [1, 2, 3])
data2 = torch.randint(0, 10, [1, 2, 3])
print(data1)
print(data2)# 1.按0维度拼接
new_data1 = torch.cat([data1, data2], dim = 0)
# print(new_data1)
print(new_data1.shape)# 2.按1维度拼接
new_data2 = torch.cat([data1, data2], dim = 1)
# print(new_data2)
print(new_data2.shape)# 3.按2维度拼接
new_data3 = torch.cat([data1, data2], dim = 2)
# print(new_data3)
print(new_data3.shape)
输出结果:
tensor([[[5, 1, 8],[8, 9, 5]]])
tensor([[[5, 2, 9],[0, 5, 6]]])
torch.Size([2, 2, 3])
torch.Size([1, 4, 3])
torch.Size([1, 2, 6])

8.自动微分模块

  • 训练神经网络时,最常用的算法就是反向传播。在该算法中,参数(模型权重)会根据损失函数关于对应参数的梯度进行调整。为了计算这些梯度,pytorch内置了名为torch.autograd的微分引擎,它支持任意计算图的自动梯度计算
"""w = w - L(w.grad)"""
import torch# 数据  特征+目标
x = torch.tensor(5)
y = torch.tensor(0.)# 权重  偏置
w = torch.tensor(1, requires_grad=True,dtype = torch.float32)
b = torch.tensor(3, requires_grad=True, dtype = torch.float32)# 预测
z = w*x + b# 损失
loss = torch.nn.MSELoss()
loss = loss(z, y)# 微分
loss.backward()#梯度
print(w.grad)
print(b.grad)
输出结果:
tensor(80.)
tensor(16.)
import torchx = torch.ones(2, 5)
y = torch.zeros(2, 3)w = torch.randn(5, 3, requires_grad=True)
b = torch.randn(3, requires_grad=True)z = torch.matmul(x, w) + bloss = torch.nn.MSELoss()
loss = loss(z, y)loss.backward()print(w.grad)
print(b.grad)
输出结果:
tensor([[0.2782, 1.4126, 0.4037],[0.2782, 1.4126, 0.4037],[0.2782, 1.4126, 0.4037],[0.2782, 1.4126, 0.4037],[0.2782, 1.4126, 0.4037]])
tensor([0.2782, 1.4126, 0.4037])

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

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

相关文章

Web安全:CSRF的攻击原理与防御措施

什么是 CSRF? CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种利用 浏览器自动携带 Cookie 的机制,诱骗用户在已登录目标网站的情况下,执行恶意操作的攻击方式。 攻击核心特点: 攻击者 不…

学习记录2025

1、Cmake相关 cmake -S . -B build -S . 表示CMakeLists.txt在哪个目录 -B build CMake生成结果在哪个路径 build就是路径名 简短 cmake -B build 或进入build 文件夹下 cmake cmake --build build 在build文件夹下编译 常量:CMAKE_CURRENT_LIST_DIR CMAKE…

GIT操作 学习

登录gitee登录方式:通过网站登录,使用注册时的账号(通常是手机号)和密码进行认证创建仓库 新建仓库步骤命名规范:仓库名称应尽量符合规范,避免与已有仓库冲突,建议使用有意义的命名…

[论文精读]StruQ: Defending Against Prompt Injection with Structured Queries

StruQ: Defending Against Prompt Injection with Structured Queries [2402.06363] StruQ: Defending Against Prompt Injection with Structured Queries usenix security 2025 提示注入攻击是一个重要的威胁:它们诱使模型偏离原始应用程序的指令,转…

磁悬浮轴承的反馈线性化:非线性控制的智能解耦之道

摘要:磁悬浮轴承凭借无摩擦、高速度、长寿命等优势,成为高速旋转机械的理想支撑方案。然而,其本质非线性与强耦合特性使得传统线性控制方法难以满足高性能要求。本文深入解析反馈线性化技术如何精确解除磁悬浮系统的非线性耦合,揭示其从微分几何理论到工程实现的核心路径,…

探寻《答案之书》:在随机中寻找生活的指引

我强烈推荐4本可以改变命运的经典著作: 《寿康宝鉴》在线阅读白话文《欲海回狂》在线阅读白话文《阴律无情》在线阅读白话文《了凡四训》在线阅读白话文 在快节奏的现代生活中,人们常常面临各种困惑与抉择。当常规的思考与决策方式无法带来清晰答案时&am…

【PTA数据结构 | C语言版】计算1~n平方的和加上1~n的和

本专栏持续输出数据结构题目集,欢迎订阅。 文章目录 题目代码 题目 给定正整数 n,请编写程序,求 (12⋯n^2 )(12⋯n) 的值。 输入格式: 输入在一行中给出正整数 n(≤100)。 输出格式: 在一行中…

Assistant API的原理及应用

🧠 什么是 Assistants API? 📅 **发布日期:**2023年11月6日,OpenAI在开发者大会上发布了 Assistants API —— 一款面向开发者的工具,用于在应用中构建 AI 助手。 ✅ 它可以做什么? Assistants …

《北京市加快推动“人工智能+医药健康“创新发展行动计划(2025-2027年)》深度解读

引言 随着新一轮科技革命和产业变革的深入推进,人工智能技术与医药健康的深度融合已成为全球科技创新的重要方向。北京市于2025年7月正式发布《北京市加快推动"人工智能+医药健康"创新发展行动计划(2025-2027年)》,旨在充分发挥北京在人工智能技术策源、头部医疗…

DPDK 关于 IOMMU 设置

一、IOMMU 基础概念 定义:IOMMU(Input/Output Memory Management Unit)即输入 / 输出内存管理单元,它是一种硬件机制,用于将设备发出的内存访问请求进行地址转换。在现代计算机系统中,它在设备与内存之间起到桥梁作用,提供内存保护和设备隔离功能。作用: 内存保护:防止…

pg_class 系统表信息

SELECT c.relname, c.relkind, CASE WHEN c.relkind r THEN 普通表 WHEN c.relkind p THEN 分区表 WHEN c.relkind f THEN 外表 WHEN c.relkind v THEN 视图 WHEN c.relkind m THEN 物化视图 ELSE 其他 END as table_type_desc FROM pg_class c JOIN pg_namespace …

【C++开源库使用】使用libcurl开源库发送url请求(http请求)去下载用户头像文件(附完整源码)

目录 1、libcurl介绍 2、libcurl库源码下载与编译 3、调用libcurl库的API接口实现http/https请求发送,实现头像文件下载 4、发送图片url下载图片文件的完整代码展示 5、使用libcurl发送https请求时可能会遇到的两个错误 在某SDK项目中,第三方…

在Docker容器中更改,保存为新的镜像

# 1. 进入原始容器 docker run -it --name mydev ubuntu:20.04 /bin/bash# 2. 在容器内做大量修改 apt update && apt install -y python3 mkdir /app && echo print("Hello from modified container") > /app/app.py# 3. 退出容器 exit# 4. 保存…

【网络与爬虫 13】智能伪装:Scrapy-Fake-UserAgent反检测技术实战指南

【网络与爬虫 13】智能伪装:Scrapy-Fake-UserAgent反检测技术实战指南 关键词:Scrapy-Fake-UserAgent、反爬虫、智能伪装、浏览器指纹、用户代理、爬虫检测规避、自动更新UA 摘要:本文深入解析Scrapy-Fake-UserAgent库的工作原理与应用技巧&a…

前端开发常见问题

前端开发常见问题技术文章大纲 引言 简要介绍前端开发在当前技术环境中的重要性,以及开发者常遇到的挑战和痛点。 浏览器兼容性问题 不同浏览器对CSS、JavaScript的支持差异常见的Polyfill和转译工具(如Babel、PostCSS)如何利用Can I Use…

文心开源大模型ERNIE-4.5-0.3B-Paddle私有化部署保姆级教程及技术架构探索

一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.gitcode.com/theme/1939325484087291906 前言 2025年6月30日,百度正式开源文心大模型4.5系列(ERNIE 4.5),涵盖10款不同参数规模的模型&#xff0…

【操作系统】内存管理

要求: 1、在该实验中,采用可变分区方式完成对存储空间的管理(即存储空间的分配与回收工作)。 2、设计用来记录主存使用情况的数据结构:已分区表和空闲分区表。 3、在设计好的数据结构上设计一个主存分配算法&#xff0…

【算法笔记】5.LeetCode-Hot100-矩阵专项

1. 矩阵置零(t73) 中等难度,题目示例如下: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用原地算法。示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&…

ORACLE 日常查询

一. 查询索引相关1. 查询索引所在的表空间,单个索引的大小SELECT ui.table_name, us.segment_name AS index_name, us.tablespace_name,ROUND(SUM(us.bytes) / 1024 / 1024 / 1024, 2) AS total_size_GB FROM dba_indexes ui JOIN dba_segments us ON ui.index_name…

【DeepSeek实战】17、MCP地图服务集成全景指南:高德、百度、腾讯三大平台接入实战

引言:为什么MCP是地图服务的下一代革命? 在数字化时代,位置服务已成为电商、出行、物流等行业的核心基础设施。但单一地图服务商的局限性日益凸显:某外卖平台因高德地图API突发故障导致30分钟订单配送延迟,某打车软件因百度地图路线规划偏差引发用户投诉激增,某物流企业…