PyTorch 初级教程:构建你的第一个神经网络

PyTorch 是一个在研究领域广泛使用的深度学习框架,提供了大量的灵活性和效率。本文将向你介绍如何使用 PyTorch 构建你的第一个神经网络。

一、安装 PyTorch

首先,我们需要安装 PyTorch。PyTorch 的安装过程很简单,你可以根据你的环境(操作系统,Python 版本,是否使用 GPU 等)在 PyTorch 的官方网站生成相应的安装命令。以下是一种常见的安装命令:

shell 复制代码
pip install torch torchvision

二、Tensor

在 PyTorch 中,基本的数据结构是 Tensor(张量)。Tensor 和 NumPy 的数组很相似,但它还可以在 GPU 上运行以加速计算。以下是创建 Tensor 的一些方法:

python 复制代码
import torch

# 创建一个未初始化的 5x3 矩阵
x = torch.empty(5, 3)
print(x)

# 创建一个随机初始化的 5x3 矩阵
x = torch.rand(5, 3)
print(x)

# 创建一个全部为 0,数据类型为 long 的矩阵
x = torch.zeros(5, 3, dtype=torch.long)
print(x)

# 创建 tensor 并直接使用数据初始化
x = torch.tensor([5.5, 3])
print(x)

三、神经网络

在 PyTorch 中,我们使用 torch.nn 包来构建神经网络。nn 依赖于 autograd 来定义和计算梯度。nn.Module 包含神经网络的层,以及返回 outputforward(input) 方法。

让我们定义一个简单的前馈神经网络:

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

class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        # 输入图像为单通道,输出通道为 6,3x3 正方形卷积核
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.conv2 = nn.Conv2d(6, 16, 3)
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16 * 6 * 6, 120)  # 6*6 是图像维度
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        # 在 2x2 窗口上进行最大池化
        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)

你刚刚定义了一个前馈函数,在它里面(以及只在它里面)我们使用了 Tensor 的任意操作。backward 函数(在这里是 autograd)将会自动定义,你可以在 forward 函数中使用任何针对 Tensor 的操作。

通过以上的简单介绍,我们相信你已经对如何在 PyTorch 中构建神经网络有了一个基本的理解。在后续的文章中,我们将深入讨论如何训练神经网络,以及如何使用数据加载器,等等。

相关推荐
小兔崽子去哪了5 分钟前
深度学习 2 / CNN 神经网络
后端·python
weixin_4407305014 分钟前
队列QUEUE介绍+类型示例(先进先出、后进先出、优先级高先出、双端进入、生产者+消费者线程)
python·线程·queue
这是程序猿17 分钟前
Java线程池深度剖析:源码原理、核心参数、任务调度与生产调优实战
java·开发语言·python
rannn_11119 分钟前
【Java面试八股】Java基础篇|数据类型、面向对象、关键字、反射、注解、异常、新特性、序列化、设计模式、IO
java·后端·面试
Web3&Basketball22 分钟前
ChatGPT 路由自证:跨客户端实测对照
python·大模型·agent·推理·推理优化
Patrick在香港23 分钟前
Claude 工作提醒自动化:香港天文台四个接口三个「更新时间」,警告到期了却还在生效
python·api·claude·数据抓取·香港
用户83562907805128 分钟前
Python 实现 Word 文档域的插入与管理
后端·python
quantdash_cc29 分钟前
从数据采集到策略消费,股票日内行情管道应该怎么设计?
开发语言·python·数据分析·量化交易·股票数据·quantdash
MacroZheng29 分钟前
阿里又开源了一个神级 Skill 项目!
java·人工智能·后端
程序员杰哥39 分钟前
UI自动化测试:Jenkins配置
自动化测试·软件测试·python·测试工具·职场和发展·jenkins·测试用例