不含模型参数的自定义层 先介绍如何定义一个不含模型参数的自定义层。事实上,这和4.1节(模型构造)中介绍的使用Module类构造模型类似。下面的CenteredLayer类通过继承Module类自定义了一个将输入减掉均值后输出的层,并将层的计算定义在了forward函数里。这个层里不含模型参数。 import torch from torch import nn class CenteredLay…
继承Module类来构造模型 Module类是nn模块里提供的一个模型构造类,是所有神经网络模块的基类,可以继承它来定义想要的模型。下面继承Module类构造一个多层感知机。这里定义的MLP类重载了Module类的__init__函数和forward函数。它们分别用于创建模型参数和定义前向计算。 import torch from torch import nn class ML…
获取和读取数据集 比赛数据分为训练数据集和测试数据集。两个数据集的特征值有连续的数字、离散的标签甚至是缺失值“na”。只有训练数据集包括了每栋房子的价格,也就是标签。 通过pandas库读入并处理数据。 from torch import nn from torch.nn import init import torch import numpy as np import sys import t…
衰减和爆炸 当神经网络的层数较多时,模型的数值稳定性容易变差。不考虑偏差参数,且设所有隐藏层的激活函数为恒等映射(identity mapping)$\phi(x) = x$。给定输入$\boldsymbol{X}$,多层感知机的第$l$层的输出$\boldsymbol{H}^{(l)} = \boldsymbol{X} \boldsymbol{W}^{(1)} \boldsymbol{W}^{(…
正向传播 正向传播是指对神经网络沿着从输入层到输出层的顺序,依次计算并存储模型的中间变量(包括输出)。为简单起见,假设输入是一个特征为$\boldsymbol{x} \in \mathbb{R}^d$的样本,且不考虑偏差项,那么中间变量 $$\boldsymbol{z} = \boldsymbol{W}^{(1)} \boldsymbol{x},$$ 其中$\boldsymbol{W}^{(1)}…
方法 除了权重衰减以外,深度学习模型常常使用丢弃法(dropout)来应对过拟合问题。丢弃法有一些不同的变体。本节中提到的丢弃法特指倒置丢弃法(inverted dropout)。 一个单隐藏层的多层感知机,其中输入个数为4,隐藏单元个数为5,且隐藏单元$h_i$($i=1, \ldots, 5$)的计算表达式为 $$h_i = \phi\left(x_1 w_{1i} + x_2 w_{2i} …
范数 L1范数 L1范数是向量中所有元素绝对值的和。对于一个向量 $ w = [w_1, w_2, …, w_n] $,其L1范数定义为: $$|w|_1 = |w_1| + |w_2| + … + |w_n|$$ L1范数常用于稀疏性约束,因为它会促使某些权重变为零,从而实现特征选择。 L2范数 L2范数是向量中所有元素平方和的平方根。对于同一个向量 $w$,其L2范数定义为: $$|w|_2 …
训练误差和泛化误差 训练误差(training error)指模型在训练数据集上表现出的误差,泛化误差(generalization error)指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。计算训练误差和泛化误差可以使用损失函数,例如线性回归用到的平方损失函数和softmax回归用到的交叉熵损失函数。 在机器学习里,通常假设训练数据集和测试数据集里的每一个…
导入需要的库 from torch import nn from torch.nn import init import numpy as np import sys import torchvision from torch.utils import data from torchvision import transforms 3.10.1 定义模型 和softmax回归唯一的不同在于,多加了…
导入需要的库 import torch from torch import nn from torch.nn import init import numpy as np import sys import torchvision from torch.utils import data from torchvision import transforms 获取和读取数据 def get_data…