Pytorch基本语法

PyTorch 是一个开源的机器学习库,它不仅提供了灵活的张量计算能力(类似NumPy),还拥有强大的自动微分功能,特别适合构建和训练神经网络。本文将带领您一步步了解PyTorch的基本语法和操作,帮助您快速入门。

1. 安装 PyTorch

在开始之前,请确保已经安装了PyTorch。您可以根据自己的环境选择合适的安装命令。以下是通过pip安装CPU版本PyTorch的示例:

bash 复制代码
pip install torch torchvision torchaudio

如果您需要GPU支持,则可以根据官方文档选择相应的安装方式。

2. 张量 (Tensor)

张量是PyTorch中的核心数据结构,类似于NumPy的数组,但具有更丰富的功能。下面是一些创建张量的方法:

  • 从数据创建张量
python 复制代码
import torch

# 创建一个包含[5.5, 3]的张量
x = torch.tensor([5.5, 3])
print(x)
  • 随机初始化
python 复制代码
# 创建一个形状为(3, 3)的随机张量
x = torch.rand(3, 3)
print(x)
  • 全零或全一初始化
python 复制代码
# 创建一个全零张量
x = torch.zeros(2, 2)
print(x)

# 创建一个全一张量
y = torch.ones(2, 2)
print(y)
  • 从现有张量创建新张量
python 复制代码
# 创建一个与x相同形状和类型的全零张量
z = torch.zeros_like(x)
print(z)

3. 张量操作

PyTorch提供了大量的张量操作函数,包括加减乘除、矩阵乘法、转置等。这里介绍一些常用的操作:

  • 加法
python 复制代码
# 元素级别的加法
result = x + y
print(result)

# 或者使用in-place操作
y.add_(x)
print(y)
  • 矩阵乘法
python 复制代码
# 矩阵乘法
result = torch.mm(x, y)
print(result)
  • 广播机制

当两个张量的形状不同时,PyTorch会自动应用广播规则来匹配它们的形状:

python 复制代码
# 广播机制下的加法
x = torch.tensor([[1, 2], [3, 4]])
y = torch.tensor([10, 20])
result = x + y
print(result)

4. 自动求导 (Autograd)

自动求导是PyTorch的一大特色,它允许我们轻松地计算梯度,这对于训练神经网络至关重要。

  • 启用自动求导
python 复制代码
# 创建一个需要计算梯度的张量
x = torch.ones(2, 2, requires_grad=True)
print(x)
  • 执行向后传播
python 复制代码
# 定义一个简单的计算图
y = x + 2
z = y * y * 3
out = z.mean()

# 反向传播
out.backward()
print(x.grad)  # 输出x的梯度

5. 构建神经网络

使用torch.nn模块可以方便地定义和训练神经网络。下面是一个简单的例子:

python 复制代码
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 定义卷积层
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.conv2 = nn.Conv2d(6, 16, 3)
        # 定义全连接层
        self.fc1 = nn.Linear(16 * 6 * 6, 120)  
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        # 卷积层 -> 激活函数 -> 池化层
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  # 所有维度除了批次大小
        num_features = 1
        for s in size:
            num_features *= s
        return num_features

net = Net()
print(net)

结语

随着深入学习,您将会发现更多高级特性和应用场景。希望这篇文章能够为您提供一个良好的起点,激发您探索深度学习世界的兴趣。如果有任何问题或需要进一步的帮助,请随时留言讨论!

相关推荐
快乐非自愿15 小时前
RAG夺命10连问,你能抗住第几问?
人工智能·面试·程序员
千匠网络18 小时前
破局出海壁垒,千匠网络新能源汽车跨境出海解决方案
人工智能
方安乐18 小时前
python之向量、向量和、向量点积
开发语言·python·numpy
zh15702320 小时前
JavaScript中WorkerThreads解决服务端计算瓶颈
jvm·数据库·python
马丁聊GEO20 小时前
解码AI用户心智,筑牢可信GEO根基——悠易科技深度参与《中国AI用户态度与行为研究报告(2026)》发布会
人工智能·科技
nap-joker20 小时前
Fusion - Mamba用于跨模态目标检测
人工智能·目标检测·计算机视觉·fusion-mamba·可见光-红外成像融合·远距离/伪目标问题
一只幸运猫.20 小时前
2026Java 后端面试完整版|八股简答 + AI 大模型集成技术(最新趋势)
人工智能·面试·职场和发展
Promise微笑20 小时前
2026年国产替代油介损测试仪:油介损全场景解决方案与技术演进
大数据·网络·人工智能
深海鱼在掘金20 小时前
深入浅出 LangChain —— 第三章:模型抽象层
人工智能·langchain·agent
生信碱移20 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言