MXNET:权重衰减-gluon实现

构建数据集

# -*- coding: utf-8 -*-
from mxnet import init
from mxnet import ndarray as nd
from mxnet.gluon import loss as gloss
import gb

n_train = 20
n_test = 100

num_inputs = 200
true_w = nd.ones((num_inputs, 1)) * 0.01
true_b = 0.05
features = nd.random.normal(shape=(n_train+n_test, num_inputs))
labels = nd.dot(features, true_w) + true_b
labels += nd.random.normal(scale=0.01, shape=labels.shape)
train_features, test_features = features[:n_train, :], features[n_train:, :]
train_labels, test_labels = labels[:n_train], labels[n_train:]

数据迭代器

from mxnet import autograd
from mxnet.gluon import data as gdata

batch_size = 1
num_epochs = 10
learning_rate = 0.003

train_iter = gdata.DataLoader(gdata.ArrayDataset(
    train_features, train_labels), batch_size, shuffle=True)
loss = gloss.L2Loss()

训练并展示结果

gb.semilogy函数:绘制训练和测试数据的loss

from mxnet import gluon
from mxnet.gluon import nn

def fit_and_plot(weight_decay):
    net = nn.Sequential()
    net.add(nn.Dense(1))
    net.initialize(init.Normal(sigma=1))
    # 对权重参数做 L2 范数正则化,即权重衰减。
    trainer_w = gluon.Trainer(net.collect_params('.*weight'), 'sgd', {
        'learning_rate': learning_rate, 'wd': weight_decay})
    # 不对偏差参数做 L2 范数正则化。
    trainer_b = gluon.Trainer(net.collect_params('.*bias'), 'sgd', {
        'learning_rate': learning_rate})
    train_ls = []
    test_ls = []
    for _ in range(num_epochs):
        for X, y in train_iter:
            with autograd.record():
                l = loss(net(X), y)
            l.backward()
            # 对两个 Trainer 实例分别调用 step 函数。
            trainer_w.step(batch_size)
            trainer_b.step(batch_size)
        train_ls.append(loss(net(train_features),
                             train_labels).mean().asscalar())
        test_ls.append(loss(net(test_features),
                            test_labels).mean().asscalar())
    gb.semilogy(range(1, num_epochs + 1), train_ls, 'epochs', 'loss',
                range(1, num_epochs + 1), test_ls, ['train', 'test'])
    return 'w[:10]:', net[0].weight.data()[:, :10], 'b:', net[0].bias.data()
print fit_and_plot(5)
  • 使用 Gluon 的 wd 超参数可以使用权重衰减来应对过拟合问题。
  • 我们可以定义多个 Trainer 实例对不同的模型参数使用不同的迭代方法。

原文地址:https://www.cnblogs.com/houkai/p/9521015.html

时间: 2024-10-12 20:15:49

MXNET:权重衰减-gluon实现的相关文章

MXNET:权重衰减

权重衰减是应对过拟合问题的常用方法. \(L_2\)范数正则化 在深度学习中,我们常使用L2范数正则化,也就是在模型原先损失函数基础上添加L2范数惩罚项,从而得到训练所需要最小化的函数. L2范数惩罚项指的是模型权重参数每个元素的平方和与一个超参数的乘积.如:\(w_1\),\(w_2\)是权重参数,b是偏差参数,带\(L_2\)范数惩罚项的新损失函数为: \[\ell(w_1, w_2, b) + \frac{\lambda}{2}(w_1^2 + w_2^2),\] \(\lambda\)调

调参过程中的参数 学习率,权重衰减,冲量(learning_rate , weight_decay , momentum)

无论是深度学习还是机器学习,大多情况下训练中都会遇到这几个参数,今天依据我自己的理解具体的总结一下,可能会存在错误,还请指正. learning_rate , weight_decay , momentum这三个参数的含义. 并附上demo. 我们会使用一个例子来说明一下: 比如我们有一堆数据,我们只知道这对数据是从一个黑盒中得到的,我们现在要寻找到那个具体的函数f(x),我们定义为目标函数T. 我们现在假定有存在这个函数并且这个函数为: 我们现在要使用这对数据来训练目标函数. 我们可以设想如果

深度学习之权重衰减——2020.27

?????过拟合现象,即模型的训练误差远?于它在测试集上的误差.虽然增?训练数据集可能会减轻过拟合,但是获取额外的训练数据往往代价?昂.本节介绍应对过拟合问题的常??法:权重衰减(weight decay). 一.方法 ?????权重衰减等价于 范数正则化(regularization).正则化通过为模型损失函数添加惩罚项使学出的模型参数值较?,是应对过拟合的常??段.我们先描述 范数正则化,再解释它为何?称权重衰减. ?????范数正则化在模型原损失函数基础上添加 范数惩罚项,从?得到训练所需

MXNET:丢弃法

除了前面介绍的权重衰减以外,深度学习模型常常使用丢弃法(dropout)来应对过拟合问题. 方法与原理 为了确保测试模型的确定性,丢弃法的使用只发生在训练模型时,并非测试模型时.当神经网络中的某一层使用丢弃法时,该层的神经元将有一定概率被丢弃掉. 设丢弃概率为 \(p\).具体来说,该层任一神经元在应用激活函数后,有 \(p\) 的概率自乘 0,有 \(1?p\) 的概率自除以 \(1?p\) 做拉伸.丢弃概率是丢弃法的超参数. 多层感知机中,隐层节点的输出: \[h_i = \phi(x_1

MXNET:监督学习

线性回归 给定一个数据点集合 X 和对应的目标值 y,线性模型的目标就是找到一条使用向量 w 和位移 b 描述的线,来尽可能地近似每个样本X[i] 和 y[i]. 数学公式表示为\(\hat{y}=Xw+b\) 目标函数是最小化所有点的平方误差 \(\sum_{i=1}^{n} (\hat{y_i}-y_i)^2\) ?个神经?络就是?个由节点(神经元)和有向边组成的集合.我们? 般把?些节点组成层,每?层先从下??层的节点获取输?,然后输出给上?的层使?.要计算? 个节点值,我们需要将输?节点

MXNet 中的几个数据集

from mxnet import gluon def transform(data, label): return data.astype('float32') / 255., label.astype('float32') mnist_train = gluon.data.vision.MNIST(train= True, transform= transform) mnist_test = gluon.data.vision.MNIST(train= False, transform= t

Gluon 实现 dropout 丢弃法

多层感知机中: hi 以 p 的概率被丢弃,以 1-p 的概率被拉伸,除以  1 - p import mxnet as mx import sys import os import time import gluonbook as gb from mxnet import autograd,init from mxnet import nd,gluon from mxnet.gluon import data as gdata,nn from mxnet.gluon import loss a

小白学习之pytorch框架(6)-模型选择(K折交叉验证)、欠拟合、过拟合(权重衰减法(=L2范数正则化)、丢弃法)、正向传播、反向传播

下面要说的基本都是<动手学深度学习>这本花书上的内容,图也采用的书上的 首先说的是训练误差(模型在训练数据集上表现出的误差)和泛化误差(模型在任意一个测试数据集样本上表现出的误差的期望) 模型选择 验证数据集(validation data set),又叫验证集(validation set),指用于模型选择的在train set和test set之外预留的一小部分数据集 若训练数据不够时,预留验证集也是一种luxury.常采用的方法为K折交叉验证.原理为:把train set分割成k个不重合

动手学深度学习 3-5 Others

其他问题 1. 模型选择.欠拟合和过拟合 1.1 训练误差和泛化误差 1.2 模型选择 1.2.1 验证数据集 1.2.2 \(K\) 折交叉验证 由于验证数据集不参与模型训练,当训练数据不够用时,预留大量的验证数据显得太奢侈.一种改善的方法是\(K\)折交叉验证(\(K\)-fold cross-validation).在\(K\)折交叉验证中,我们把原始训练数据集分割成\(K\)个不重合的子数据集,然后我们做\(K\)次模型训练和验证.每一次,我们使用一个子数据集验证模型,并使用其他\(K-