Pytorch基础操作
面试的时候,PhD看我简历上面写了”熟悉pytorch框架“,然后就猛猛提问了有关于tensor切片的问题…当然是没答上来,因此在这里整理一下pytorch的一些基础编程语法,常看常新
PyTorch基础操作全解
一、张量初始化
PyTorch的核心数据结构是torch.Tensor
,初始化方法灵活多样:
1. 基础初始化
import torch# 未初始化张量(内存中可能存在随机值)a = torch.empty(3, 2) # 3x2的未初始化矩阵# 均匀分布随机数 [0,1)b = torch.rand(2, 3) # 2x3随机矩阵# 全零矩阵(显式指定类型)c = torch.zeros(4, 3, dtype=torch.long) # 4x3的长整型零矩阵# 从列表创建d = torch.tensor([5.5, 3]) # 直接数值初始化
2. 基于已有张量的初始化
x = torch.rand(2, 2)# 继承原有张量属性(形状/设备)new_tensor = x.new_ones(3, 3, dtype=torch.double) # 3x3全1矩阵,继承x的设备# 正态分布(继承形状)like_tensor = torch.randn_like(x, dtype=torch.float) # 与x同形的正态分布
二、张量属性与运算
1. 关键属性
print(x.dtype) # 数据类型 torch.float32print(x.device) # 存储设备 cpu/cuda:0print(x.shape) # 等价于x.size()
2. 基本运算(加法/矩阵乘法/张量形状操作)
# 加法(三种等价方式)result1 = a + bresult2 = torch.add(a, b)a.add_(b) # in-place操作(会修改a)# 矩阵乘法mat1 = torch.randn(2, 3)mat2 = torch.randn(3, 2)product = torch.mm(mat1, mat2) # 2x2结果矩阵# 形状操作reshaped = x.view(4) # 展平为1D(必须连续内存)resized = x.reshape(-1) # 自动推断维度(处理非连续内存)
view(-1)自动推断维度
# 输入序列 (batch=2, seq_len=5, features=10)seq_data = torch.randn(2, 5, 10)# 转换为(batch*seq_len, features)reshaped = seq_data.view(-1, 10) # 形状[10, 10]print(reshaped.shape) # torch.Size([10, 10])
3. 类型转换
float_tensor = x.to(torch.float64) # 显式转换类型gpu_tensor = x.cuda() # 转移至GPU
三、高级切片与索引
1. 三维张量切片(面试题解析)
假设有张量 tensor = torch.randn(5, 4, 6)
:
• 第一个维度取第一个元素:tensor[0]
(等价于tensor[0, :, :]
)
• 第二个维度取全部元素::
或 ...
• 第三个维度取奇数索引元素:1::2
(从索引1开始,步长2)
完整解:
result = tensor[0, :, 1::2] # shape变为 (4, 3)
2. 高级索引技巧
# 布尔掩码mask = tensor > 0.5selected = tensor[mask]# 组合索引indices = torch.tensor([0, 2])partial = tensor[:, indices, :]
四、与NumPy的互操作
1. 转换机制
# Tensor -> ndarraynumpy_array = tensor.numpy() # CPU张量直接转换# ndarray -> Tensortorch_tensor = torch.from_numpy(numpy_array)# GPU张量转换cpu_tensor = gpu_tensor.cpu()numpy_from_gpu = cpu_tensor.numpy()
2. 内存共享特性:底层其实共享一套内存
a = torch.ones(3)b = a.numpy()a.add_(1) # 修改张量print(b) # [2., 2., 2.] 同步变化
五、扩展知识
一、自动求导机制
- 核心概念
PyTorch使用动态计算图实现自动微分:
• requires_grad:标记需要跟踪梯度的张量
• 计算图:记录张量间的运算关系(正向传播)
• backward():反向传播计算梯度
• grad属性:存储梯度值(默认会累积)
- 基础示例
x = torch.tensor(2., requires_grad=True)y = x**2 + 3*x # 计算图建立y.backward() # 反向传播print(x.grad) # 输出:tensor(7.) # 导数计算:dy/dx = 2x + 3 → 2*2 + 3 = 7
- 梯度累积特性
第二次反向传播前必须清除梯度
# 第二次反向传播前必须清除梯度x.grad.zero_() # 梯度清零y = x**3y.backward()print(x.grad) # 3x² → 3*(2)^2 = 12
- 非标量梯度处理
# 多输出系统需要指定gradient参数x = torch.randn(3, requires_grad=True)y = x * 2v = torch.tensor([0.1, 1.0, 0.001], dtype=torch.float)y.backward(v) # 加权反向传播print(x.grad) # 输出:tensor([0.2000, 2.0000, 0.0020])
- 梯度控制上下文
# 禁用梯度计算(节约内存)with torch.no_grad():inference = x * 2 # 不会记录计算图print(inference.requires_grad) # False# 临时分离张量detached_x = x.detach() # 创建无需梯度的副本
二、张量拼接操作
- 维度拼接 (torch.cat)
必须保证维度匹配,dim=0(第一个维度拼接),dim=1(第二个维度拼接)
# 在现有维度上拼接a = torch.randn(2, 3)b = torch.randn(4, 3)concat_0 = torch.cat([a, b], dim=0) # 形状(6,3)concat_1 = torch.cat([a, a], dim=1) # 形状(2,6)
- 新增维度拼接 (torch.stack)
新增维度拼接使用torch.stack,新增第零个维度维度拼接torch.stack([c, d], dim=0),新增最后一个维度torch.stack([c.T, d.T], dim=2)
# 创建新维度c = torch.randn(3, 4)d = torch.randn(3, 4)stack_0 = torch.stack([c, d], dim=0) # 形状(2,3,4)stack_2 = torch.stack([c.T, d.T], dim=2) # 形状(3,4,2)
- 拼接规则验证
try:# 维度不匹配报错invalid = torch.cat([a, b], dim=1) except RuntimeError as e:print(f"Error: {e}") # 非拼接维度尺寸不一致
三、广播机制详解——两个张量维度不同时,自动对齐维度(复制出来直接补充)
- 广播规则
当两个张量维度不同时:
-
从右向左对齐维度
-
维度相容条件:
• 维度大小相等
• 其中一个维度为1
-
自动扩展:将尺寸为1的维度复制到匹配对方
-
典型示例
# 案例1:向量+标量a = torch.tensor([1, 2, 3])b = torch.tensor(5)print(a + b) # [6,7,8]# 案例2:矩阵+向量matrix = torch.ones(2, 3) # (2,3)vector = torch.arange(3) # (3,) → (1,3) → (2,3)print(matrix + vector)# [[0,1,2],# [0,1,2]] + [[1,1,1],# [1,1,1]] = [[1,2,3],# [1,2,3]]# 案例3:三维广播tensor_3d = torch.ones(4, 3, 2)tensor_2d = torch.tensor([[0], [1], [2]]) # (3,1) → (4,3,2)result = tensor_3d + tensor_2dprint(result.shape) # (4,3,2)
- 广播失败案例
try:a = torch.ones(3, 4)b = torch.ones(2, 5)c = a + bexcept RuntimeError as e:print(f"Error: {e}") # 无法广播
四、综合应用示例
- 梯度控制与广播的结合
with torch.no_grad():base = torch.ones(2, 2)delta = torch.tensor([1., 2.]) # 广播为(2,2)modified = base * deltaprint(modified) # 无梯度跟踪# 输出:# tensor([[1., 2.],# [1., 2.]])
- 拼接与自动求导
x = torch.tensor([1., 2.], requires_grad=True)y = torch.cat([x, x**2], dim=0) # 拼接成[1,2,1,4]loss = y.sum() # 1+2+1+4 = 8loss.backward()print(x.grad) # [1+2x, 2+0] → [1+2*1=3, 2+0=2]# 输出:tensor([3., 2.])
相关文章:
Pytorch基础操作
面试的时候,PhD看我简历上面写了”熟悉pytorch框架“,然后就猛猛提问了有关于tensor切片的问题…当然是没答上来,因此在这里整理一下pytorch的一些基础编程语法,常看常新 PyTorch基础操作全解 一、张量初始化 PyTorch的核心数据…...
Femap许可证安装与配置指南
在电磁仿真领域,Femap凭借其卓越的性能和广泛的应用场景,已成为许多工程师和科研人员的首选工具。为了确保您能够顺利安装和配置Femap许可证,本文将提供详细的安装和配置指南,帮助您快速完成设置,开启高效的仿真之旅。…...
家用和类似用途电器的安全 第1部分:通用要求 与2005版差异(7)
文未有本标准免费下载链接。 ——增加了“对峰值电压大于15kV的,其放电电能应不超过350mJ”的要求(见8.1.4) 1. GB/T4706.1-2024: 8.1.4 如果易触及部件为下述情况,则不认为其是带电的。 ——该部件由安全特低电压供电,且: 对…...
基于Browser Use + Playwright 实现AI Agent操作Web UI自动化
Browser Use是什么 Browser Use是一个开源项目官网:Browser Use - Enable AI to control your browser,专为大语言模型(LLM)设计的只能浏览器工具,能够让AI像人类一样自然的浏览和操作网页,支持多标签页管…...
【题解-洛谷】B4302 [蓝桥杯青少年组省赛 2024] 出现奇数次的数
题目:B4302 [蓝桥杯青少年组省赛 2024] 出现奇数次的数 题目描述 奇数:指不能被 2 2 2 整除的整数。 例如: 3 3...
Redis SETNX:分布式锁与原子性操作的核心
SETNX 是 Redis 中的一个经典命令,全称是 Set if Not eXists(当键不存在时设置值)。它的核心作用是原子性地完成 “检查并设置” 操作,常用于分布式锁、防止重复提交等需要 “独占性” 的场景。 一、基本语法与返回值 命令格式&…...
常见字符串相似度算法详解
目录 引言 一、Levenshtein距离(编辑距离) 1.1 算法原理 1.2 Java实现 1.3 springboot中实现 二、Jaro-Winkler相似度 2.1 算法特点 2.2 Java实现 三、余弦相似度(向量空间模型) 3.1 实现步骤 3.2 Java实现 3.3 简化版…...
红蓝对抗中的网络安全设备操作手册
目录 🔐 关键要点 设备操作与实战应用 📊 1. 防火墙 (Firewall) 蓝队(防御)用法 红队(攻击)用法 🔍 2. 入侵检测/防护系统 (IDS/IPS) 蓝队(防御)用法 红队&#…...
用python实现汉字转拼音工具
用python实现汉字转拼音工具 主要功能特点: 多种拼音风格选择(带声调符号、数字声调、无声调)输出模式:可以选择“普通模式”(仅拼音)或“拼音注音”(每个汉字的拼音显示在上方)可…...
spring中的Interceptor使用说明
一、Interceptor 的核心概念 Interceptor(拦截器) 是 Spring MVC 提供的一种机制,用于在请求处理的不同阶段插入自定义逻辑。其核心作用包括: • 预处理:在控制器方法执行前进行权限校验、日志记录等。 • 后处理&am…...
Wi-Fi(无线局域网技术)
Wi-Fi(Wireless Fidelity,无线保真)是通过无线电波传输数据的技术,它使设备能够通过无线连接方式访问网络、共享文件或连接互联网。Wi-Fi已经成为现代家庭、办公室以及公共场所中常见的无线通信方式,支持的设备包括手机…...
MySQL Host 被封锁解决方案(全版本适用 + Java 后端优化)
引言 MySQL 中 “Host is blocked because of many connection errors” 是生产环境常见问题,若处理不当会导致服务中断。本文结合 MySQL 官方文档(5.5/8.0)、Java 后端最佳实践及企业级经验,提供从 “快速解封” 到 “根源优化”…...
分类预测 | Matlab实现PSO-RF粒子群算法优化随机森林多特征分类预测
分类预测 | Matlab实现PSO-RF粒子群算法优化随机森林多特征分类预测 目录 分类预测 | Matlab实现PSO-RF粒子群算法优化随机森林多特征分类预测分类效果**功能概述****算法流程** 分类效果 功能概述 数据预处理 读取Excel数据集,划分训练集(前260行&#…...
【苍穹外卖】Day01—Mac前端环境搭建
目录 一、安装Nginx (一)安装Homebrew (二)Homebrew安装Nginx 1. 执行安装命令: 2. 验证安装: (三)启动与停止Nginx 二、配置Nginx 1. 替换nginx.conf 2. 替换html文件夹 三…...
anaconda创建环境出错HTTPS
报错信息 warnings.warn( /home/ti-3/anaconda3/lib/python3.12/site-packages/urllib3/connectionpool.py:1099: InsecureRequestWarning: Unverified HTTPS request is being made to host ‘repo.anaconda.com’. Adding certificate verification is strongly advised. Se…...
Nginx 强制 HTTPS:提升网站安全性的关键一步
在当今互联网时代,网站的安全性至关重要。使用 HTTPS 协议可以有效保护用户数据,防止信息泄露和中间人攻击。本文将详细介绍如何在 Nginx 中设置强制 HTTPS,确保所有 HTTP 请求都被自动重定向到 HTTPS。 一、背景与重要性 HTTPS(…...
青藏高原边界数据总集
关键数据集分类:地表参数数据集空间分辨率:m共享方式:开放获取数据大小:265.87 KB数据时间范围:2016元数据更新时间:2022-04-18 数据集摘要 此边界数据总集包含五种类型的边界: 1、TPBoundary_2500m&#…...
AI赋能R-Meta分析核心技术:从热点挖掘到高级模型
随着人工智能技术的不断进步,Meta分析作为科学研究中的一种重要方法,也在不断地被赋予新的活力。特别是以ChatGPT为代表的AI大语言模型,为Meta分析提供了更为高效和智能的工具。本文将详细介绍AI赋能R-Meta分析的核心技术,并结合实…...
基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析实践技术应用
在自然和社会科学领域有大量与地理或空间有关的数据,这一类数据一般具有严重的空间异质性,而通常的统计学方法并不能处理空间异质性,因而对此类型的数据无能为力。以地理加权回归为基础的一系列方法:经典地理加权回归,…...
GPT 等decoder系列常见的下游任务
下面用一句话+四个例子,把上面那张“所有下游任务都要微调”架构图说清楚: 核心思路:不管你要做什么任务,都用同一个 Transformer(这里是 GPT/Decoder-Only 模型)当“特征抽取器”&a…...
java面试每日一背 day1
1.什么是缓存穿透 缓存穿透是指查询一个数据库中根本不存在的数据,导致这个查询请求绕过缓存直接访问数据库的情况。这种情况如果频繁发生,会对数据库造成不必要的压力。 典型特征: (1)查询的数据在数据库和缓存中都…...
Spring Boot AI 之 Chat Client API 使用大全
ChatClient提供了一套流畅的API用于与AI模型交互,同时支持同步和流式两种编程模型。 流畅API包含构建Prompt组成元素的方法,这些Prompt将作为输入传递给AI模型。从API角度来看,Prompt由一系列消息组成,其中包含指导AI模型输出和行为的指令文本。 AI模型主要处理两类消息: …...
初识Linux · 五种IO模型和非阻塞IO
目录 前言: 五种IO模型 什么是IO IO模型 非阻塞IO 前言: 前文我们已经将网络的基本原理介绍完了,都是通过围绕TCP/IP四层协议,将应用层,传输层,网络层,数据链路层全部介绍完毕,…...
牛客网NC15869:长方体边长和计算问题解析
牛客网NC15869:长方体边长和计算问题解析 题目描述 问题分析 设长方体的三条边长为 x, y, z根据题意,三个面的面积分别为: 第一个面面积:a x * y第二个面面积:b x * z第三个面面积:c y * z 解题思路 通过三个面…...
Python60日基础学习打卡D32
我们已经掌握了相当多的机器学习和python基础知识,现在面对一个全新的官方库,看看是否可以借助官方文档的写法了解其如何使用。 我们以pdpbox这个机器学习解释性库来介绍如何使用官方文档。 大多数 Python 库都会有官方文档,里面包含了函数…...
Android本地语音识别引擎深度对比与集成指南:Vosk vs SherpaOnnx
技术选型对比矩阵 对比维度VoskSherpaOnnx核心架构基于Kaldi二次开发ONNX Runtime + K2新一代架构模型格式专用格式(需专用工具转换)ONNX标准格式(跨框架通用)中文识别精度89.2% (TDNN模型)92.7% (Zipformer流式模型)内存占用60-150MB30-80MB迟表现320-500ms180-300ms多线程…...
Flink 核心概念解析:流数据、并行处理与状态
一、流数据(Stream Data) 1. 有界流(Bounded Stream) 定义:有明确起始和结束时间的数据集合,数据量固定,处理逻辑通常是一次性计算所有数据。 典型场景: 历史交易数据统计…...
logits是啥、傅里叶变换
什么是logtis? 在深度学习的上下文中,logits 就是一个向量,下一步通常被投给 softmax/sigmoid 的向量。。 softmax的输出是分类任务的概率,其输入是logits层。 logits层通常产生-infinity到 infinity的值,而softmax层…...
【机器学习基础】机器学习与深度学习概述 算法入门指南
机器学习与深度学习概述 算法入门指南 一、引言:机器学习与深度学习(一)定义与区别(二)发展历程(三)应用场景 二、机器学习基础(一)监督学习(二)无…...
Ajax研究
简介 AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用…...
小数第n位--快速幂+数学
1.快速幂,a*10的n2次方/b可以实现整数位3位是答案,但是数太大会超限,就要想取余 2.要是取前三位的话,那么肯定就是结果取余1000,对于除法来说,就是分母取余b*1000; 蓝桥账户中心 #include<…...
Python包管理工具uv 国内源配置
macOS 下 .config/uv/uv.toml内 pip源 [[index]] url "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/" default true#uv python install 下载源配置无效,需要在项目里配置 # python-install-mirror "https://mirror.nju.edu.cn/githu…...
RK3588 RKNN ResNet50推理测试
RK3588 RKNN ResNet50推理测试 一、背景二、性能数据三、操作步骤3.1 安装依赖3.2 安装rknn-toolkit,更新librknnrt.so3.3 下载推理图片3.4 生成`onnx`模型转换脚本3.5 生成rknn模型3.6 运行rknn模型一、背景 在嵌入式设备上进行AI推理时,我们面临着算力有限、功耗敏感等挑战…...
RUP的9个核心工作流在电商平台项目中的拆解
以下是对RUP的9个核心工作流在电商平台项目中的每个步骤的极度细化拆解,包含具体操作、角色分工、输入输出和案例细节: 1. 业务建模(Business Modeling) 步骤拆解: 识别业务参与者 操作:与市场部、运营部开会,列出所有业务角色(买家、卖家、物流商、支付网关)。 输…...
C++类和对象(2)
类的默认成员函数 类的6个默认成员函数:构造函数、析构函数、拷贝构造函数、赋值运算符重载、取地址& 及 const取地址 操作符重载。 默认成员函数:用户可以实现,但当不显式实现时,编译器会自动生成的成员函数。 构造函数 …...
I.MX6U Mini开发板通过GPIO口测试光敏传感器
原理图 对应的Linux sysfs引脚编号为1,即可导出为gpio1引脚对应规则参考:https://blog.csdn.net/qq_39400113/article/details/127446205 配置引脚参数 #导出编号为1的GPIO引脚(对于I.MX6UL来说,也就是GPIO0_IO1/GPIO_1࿰…...
AI工程师系列——面向copilot编程
前言 笔者已经使用copilot协助开发有一段时间了,但一直没有总结一个协助代码开发的案例,特别是怎么问copilot,按照什么顺序问,哪些方面可以高效的生成需要的代码,这一次,笔者以IP解析需求为例,沉淀一个实践案例,供大家参考 当然,其实也不局限于copilot本身,类似…...
左手腾讯CodeBuddy 、华为通义灵码,右手微软Copilot,旁边还有个Cursor,程序员幸福指数越来越高了
当前AI编程助手的繁荣让开发者拥有了前所未有的高效工具选择。从腾讯的CodeBuddy、阿里的通义灵码,到微软的GitHub Copilot和新兴的Cursor,每个工具都有其独特的优势,让程序员可以根据项目需求和个人偏好灵活搭配使用。以下是它们的核心特点及…...
【VLNs篇】02:NavGPT-在视觉与语言导航中使用大型语言模型进行显式推理
方面 (Aspect)内容总结 (Content Summary)论文标题NavGPT: 在视觉与语言导航中使用大型语言模型进行显式推理 (NavGPT: Explicit Reasoning in Vision-and-Language Navigation with Large Language Models)核心问题探究大型语言模型 (LLM) 在复杂具身场景(特别是视…...
力扣-有效三角形的个数
1.题目描述 2.题目链接 611. 有效三角形的个数 - 力扣(LeetCode) 3.题目代码 class Solution {public int triangleNumber(int[] nums) {//先排序Arrays.sort(nums);//若a<b<c,三角形条件可以优化为:ab>cint tempnums.length-1,sum0;while(…...
[Vue]跨组件传值
父子组件传值 详情可以看文章 跨组件传值 Vue 的核⼼是单向数据流。所以在父子组件间传值的时候,数据通常是通过属性从⽗组件向⼦组件,⽽⼦组件通过事件将数据传递回⽗组件。多层嵌套场景⼀般使⽤链式传递的⽅式实现provideinject的⽅式适⽤于需要跨层级…...
Cross-Mix Monitoring for Medical Image Segmentation With Limited Supervision
ζ \zeta ζ is the hyperparameter that controls the mixture rate, u ^ m \hat{u}_m u^m是mixed version 作者未提供代码...
采用线性优化改进评估配电网的灵活性范围
1引言 在本文中,柔性一词被定义为“响应外部信号对发电或消耗的修正”。 文章组织结构如下:第二节介绍了代表典型柔性配电网资源技术局限性的线性模型;在第三节中建立了一个线性优化问题;第四节提出了聚合算法;第五节评…...
用户缓冲区
1. 基本概念 1.1 用户空间与内核空间 用户空间(User Space):用户应用程序运行的内存空间,具有较低的权限,无法直接访问硬件和内核数据结构。内核空间(Kernel Space):操作系统内核运…...
1.4 C++之运算符与表达式
运算符与表达式教程 目标 掌握算术运算符(, -, *, /)和逻辑运算符(&&, ||, !)。理解表达式优先级规则。实现一个简单计算器程序。 一、算术运算符:像数学课上的加减乘除 1. 四种基本运算 加法(…...
目标检测基础知识
如今,使用最新的驾驶辅助技术(如车道检测、盲点、交通信号灯等)驾驶汽车已经很常见。 如果我们退后一步来了解幕后发生的事情,我们的数据科学家很快就会意识到系统不仅对对象进行分类,而且还在场景中(实时…...
实时监控服务器CPU、内存和磁盘使用率
实时监控服务器CPU、内存和磁盘使用率 监控内存使用率: free -g | awk NR2{printf "%.2f%%\t\t", $3*100/$2 }awk NR2{...} 取第二行(Mem 行)。 $3 为已用内存,$2 为总内存,$3*100/$2 即计算使用率。监控磁…...
前端JavaScript-嵌套事件
点击 如果在多层嵌套中,对每层都设置事件监视器,试试看 <!DOCTYPE html> <html lang"cn"> <body><div id"container"><button>点我!</button></div><pre id"output…...
【ULR #1】打击复读 (SAM, DAG链剖分)
好牛的题。 DAG链剖分好牛的 trick。 题意 给定一个字符集大小为 4 4 4,长度为 n n n 的字符串 S S S,同时给定两个长度为 n n n 的数组 { w l i } , { w r i } \{wl_i\}, \{wr_i\} {wli},{wri}。 定义一个字符串 T T T 的左权值为 v l ( T…...
Web3 领域中的一些专业术语
1. Uniswap 是什么: Uniswap 是一个去中心化的交易所,运行在以太坊区块链上,相当于一个“无人管理的货币兑换市场”。它允许用户直接用加密钱包(如 MetaMask)交换不同类型的数字货币(称为代币)…...