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)

结语

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

相关推荐
天天找自己几秒前
精通分类:解析Scikit-learn中的KNN、朴素贝叶斯与决策树(含随机森林)
python·决策树·机器学习·分类·scikit-learn
那就摆吧12 分钟前
U-Net vs. 传统CNN:为什么医学图像分割需要跳过连接?
人工智能·神经网络·cnn·u-net·医学图像
深度学习实战训练营23 分钟前
中英混合的语音识别XPhoneBERT 监督的音频到音素的编码器结合 f0 特征LID
人工智能·音视频·语音识别
WADesk---瓜子31 分钟前
用 AI 自动生成口型同步视频,短视频内容也能一人完成
人工智能·音视频·语音识别·流量运营·用户运营
赵英英俊35 分钟前
Python day31
开发语言·python
星环科技TDH社区版39 分钟前
AI Agent 的 10 种应用场景:物联网、RAG 与灾难响应
人工智能·物联网
时序之心1 小时前
ICML 2025 | 深度剖析时序 Transformer:为何有效,瓶颈何在?
人工智能·深度学习·transformer
希艾席帝恩1 小时前
拥抱智慧物流时代:数字孪生技术的应用与前景
大数据·人工智能·低代码·数字化转型·业务系统
Bar_artist1 小时前
离线智能破局,架构创新突围:RockAI与中国AI的“另一条车道”
大数据·人工智能
双向331 小时前
高性能MCP服务器架构设计:并发、缓存与监控
人工智能