tensor

😉如果您想用jupyter notebook跑我的笔记,可以在下面获取ipynb版本
😊麻烦给个免费的star😘
❤️主包也更建议这种形式,上面的笔记也更加全面,每一步都有直观的输出

文章目录

  • 📚 PyTorch张量操作与自动微分全面指南
    • 🛠 1. 准备工作
      • 1.1 导入PyTorch并检查环境
      • 1.2 设置计算设备
    • 📦 1.1 张量初始化
      • 1.1.1 从Python数据类型创建
      • 1.1.2 数据类型处理
      • 1.1.3 从NumPy数组创建
      • 1.1.4 特殊张量创建
      • 1.1.5 张量属性查看
      • 1.1.6 张量设备转移
    • ➗ 1.2 张量运算
      • 1.2.1 基本运算
      • 1.2.2 张量转换
      • 1.2.3 形状操作
    • 🔁 1.3 张量自动微分
      • 1.3.1 梯度计算核心概念
      • 1.3.2 梯度计算实战
      • 1.3.3 梯度控制技巧
    • 💎 核心要点总结

📚 PyTorch张量操作与自动微分全面指南

PyTorch作为深度学习领域的主流框架,掌握其核心数据结构张量(Tensor)的操作至关重要。本文将全面解析PyTorch张量的创建、运算和自动微分机制,助你快速上手PyTorch开发!🚀

🛠 1. 准备工作

1.1 导入PyTorch并检查环境

# 导入torch库
import torch# 查看torch版本
print(torch.__version__)  # 输出: 2.6.0+cu124# 检查CUDA是否可用
torch.cuda.is_available()  # 输出: True

1.2 设置计算设备

device = "cuda" if torch.cuda.is_available() else "cpu"
print(device)  # 输出: cuda

📦 1.1 张量初始化

1.1.1 从Python数据类型创建

data = [[1,2],[3,4]]
x = torch.tensor(data)
print(x)
# 输出: 
# tensor([[1, 2],
#         [3, 4]])

1.1.2 数据类型处理

# 查看数据类型
print(x.dtype)  # 输出: torch.int64# 指定数据类型创建
x1 = torch.FloatTensor([[1,2],[3,4]])  # 等价于 torch.tensor(..., dtype=torch.float32)
x2 = torch.LongTensor([[1,2],[3,4]])# 强制类型转换
x1 = x1.type(torch.long)  # 转换为int64
x1 = x1.float()           # 转换为float32

💡 关键提示torch.float32torch.int64是最重要的数据类型!模型输入通常是float32,分类标签通常是int64

1.1.3 从NumPy数组创建

import numpy as np
data = np.array([[1,2],[4,3]])
x3 = torch.from_numpy(data)
print(x3)
# 输出:
# tensor([[1, 2],
#         [4, 3]])

1.1.4 特殊张量创建

# 创建随机张量
rand_tensor = torch.rand(2,3)    # 0~1均匀分布
randn_tensor = torch.randn(2,3)  # 标准正态分布# 创建全1/全0张量
ones_tensor = torch.ones(2,3)
zeros_tensor = torch.zeros(2,3)# 继承形状创建
y1 = torch.rand_like(x.float())

1.1.5 张量属性查看

t = x
print(t.shape)      # 形状: torch.Size([2, 2])
print(t.size())     # 大小: torch.Size([2, 2])
print(t.dtype)      # 数据类型: torch.int64
print(t.device)     # 存储设备: cpu

1.1.6 张量设备转移

x_gpu = x.to(device)  # 转移到GPU
print(x_gpu.device)   # 输出: cuda:0

➗ 1.2 张量运算

1.2.1 基本运算

# 就地加法 (会改变原张量)
t1 = torch.randn(2,3)
t2 = torch.ones(2,3)
t2.add_(t1)# 矩阵乘法
result1 = t1 @ t2.T
result2 = t1.matmul(t2.T)

1.2.2 张量转换

# 单元素张量转标量
t3 = t1.sum()
scalar = t3.item()  # 输出: 2.1050655841827393# 张量转NumPy数组
numpy_array = t1.numpy()

1.2.3 形状操作

t = torch.randn(4,6)# 重塑形状
t1 = t.view(3,8)     # 显式指定形状
t2 = t.view(-1,1)    # 自动推断维度
t3 = t.view(1,4,6)   # 增加维度# 维度压缩与扩展
t4 = torch.ones(1,4,6)
t5 = torch.squeeze(t4)    # 移除大小为1的维度
t6 = torch.unsqueeze(t5,0)  # 在指定位置添加维度

🔁 1.3 张量自动微分

1.3.1 梯度计算核心概念

PyTorch的自动微分系统基于以下三个关键属性:

  • requires_grad:是否跟踪梯度(默认为False)
  • grad:存储计算得到的梯度
  • grad_fn:指向生成此张量的运算方法

1.3.2 梯度计算实战

# 创建需要跟踪梯度的张量
t = torch.ones(2,2, requires_grad=True)
print(t.requires_grad)  # 输出: True# 构建计算图
y = t + 5
x = y * 2
out = x.mean()# 反向传播计算梯度
out.backward()# 查看梯度
print(t.grad)
# 输出:
# tensor([[0.5000, 0.5000],
#         [0.5000, 0.5000]])

1.3.3 梯度控制技巧

# 临时禁用梯度跟踪
with torch.no_grad():print((t + 2).requires_grad)  # 输出: False# 获取不跟踪梯度的张量副本
detached_t = t.detach()
print(detached_t.requires_grad)  # 输出: False# 永久关闭梯度跟踪
t.requires_grad_(False)
print(t.requires_grad)  # 输出: False

💎 核心要点总结

  1. 张量创建

    • 使用torch.tensor()从Python数据创建
    • 使用torch.from_numpy()从NumPy数组转换
    • 掌握torch.rand(), torch.randn(), torch.ones(), torch.zeros()等创建方法
  2. 数据类型管理

    • 重点掌握float32(模型输入)和int64(分类标签)
    • 使用.float().long()快速转换类型
  3. 设备转移

    • 使用.to(device)在CPU/GPU间移动张量
    • 始终检查tensor.device确保张量位置正确
  4. 自动微分

    • 设置requires_grad=True启用梯度跟踪
    • 使用.backward()自动计算梯度
    • 使用with torch.no_grad():上下文管理器禁用梯度计算
  5. 性能优化

    • 尽量使用就地操作(如add_())减少内存开销
    • 合理使用view()进行形状重塑
    • 及时使用detach()分离不需要的计算图

掌握这些PyTorch张量核心操作,你已为深度学习模型开发打下坚实基础!🎯 下一步可以探索神经网络模块和优化器的使用,开启模型训练之旅!

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

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

相关文章

STM32-DAC数模转换

DAC数模转换:将数字信号转换成模拟信号特性:2个DAC转换器每个都拥有一个转换通道8位或12位单调输出(8位右对齐;12位左对齐右对齐)双ADC通道同时或者分别转换外部触发中断电压源控制部分(外部触发3个APB1&am…

前后端集合如何传递

前端vue后端rest风格&#xff1a;1.路径传参&#xff08;参数必传&#xff09;&#xff0c;通过pathvarible注解后端&#xff1a;DeleteMapping("/{YYIDs}")public R<Void> remove(NotEmpty(message "主键不能为空")PathVariable String[] YYIDs) {…

1353. 最多可以参加的会议数目

1353. 最多可以参加的会议数目 题目链接&#xff1a;1353. 最多可以参加的会议数目 代码如下&#xff1a; class Solution { public:int maxEvents(vector<vector<int>>& events) {int mx 0;for (auto& e : events) {mx max(mx, e[1]); // 找到最大的结…

OCR 本地版本

UMI OCR 支持本地部署&#xff0c;支持HTTP OCR

大数据驱动的酒店用品需求预测模型研究 开发——毕业论文,毕业设计——仙盟创梦IDE

主页酒店用品 平台协议促销毕业论文摘要本研究旨在构建基于大数据分析的酒店用品需求预测模型&#xff0c;以提高酒店用品批发企业的库存管理效率和供应链响应速度。研究整合了酒店历史采购数据、季节因素、市场趋势、节假日信息等多源数据&#xff0c;通过对比传统时间序列模型…

Windows11桌面解锁守护脚本

使用python程序加bat一键运行脚本&#xff0c;妈妈再也不用担心我的电脑桌面了import os import time import cv2 import pyautogui import psutil from datetime import datetimeclass UnlockMonitor:def __init__(self):"""初始化监控器"""sel…

Linux Ubuntu系统的用户管理

一.关于root用户默认我们安装完系统后 注册的用户就是管理员用户标识符 $ 管理员标识符#最高管理员在Ubuntu系统中,root是最高管理员,拥有最大的权限,默认情况下root用户没有启用密码,而是通过sudo机制来获取管理员权限二.Ubuntu系统中root用户的默认状态root用户存在,但未启用…

ROS1学习第三弹

ROS1学习第二弹 本文纯属记录学习过程&#xff0c;所学教程来自B站古月居ROS入门21讲 tf工具的使用 命令行中 1.rosrun tf view_frames 生成当前各个坐标的结构图&#xff0c;导出pdf文件到当前终端所在文件夹下面2.rosrun rviz rviz -d rospackage find turtle_tf /rviz/tu…

技术演进中的开发沉思-30 MFC系列:五大机制

MFC&#xff0c;记得我刚毕业时在 CRT 显示器前敲下第一行 MFC 代码时&#xff0c;那时什么都不懂&#xff0c;没有框架的概念。只觉得眼前的 CObject 像位沉默且复杂的大家族&#xff0c; 就像老北京胡同里的大家族&#xff0c;每个门牌号都藏着自己的故事。但现在看看&#x…

机器学习-06(Optimization-自动调整学习率)

临界点其实不一定是在训练神经网络过程中遇到的最大阻碍。随着对参数的不断更新&#xff0c;Loss值会不断下降&#xff0c;直至几乎没有变化&#xff0c;不再下降。当参数更新到临界点时&#xff0c;意味着gradient非常小&#xff0c;所以要认定参数是否到达临界点应当确认grad…

Uniapp中的uni.scss

uni.scss为uni-app新建项目自带工程文件&#xff0c;使用的预处理器为sass/scss&#xff0c;由此可见&#xff0c;uni-app官方推荐的是scss。 uni.scss特点 无需引入&#xff0c;uni-app在编译时&#xff0c;会自动引入此文件在此中定义的scss变量&#xff0c;可以全局使用&…

PreparedStatement 实现分页查询详解

PreparedStatement 实现分页查询详解 在 JDBC 中使用 PreparedStatement 实现分页查询是高效安全的方式&#xff0c;可以避免 SQL 注入并提升性能。下面我将详细说明实现步骤和原理。 &#x1f4d0; 分页查询核心参数参数名说明计算公式pageNum当前页码&#xff08;从1开始&…

ClamAV 和 FreshClam:Linux 服务器上的开源杀毒解决方案

ClamAV 和 FreshClam:Linux 服务器上的开源杀毒解决方案 1. 概述 ClamAV 是一款开源的防病毒引擎,专为 Linux 服务器设计,用于检测恶意软件、病毒、木马和其他安全威胁。它广泛应用于邮件服务器、文件存储系统和 Web 服务器,提供高效的病毒扫描功能。 主要特点: 免费开…

PySpark中python环境打包和JAR包依赖

在 PySpark 中打包 Python 环境并调度到集群是处理依赖一致性的关键步骤。以下是完整的解决方案&#xff0c;包含环境打包、分发和配置方法&#xff1a; 一、环境打包方法 使用 Conda 打包环境 # 创建 Conda 环境 conda create -n pyspark_env python3.8 conda activate pyspar…

和鲸社区深度学习基础训练营2025年关卡2(1)纯numpy

拟分3种实现方法&#xff1a;1.纯numpy2.sklearn中的MLPClassifier3.pytorch题目&#xff1a; 在 MNIST 数据集上训练 MLP 模型并比较不同的激活函数和优化算法任务描述&#xff1a;使用 MNIST 数据集中的前 20,000 个样本训练一个多层感知机 (MLP) 模型。你需要比较三种不同的…

Sequential Thinking:AI深度思考的新范式及其与CoT、ReAct的对比分析

引言&#xff1a;AI深度思考的演进与Sequential Thinking的崛起在人工智能技术快速发展的今天&#xff0c;AI模型的思考能力正经历着从简单应答到深度推理的革命性转变。这一演进过程不仅反映了技术本身的进步&#xff0c;更体现了人类对机器智能认知边界的持续探索。早期的大语…

云原生详解:构建现代化应用的未来

引言 在数字化转型的浪潮中,"云原生"已成为技术领域最热门的话题之一。从初创公司到全球500强企业,都在积极探索云原生技术以提升业务敏捷性和创新能力。本文将全面解析云原生的概念、核心技术、优势以及实践路径,帮助您深入理解这一改变IT格局的技术范式。 什么…

SSE事件流简单示例

文章目录1、推送-SseEmitter2、接收-EventSourceListenerSSE&#xff08;Server-Sent Events&#xff0c;服务器推送事件&#xff09;是一种基于HTTP的服务器向客户端实时推送数据的技术标准。1、推送-SseEmitter SseEmitter用于实现服务器向客户端单向、长连接的实时数据推送…

Elasticsearch RESTful API入门:基础搜索与查询DSL

Elasticsearch RESTful API入门&#xff1a;基础搜索与查询DSL 本文为Elasticsearch初学者详细解析RESTful API的核心操作与查询DSL语法&#xff0c;包含大量实战示例及最佳实践。 一、Elasticsearch与RESTful API简介 Elasticsearch&#xff08;ES&#xff09;作为分布式搜索…

(六)复习(OutBox Message)

文章目录 项目地址一、OutBox Message1.1 OutBox表配置1. OutBoxMessage类2. OutboxMessage表配置3. 给每个模块生成outboxmessage表1.2 发布OutBox Message1. 修改Intercepotor2. 配置Quartz3. 创建Quatz方法发布领域事件4. 创建Quatz定时任务5. 注册Quatz服务和配置6. 流程梳…