标签: 编程

64 篇文章

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