news 2026/5/8 17:22:36

【PyTorch 基础】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【PyTorch 基础】

PyTorch 主要有以下几个基础概念:张量(Tensor)、自动求导(Autograd)、神经网络模块(nn.Module)、优化器(optim)等。

张量(Tensor)

张量(Tensor)是 PyTorch 中的核心数据结构,用于存储和操作多维数组。

张量可以视为一个多维数组,支持加速计算的操作。

在 PyTorch 中,张量的概念类似于 NumPy 中的数组,但是 PyTorch 的张量可以运行在不同的设备上,比如 CPU 和 GPU,这使得它们非常适合于进行大规模并行计算,特别是在深度学习领域。

维度(Dimensionality):张量的维度指的是数据的多维数组结构。例如,一个标量(0维张量)是一个单独的数字,一个向量(1维张量)是一个一维数组,一个矩阵(2维张量)是一个二维数组,以此类推。

形状(Shape):张量的形状是指每个维度上的大小。例如,一个形状为(3, 4)的张量意味着它有3行4列。

数据类型(Dtype):张量中的数据类型定义了存储每个元素所需的内存大小和解释方式。PyTorch支持多种数据类型,包括整数型(如torch.int8、torch.int32)、浮点型(如torch.float32、torch.float64)和布尔型(torch.bool)。

张量创建

import torch

# 创建一个 2x3 的全 0 张量
a = torch.zeros(2, 3)
print(a)

# 创建一个 2x3 的全 1 张量
b = torch.ones(2, 3)
print(b)

# 创建一个 2x3 的随机数张量
c = torch.randn(2, 3)
print(c)

# 从 NumPy 数组创建张量
import numpy as np
numpy_array = np.array([[1, 2], [3, 4]])
tensor_from_numpy = torch.from_numpy(numpy_array)
print(tensor_from_numpy)

# 在指定设备(CPU/GPU)上创建张量
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
d = torch.randn(2, 3, device=device)
print(d)

常用张量操作

import torch

# 张量相加
e = torch.randn(2, 3)
f = torch.randn(2, 3)
print(e)
print(f)
print(e + f)

# 逐元素乘法
print(e * f)

# 张量的转置
g = torch.randn(3, 2)
print(g)
print(g.t()) # 或者 g.transpose(0, 1)


# 张量的形状
print(g.shape)# 返回形状

梯度和自动微分

PyTorch的张量支持自动微分。当创建一个需要梯度的张量时,PyTorch可以自动计算其梯度:

import torch

# 创建一个需要梯度的张量
tensor_requires_grad = torch.tensor([3.0], requires_grad=True)
print(tensor_requires_grad)

# 进行一些操作
tensor_result = tensor_requires_grad * 3
print(tensor_result)

# 计算梯度
tensor_result.backward()
print(tensor_requires_grad.grad) # 输出梯度

自动求导(Autograd)

PyTorch 提供了自动求导功能,通过autograd模块来自动计算梯度。

torch.Tensor对象有一个 requires_grad 属性,用于指示是否需要计算该张量的梯度。

当你创建一个 requires_grad=True 的张量时,PyTorch 会自动跟踪所有对它的操作,以便在之后计算梯度。

创建需要梯度的张量:

import torch # 创建一个需要计算梯度的张量 x = torch.randn(2, 2, requires_grad=True) print(x) # 执行某些操作 y = x + 2 z = y * y * 3 out = z.mean() print(out)

定义了计算图,可以通过 .backward() 方法来计算梯度。在神经网络训练中,自动求导主要用于实现反向传播算法。

# 反向传播,计算梯度
out.backward()

# 查看 x 的梯度
print(x.grad)
神经网络(nn.Module)

神经网络(nn.Module)

神经网络是一种模仿人脑神经元连接的计算模型,由多层节点(神经元)组成,用于学习数据之间的复杂模式和关系。

神经网络通过调整神经元之间的连接权重来优化预测结果,这一过程涉及前向传播、损失计算、反向传播和参数更新。

神经网络的类型包括前馈神经网络、卷积神经网络(CNN)、循环神经网络(RNN)和长短期记忆网络(LSTM),它们在图像识别、语音处理、自然语言处理等多个领域都有广泛应用。

PyTorch 提供了一个非常方便的接口来构建神经网络模型,即 torch.nn.Module。

我们可以继承 nn.Module 类并定义自己的网络层。

创建一个简单的神经网络:

import torch.nn as nn
import torch
import torch.optim as optim


# 定义一个简单的全连接神经网络
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(2, 2) # 输入层到隐藏层
self.fc2 = nn.Linear(2, 1) # 隐藏层到输出层

def forward(self, x):
x = torch.relu(self.fc1(x)) # ReLU 激活函数
x = self.fc2(x)
return x


# 创建网络实例
model = SimpleNN()

# 打印模型结构
print(model)

前向传播与损失计算

# 随机输入
x = torch.randn(1, 2)

# 前向传播
output = model(x)
print(output)

# 定义损失函数(例如均方误差 MSE)
criterion = nn.MSELoss()

# 假设目标值为 1
target = torch.randn(1, 1)

# 计算损失
loss = criterion(output, target)
print(loss)

优化器(Optimizers)

优化器在训练过程中更新神经网络的参数,以减少损失函数的值。使用优化器进行参数更新:

# 定义优化器(使用 Adam 优化器)
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练步骤
optimizer.zero_grad() # 清空梯度
loss.backward() # 反向传播
optimizer.step() # 更新参数

训练模型

import torch import torch.nn as nn import torch.optim as optim # 1. 定义一个简单的神经网络模型 class SimpleNN(nn.Module): def __init__(self): super(SimpleNN, self).__init__() self.fc1 = nn.Linear(2, 2) # 输入层到隐藏层 self.fc2 = nn.Linear(2, 1) # 隐藏层到输出层 def forward(self, x): x = torch.relu(self.fc1(x)) # ReLU 激活函数 x = self.fc2(x) return x # 2. 创建模型实例 model = SimpleNN() # 3. 定义损失函数和优化器 criterion = nn.MSELoss() # 均方误差损失函数 optimizer = optim.Adam(model.parameters(), lr=0.001) # Adam 优化器 # 4. 假设我们有训练数据 X 和 Y X = torch.randn(10, 2) # 10 个样本,2 个特征 Y = torch.randn(10, 1) # 10 个目标值 # 5. 训练循环 for epoch in range(100): # 训练 100 轮 optimizer.zero_grad() # 清空之前的梯度 output = model(X) # 前向传播 loss = criterion(output, Y) # 计算损失 loss.backward() # 反向传播 optimizer.step() # 更新参数 # 每 10 轮输出一次损失 if (epoch + 1) % 10 == 0: print(f'Epoch [{epoch + 1}/100], Loss: {loss.item():.4f}')

在每 10 轮,程序会输出当前的损失值,帮助我们跟踪模型的训练进度。随着训练的进行,损失值应该会逐渐降低,表示模型在不断学习并优化其参数。

训练模型是一个迭代的过程,需要不断地调整和优化,直到达到满意的性能。这个过程涉及到大量的实验和调优,目的是使模型在新的、未见过的数据上也能有良好的泛化能力。

设备(Device)

PyTorch 允许你将模型和数据移动到 GPU 上进行加速。使用 torch.device 来指定计算设备。将模型和数据移至 GPU:

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 将模型移动到设备
model.to(device)

# 将数据移动到设备
X = X.to(device)
Y = Y.to(device)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 17:21:57

谷歌SEO+外贸版GEO优化需要懂技术吗?

行业痛点分析当前,外贸企业在数字营销领域正面临前所未有的技术挑战,核心矛盾在于传统搜索引擎优化(SEO)策略与新兴的生成式AI搜索(GEO)环境之间的割裂。许多企业投入大量资源进行关键词排名,却…

作者头像 李华
网站建设 2026/5/8 17:21:56

基于 RMM 工具滥用的 VENOMOUS#HELPER 钓鱼攻击技术分析与防御研究

摘要 2025 年 4 月以来,代号VENOMOUS#HELPER的钓鱼攻击活动针对全球超 80 家机构实施定向入侵,核心手段为滥用 SimpleHelp 与 ScreenConnect 两类合法远程监控与管理(RMM)工具,构建冗余双通道远程控制架构,…

作者头像 李华
网站建设 2026/5/8 17:21:35

OpenClaw 本地 AI 操控电脑 Win11 专属优化安装全程实操教程

OpenClaw小龙虾AI v2.6.6 Win11专属部署教程|专业版家庭版全兼容小白实操适配系统:Windows 11 专业版 / 家庭版 / 正式版(全系完美兼容)项目简介:OpenClaw是GitHub星标28W的开源本地AI智能体,支持全自动电脑…

作者头像 李华
网站建设 2026/5/8 17:20:58

EDA创业启示:从芯片功耗痛点出发,打造系统级功耗热分析工具

1. 从芯片功耗专家到EDA创业者:一次深度对话的启示最近重读了一篇2012年对Docea Power公司联合创始人兼CEO Ghislain Kaiser的专访,感触颇深。虽然过去了十多年,但其中关于技术创业、市场洞察、以及电子设计自动化(EDA&#xff09…

作者头像 李华
网站建设 2026/5/8 17:20:24

通过环境变量管理Taotoken密钥在不同部署环境的安全接入

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过环境变量管理Taotoken密钥在不同部署环境的安全接入 在应用开发与部署的生命周期中,安全地管理敏感配置信息是至关…

作者头像 李华
网站建设 2026/5/8 17:19:59

DouyinLiveRecorder:多平台直播录制终极方案,轻松实现24小时循环值守

DouyinLiveRecorder:多平台直播录制终极方案,轻松实现24小时循环值守 【免费下载链接】DouyinLiveRecorder 可循环值守和多人录制的直播录制软件,支持抖音、TikTok、Youtube、快手、虎牙、斗鱼、B站、小红书、pandatv、sooplive、flextv、pop…

作者头像 李华