tensor

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

文章目录

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

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

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

🛠 1. 准备工作

1.1 导入PyTorch并检查环境

python 复制代码
# 导入torch库
import torch

# 查看torch版本
print(torch.__version__)  # 输出: 2.6.0+cu124

# 检查CUDA是否可用
torch.cuda.is_available()  # 输出: True

1.2 设置计算设备

python 复制代码
device = "cuda" if torch.cuda.is_available() else "cpu"
print(device)  # 输出: cuda

📦 1.1 张量初始化

1.1.1 从Python数据类型创建

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

1.1.2 数据类型处理

python 复制代码
# 查看数据类型
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数组创建

python 复制代码
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 特殊张量创建

python 复制代码
# 创建随机张量
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 张量属性查看

python 复制代码
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 张量设备转移

python 复制代码
x_gpu = x.to(device)  # 转移到GPU
print(x_gpu.device)   # 输出: cuda:0

➗ 1.2 张量运算

1.2.1 基本运算

python 复制代码
# 就地加法 (会改变原张量)
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 张量转换

python 复制代码
# 单元素张量转标量
t3 = t1.sum()
scalar = t3.item()  # 输出: 2.1050655841827393

# 张量转NumPy数组
numpy_array = t1.numpy()

1.2.3 形状操作

python 复制代码
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 梯度计算实战

python 复制代码
# 创建需要跟踪梯度的张量
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 梯度控制技巧

python 复制代码
# 临时禁用梯度跟踪
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张量核心操作,你已为深度学习模型开发打下坚实基础!🎯 下一步可以探索神经网络模块和优化器的使用,开启模型训练之旅!

相关推荐
往日情怀酿做酒 V176392963823 分钟前
pytorch的介绍以及张量的创建
人工智能·pytorch·python
2401_878624797 小时前
pytorch 神经网络
人工智能·pytorch·神经网络
Gyoku Mint8 小时前
深度学习×第7卷:参数初始化与网络搭建——她第一次挑好初始的重量
人工智能·pytorch·rnn·深度学习·神经网络·算法·机器学习
boooo_hhh8 小时前
第35周—————糖尿病预测模型优化探索
pytorch·深度学习·机器学习
我爱一条柴ya10 小时前
【AI大模型】RAG系统组件:向量数据库(ChromaDB)
数据库·人工智能·pytorch·python·ai·ai编程
仗剑_走天涯17 小时前
基于pytorch.nn模块实现线性模型
人工智能·pytorch·python·深度学习
2401_878624791 天前
pytorch 自动微分
人工智能·pytorch·python·机器学习
水龙吟啸1 天前
从零开始搭建深度学习大厦系列-2.卷积神经网络基础(5-9)
人工智能·pytorch·深度学习·cnn·mxnet
慕婉03071 天前
深度学习中的常见损失函数详解及PyTorch实现
人工智能·pytorch·深度学习