tensor运算小结

部署运行你感兴趣的模型镜像


前言

提示:这里可以添加本文要记录的大概内容:

本文主要关注在使用PyTorch框架下的tensor基本运算,作为后续使用tensor建立神经网络模型的基础。


提示:以下是本篇文章正文内容,下面案例可供参考

引入基本库

import torch

一、tensor变量的基本创建

1. 创建随机变量

sample_tensor_1 = torch.rand(2,2) 
# 此处创建 (2 * 2) 的tensor

sample_tensor_2 = torch.rand(3,2,2) 
# 可理解为创建(3 * (2 * 2))

sample_tensor_3 = torch.one(2,3)
# 创建 (2 * 3), 每个位置数字为1

二、基本加减乘除运算

1. 两tensor相加

相同size的tensor,对应位置相加。有以下几种方式:使用加法符号 +, 使用类函数add或者add_。若不同size,会根据numpy中的广播机制(broadcast)进行计算。

sample_tensor_3 = sample_tensor_1 + sample_tensor_2
sample_tensor_4 = torch.add(sample_tensor_1, sample_tensor_2)
# sample_tensor_3 = sample_tensor_4

类自带的函数add和add_,共同效果是实现相加功能,add不改变原本值,add_使原始值发生变化,效果类似对list进行append操作。

sample_tensor_4.add_(5)

2.其余运算

与加法相同,在两相同size的tensor间进行其余运算,每个位置的结果为对应位置的值进行运算的结果。
减法的函数为sub和sub_,对应运算符为 -
乘法的函数为mul和mul_,对应运算符为 *
除法的函数为div和div_,对应运算符为 /
带_的函数,会对原始值进行改变,效果类似对list进行append操作。

三、矩阵乘法

1. torch.mm

需要符合矩阵乘法的相邻矩阵要求。

sample_tensor_1 = torch.rand(3,5) 
# 此处创建 (3 * 5) 的tensor
sample_tensor_2 = torch.rand(5,2) 
# 此处创建 (5 * 2) 的tensor
torch.mm(sample_tensor_1, sample_tensor_2)
# 生成 (3 * 2)矩阵相乘结果

2. torch.matmul

可使用广播机制,其余运用与torch.mm相同。
torch.mm 无广播机制。

sample_tensor_1 = torch.rand(3,5,6) 
# 可理解为创建(3 * (5 * 6))
sample_tensor_2 = torch.rand(6, 8)
# 创建(6 * 8)
torch.matmul(sample_tensor_1, sample_tensor_2)
# 结果为 (3 * (5 * 8))


总结

本文介绍了torch之间常见创建、运算的代码实现。广播机制常见于numpy和PyTorch运算中,有兴趣可在后续进行补充。

您可能感兴趣的与本文相关的镜像

PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>嗯,用户想了解如何使用PyTorch构建模型和进行张量运算。首先,我需要确认用户的基础知识,可能他们已经了解了一些PyTorch的基本概念,比如Tensor,但需要更深入的指导。 首先,我应该从Tensor的基础操作开始,因为这是构建模型的基础。记得用户提供的引用中提到,Tensor类似于NumPy的ndarray,但支持GPU加速。所以需要强调Tensor的创建和基本运算,比如加减乘除、矩阵乘法等。还要提到如何将Tensor移动到GPU上,这点很重要,因为这是PyTorch的优势之一。 接下来,构建模型部分。用户可能需要知道如何使用PyTorch的nn.Module类来定义模型的结构。应该举例说明如何定义一个简单的神经网络,比如全连接层、激活函数的使用,以及前向传播的方法。同时,要提到模型参数的初始化和如何将模型转移到GPU上训练,这部分用户可能不太熟悉,需要详细说明。 然后,损失函数和优化器也是关键部分。需要介绍常见的损失函数,比如交叉熵损失和均方误差,以及优化器如SGD和Adam。用户可能想知道如何将这些组件整合到训练循环中,所以给出一个训练循环的示例代码会很有帮助。 在张量运算的高级操作部分,可能需要包括形状变换、自动微分机制,因为自动微分是PyTorch的核心特性。解释requires_grad和backward()方法的使用,以及如何通过优化器更新参数。这部分内容对于理解模型训练过程至关重要。 还要考虑用户可能遇到的问题,比如张量形状不匹配、梯度清零的必要性,以及设备转移的注意事项。这些常见错误应该在教程中提到,帮助用户避免踩坑。 最后,生成相关问题的时候,要确保问题覆盖用户可能进一步探索的方向,比如模型保存、自定义层、分布式训练等。这些扩展问题可以帮助用户深入学习,满足他们的后续需求。 总之,结构需要清晰,分步骤讲解,结合代码示例和实际应用场景,确保用户能够逐步掌握PyTorch的模型构建和Tensor运算。同时,引用提供的资料中的信息,比如引用[1]和[2]中关于Tensor的创建方式和重要性,来增强回答的可靠性。</think># PyTorch 模型构建与 Tensor 运算教程 ## 一、Tensor 基础操作 PyTorch Tensor 是多维数组的核心数据结构,支持自动微分和 GPU 加速计算[^1]。基础运算包含: ```python import torch # 创建张量 a = torch.tensor([[1,2],[3,4]]) # 2x2 矩阵 b = torch.randn(2,2) # 正态分布随机矩阵 # 基本运算 c = a + b # 逐元素加法 d = torch.matmul(a, b) # 矩阵乘法 e = a * b # 逐元素乘法 # GPU 加速 if torch.cuda.is_available(): a_gpu = a.to('cuda') ``` ## 二、模型构建方法 通过继承`nn.Module`类构建神经网络: ```python import torch.nn as nn class MLP(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(784, 256) # 输入层到隐藏层 self.relu = nn.ReLU() self.fc2 = nn.Linear(256, 10) # 隐藏层到输出层 def forward(self, x): x = x.view(-1, 784) # 展平输入 x = self.fc1(x) x = self.relu(x) return self.fc2(x) # 初始化模型 model = MLP() print(model) # 显示网络结构 ``` ## 三、损失函数与优化器 常用组合示例: ```python # 分类任务 criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) # 回归任务 mse_loss = nn.MSELoss() sgd_optimizer = torch.optim.SGD(model.parameters(), lr=0.01) ``` ## 四、训练循环示例 ```python for epoch in range(100): # 前向传播 outputs = model(inputs) loss = criterion(outputs, labels) # 反向传播 optimizer.zero_grad() # 梯度清零 loss.backward() # 自动微分 optimizer.step() # 参数更新 ``` ## 五、Tensor 高级操作 1. **形状变换**:`view()`, `reshape()` 2. **自动微分**: ```python x = torch.tensor(2.0, requires_grad=True) y = x**2 + 3*x y.backward() # 自动计算梯度 print(x.grad) # 输出 dy/dx = 2x+3 = 7.0 ``` 3. **广播机制**:自动扩展维度进行运算 ```python a = torch.ones(3,2) b = torch.ones(2) c = a + b # b被广播为(3,2) ``` ## 六、注意事项 1. 张量形状匹配:矩阵乘法需满足 $m \times n$ 与 $n \times p$ 的维度 2. 梯度累积:每次反向传播前需执行`optimizer.zero_grad()` 3. 设备转移:避免CPU与GPU张量的直接运算 深度学习模型的构建本质是通过组合各种张量运算形成计算图,配合自动微分实现参数优化[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值