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
下载文档到本地,方便使用
文档评分