神经网络与PyTorch基础入门
立即解锁
发布时间: 2025-09-01 01:16:36 阅读量: 3 订阅数: 12 AIGC 


现代计算机视觉与PyTorch
### 神经网络与PyTorch基础入门
#### 1. 神经网络基础回顾
在神经网络训练中,前馈传播和反向传播的过程会不断重复,直至损失尽可能小。这意味着训练结束时,神经网络会调整其权重 $\theta$,以使其预测出我们期望的输出。例如,在之前的简单示例中,训练后的网络在输入为 $\{1,1\}$ 时会输出 0,因为它经过训练以达成这一目标。
在了解神经网络的架构和各组件之前,我们先认识到需要一个能一次性完成特征提取和分类的单一网络。接着,我们学习了如何连接网络的各层,然后实现前馈传播以计算与当前网络权重对应的损失值。之后,我们实现了反向传播,以了解优化权重来最小化损失值的方法,还学习了学习率在为网络获取最优权重过程中的作用。此外,我们还使用 NumPy 从头实现了网络的所有组件,包括前馈传播、激活函数、损失函数、链式法则和梯度下降来更新权重,为后续学习打下了坚实基础。
以下是一些常见问题及思考:
| 问题 | 说明 |
| --- | --- |
| 神经网络有哪些不同的层? | 不同类型的层在神经网络中承担着不同的功能,如输入层、隐藏层和输出层等。 |
| 前馈传播的输出是什么? | 前馈传播根据输入和当前权重计算出中间结果和最终输出。 |
| 连续因变量的损失函数与二元因变量或分类因变量的损失函数有何不同? | 不同类型的因变量适用不同的损失函数,以更好地衡量预测值与真实值之间的差异。 |
| 什么是随机梯度下降? | 随机梯度下降是一种优化算法,用于在训练过程中更新权重。 |
| 反向传播的作用是什么? | 反向传播用于计算损失函数对权重的梯度,以便更新权重。 |
| 在反向传播过程中,各层的所有权重是如何更新的? | 通过链式法则计算梯度,并根据学习率更新权重。 |
| 训练神经网络的每个周期内会使用哪些函数? | 包括前馈传播、损失函数计算、反向传播等函数。 |
| 为什么在 GPU 上训练网络比在 CPU 上快? | GPU 拥有更多的核心,可以并行处理大量计算,从而加速训练过程。 |
| 学习率在训练神经网络时有什么影响? | 学习率决定了权重更新的步长,过大或过小都会影响训练效果。 |
| 学习率参数的典型值是多少? | 学习率的典型值通常在 0.001 到 0.1 之间,但具体值需要根据具体问题进行调整。 |
#### 2. PyTorch 基础
在学习了神经网络的基本构建块并使用 Python 从头实现了前向和反向传播后,接下来我们将深入学习如何使用 PyTorch 构建神经网络。PyTorch 是一个强大的深度学习框架,在后续的图像分析应用中会多次使用。
##### 2.1 安装 PyTorch
PyTorch 提供了多种有助于构建神经网络的功能,它通过高级方法抽象出各种组件,并提供了能利用 GPU 加速神经网络训练的张量对象。
安装 PyTorch 的步骤如下:
1. 确保已安装 Python。
2. 访问 [https://pytorch.org/](https://pytorch.org/) 网站的“QUICK START LOCALLY”部分,选择你的操作系统、使用 Conda 作为包管理工具、Python 作为编程语言,并根据你的情况选择计算平台(如果有 CUDA 库,可以选择相应版本)。这会提示你在终端中运行类似 `conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia` 的命令。
3. 在命令提示符或终端中运行该命令,让 Anaconda 安装 PyTorch 和必要的依赖项。
4. 验证 PyTorch 是否安装成功。在命令提示符或终端中执行 `python`,然后输入以下代码:
```python
import torch
print(torch.__version__)
```
如果你拥有 NVIDIA 显卡,强烈建议安装 CUDA 驱动程序,它可以将深度学习训练速度提高几个数量级。你可以参考相关文档了解如何安装 CUDA 驱动程序。安装完成后,你可以选择 12.1 作为 CUDA 版本,并使用相应的命令安装 PyTorch。此外,本书的所有代码都可以在 Google Colab([https://colab.research.google.com/](https://colab.research.google.com/))上执行,其中 Python 和 PyTorch 是默认可用的,并且还提供免费的 GPU 访问。
##### 2.2 PyTorch 张量
张量是 PyTorch 的基本数据类型,类似于 NumPy 的多维数组。具体来说:
- 标量可以表示为零维张量。
- 向量可以表示为一维张量。
- 二维矩阵可以表示为二维张量。
- 多维矩阵可以表示为多维张量。
例如,彩色图像可以看作是一个三维像素值张量,因为它由高度×宽度×3 个像素组成,其中三个通道对应 RGB 通道;而灰度图像可以看作是二维张量,因为它由高度×宽度个像素组成。
以下是张量的初始化和常见操作:
```mermaid
graph TD;
A[初始化张量] --> B[列表初始化];
A --> C[内置函数初始化];
A --> D[NumPy 数组转换];
B --> B1[torch.tensor([[1,2]])];
C --> C1[torch.zeros((3, 4))];
C --> C2[torch.ones((3, 4))];
C --> C3[torch.randint(low=0, high=10, size=(3,4))];
C --> C4[torch.rand(3, 4)];
C --> C5[torch.randn((3,4))];
D --> D1[torch.tensor(np.array([[10,20,30],[2,3,4]]))];
```
**初始化张量**
- 列表初始化:
```python
import torch
x = torch.tensor([[1,2]])
y = torch.tensor([[1],[2]])
print(x.shape) # torch.Size([1,2])
print(y.shape) # torch.Size([2,1])
print(x.dtype) # torch.int64
```
如果张量包含不同数据类型的数据,整个张量会被强制转换为最通用的数据类型:
```python
x = torch.tensor([False, 1, 2.0])
print(x) # tensor([0., 1., 2.])
```
- 内置函数初始化:
```python
# 生成全零张量
torch.zeros((3, 4))
# 生成全一张量
torch.ones((3, 4))
# 生成指定范围的随机整数张量
torch.randint(low=0, high=10, size=(3,4))
# 生成 0 到 1 之间的随机数张量
torch.rand(3, 4)
# 生成服从正
```
0
0
复制全文
相关推荐










