0%

1. torch.nn.init 概述

因为神经网络的训练过程其实是寻找最优解的过程,所以神经元的初始值非常重要。如果初始值恰好在最优解附近,神经网络的训练会非常简单。而当神经网络的层数增加以后,一个突出的问题就是梯度消失和梯度爆炸。前者指的是由于梯度接近 0,导致神经元无法进行更新;后者指的是误差梯度在更新中累积得到一个非常大的梯度,这样的梯度会大幅度更新网络参数,进而导致网络不稳定

torch.nn.init 模块提供了合理初始化初始值的方法。它一共提供了四类初始化方法:

  1. Xavier 分布初始化;
  2. Kaiming 分布初始化;
  3. 均匀分布、正态分布、常数分布初始化;
  4. 其它初始化。
    阅读全文 »

1 torch.nn 总览

PyTorch 把与深度学习模型搭建相关的全部类全部在 torch.nn 这个子模块中。根据类的功能分类,常用的有如下十几个部分:

  • Containers:容器类,如 torch.nn.Module
  • Convolution Layers:卷积层,如 torch.nn.Conv2d
  • Pooling Layers:池化层,如 torch.nn.MaxPool2d
  • Non-linear activations:非线性激活层,如 torch.nn.ReLU
  • Normalization layers:归一化层,如 torch.nn.BatchNorm2d
  • Recurrent layers:循环神经层,如 torch.nn.LSTM
  • Transformer layers:transformer 层,如 torch.nn.TransformerEncoder
  • Linear layers:线性连接层,如 torch.nn.Linear
  • Dropout layers:dropout 层,如 torch.nn.Dropout
  • Sparse layers:稀疏层,如 torch.nn.Embedding
  • Vision layers:vision 层,如 torch.nn.Upsample
  • DataParallel layers:平行计算层,如 torch.nn.DataParallel
  • Utilities:其它功能,如 torch.nn.utils.clip_grad_value_
    阅读全文 »

本文中,我们看一看如何构建模型。
创造一个模型分两步:构建模型和权值初始化。而构建模型又有“定义单独的网络层”和“把它们拼在一起”两步。

1. torch.nn.Module

torch.nn.Module 是所有 torch.nn 中的类的父类。我们来看一个非常简单的神经网络:

1
2
3
4
5
6
7
8
class SimpleNet(nn.Module):
def __init__(self, x):
super(SimpleNet,self).__init__()
self.fc = nn.Linear(x.shape[0], 1)

def forward(self, x):
x = self.fc(x)
return x
阅读全文 »