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)

结语

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

相关推荐
码农小白猿3 分钟前
IACheck提升锅炉安装验收报告审核效率:智能化审核为安全合规保驾护航
运维·人工智能·ai·iacheck
hello我是小菜鸡4 分钟前
马尔可夫跳变系统镇定
人工智能·机器学习
阿正的梦工坊6 分钟前
Rubicon论文数据部分详解:从Rubric设计到RL Pipeline的全流程
人工智能·深度学习·机器学习·语言模型·自然语言处理
雪域迷影13 分钟前
使用Python库获取网页时报HTTP 403错误(禁止访问)的解决办法
开发语言·python·http·beautifulsoup·urllib
njsgcs19 分钟前
cuas 电脑操作ai 相关
人工智能
吃茄子的猫20 分钟前
python中global全局变量
python
Flash.kkl21 分钟前
Python基础语法
开发语言·python
veminhe28 分钟前
Python(二) 容器类型与对应操作行为
python
独自归家的兔31 分钟前
基于 cosyvoice-v3-plus 的 个人音色复刻 (华为OBS)
人工智能·华为·语音识别
Legend NO2432 分钟前
如何构建自己高质量语料库?
人工智能·非结构化数据