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)

结语

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

相关推荐
高工智能汽车40 分钟前
商用车自动驾驶,迎来大规模量产「临界点」?
人工智能·机器学习·自动驾驶
AI视觉网奇2 小时前
pyhton 掩码 筛选显示
人工智能·opencv·计算机视觉
bluetata3 小时前
亚马逊云科技 re:Invent 2024 Amazon Bedrock 推出新功能,加速AI落地
人工智能·科技·云计算·aws
old_power3 小时前
Linux(Ubuntu24.04)安装Eigen3库
linux·c++·人工智能
Struart_R4 小时前
DepthLab: From Partial to Complete 论文解读
人工智能·深度学习·计算机视觉·3d·深度估计·场景生成
暗碳6 小时前
cloudns二级免费域名python更新ipv6 dns记录
开发语言·python
BlackPercy6 小时前
[paddle] 非线性拟合问题的训练
python·机器学习·paddlepaddle·paddle
love you joyfully6 小时前
YOLO——pytorch与paddle实现YOLO
pytorch·yolo·paddle
小李学AI7 小时前
基于YOLOv8的恶劣天气目标检测系统
人工智能·深度学习·神经网络·yolo·目标检测·机器学习·计算机视觉
有Li7 小时前
对比式机器学习揭示了跨物种共享和特异性的脑功能结构|文献速递-视觉大模型医疗图像应用
人工智能·机器学习