pdf文档 pytorch 入门笔记-03- 神经网络

370.53 KB 7 页 0 评论
语言 格式 评分
中文(简体)
.pdf
3
摘要
本文介绍了使用PyTorch的torch.nn包构建神经网络的基本流程和相关概念。首先,文档定义了一个简单的前馈神经网络,包括卷积层和全连接层,并详细说明了forward函数的实现。接着,文档讲解了神经网络的训练过程,包括定义模型、数据迭代、前向传播、损失计算、反向传播和参数更新。文档还介绍了损失函数的使用,如均方误差损失函数nn.MSELoss,以及优化器的配置与使用,包括随机梯度下降(SGD)和Adam等优化算法。最后,文档通过示例展示了如何进行前向传播和反向传播,并查看参数的梯度变化。
AI总结
### 《PyTorch入门笔记-03-神经网络》总结 这篇笔记主要介绍了如何使用PyTorch的`torch.nn`包来构建和训练神经网络,涵盖了网络定义、损失函数、反向传播和优化器的使用。以下是核心内容的总结: --- #### **1. 神经网络的定义与结构** - **`nn.Module`**: 用于定义神经网络模型,是所有神经网络的基础类。每个`nn.Module`包含一些可学习的参数(权重和偏差),并定义了一个`forward`方法来指定前向传播过程。 - **示例网络定义**: ```python class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 6, 5) # 卷积层 self.conv2 = nn.Conv2d(6, 16, 5) # 卷积层 self.fc1 = nn.Linear(16 * 5 * 5, 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) # 卷积+激活+池化 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 ``` 网络包含两层卷积和三层全连接,`forward`方法定义了数据的流动过程。网络的结构可以通过`print(net)`查看。 --- #### **2. 损失函数与反向传播** - **损失函数**: 用于衡量网络输出与目标值之间的差异。常用的损失函数包括`nn.MSELoss`(均方误差损失)。 ```python criterion = nn.MSELoss() loss = criterion(output, target) ``` - **反向传播**: - 调用`loss.backward()`执行反向传播,计算梯度。 - 在反向传播前,需使用`net.zero_grad()`清除旧的梯度,避免梯度累加。 - 示例中展示了`conv1.bias.grad`在反向传播前后梯度的变化。 --- #### **3. 优化器与参数更新** - **优化器**: 用于更新网络参数,常用的优化器包括随机梯度下降(SGD)、Adam等。PyTorch通过`torch.optim`包实现了这些优化器。 ```python optimizer = optim.SGD(net.parameters(), lr=0.01) ``` - **参数更新流程**: ```python optimizer.zero_grad() # 清零梯度 output = net(input) # 前向传播 loss = criterion(output, target) # 计算损失 loss.backward() # 反向传播 optimizer.step() # 更新参数 ``` --- #### **4. 其他重点** - **`net.parameters()`**: 返回网络的可学习参数,包括权重和偏差。 - **`input.unsqueeze(0)`**: 用于将单个样本输入扩展为4维张量(批次大小为1)。 - **计算图**: PyTorch通过`autograd`自动生成计算图,`loss.grad_fn`可以查看计算图的结构。 --- #### **总结** - **神经网络的定义**: 使用`nn.Module`定义网络结构,`forward`方法指定前向传播流程。 - **损失函数**: 用于衡量网络输出与目标值的差异,如`nn.MSELoss`。 - **反向传播**: 通过`loss.backward()`计算梯度,需先清零旧梯度。 - **优化器**: 用于更新网络参数,如`optim.SGD`。 - **流程**: 定义网络 → 正向传播 → 计算损失 → 反向传播 → 更新参数。 这是一篇全面介绍PyTorch神经网络基础的文章,涵盖了从网络定义到训练的完整流程。
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
文档评分
请文明评论,理性发言.