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 as gloss

‘‘‘
# 模型参数
num_inputs, num_outputs, num_hiddens1, num_hiddens2 = 784,10,256,256

W1 = nd.random.normal(scale=0.01,shape=(num_inputs,num_hiddens1))
b1 = nd.zeros(num_hiddens1)

W2 = nd.random.normal(scale=0.01,shape=(num_hiddens1,num_hiddens2))
b2 = nd.zeros(num_hiddens2)

W3 = nd.random.normal(scale=0.01,shape=(num_hiddens2,num_outputs))
b3 = nd.zeros(num_outputs)

params = [W1,b1,W2,b2,W3,b3]

for param in params:
    param.attach_grad()

# 定义网络

‘‘‘
# 读取数据
# fashionMNIST 28*28 转为224*224
def load_data_fashion_mnist(batch_size, resize=None, root=os.path.join(
        ‘~‘, ‘.mxnet‘, ‘datasets‘, ‘fashion-mnist‘)):
    root = os.path.expanduser(root)  # 展开用户路径 ‘~‘。
    transformer = []
    if resize:
        transformer += [gdata.vision.transforms.Resize(resize)]
    transformer += [gdata.vision.transforms.ToTensor()]
    transformer = gdata.vision.transforms.Compose(transformer)
    mnist_train = gdata.vision.FashionMNIST(root=root, train=True)
    mnist_test = gdata.vision.FashionMNIST(root=root, train=False)
    num_workers = 0 if sys.platform.startswith(‘win32‘) else 4
    train_iter = gdata.DataLoader(
        mnist_train.transform_first(transformer), batch_size, shuffle=True,
        num_workers=num_workers)
    test_iter = gdata.DataLoader(
        mnist_test.transform_first(transformer), batch_size, shuffle=False,
        num_workers=num_workers)
    return train_iter, test_iter

# 定义网络
drop_prob1,drop_prob2 = 0.2,0.5
# Gluon版
net = nn.Sequential()
net.add(nn.Dense(256,activation="relu"),
        nn.Dropout(drop_prob1),
        nn.Dense(256,activation="relu"),
        nn.Dropout(drop_prob2),
        nn.Dense(10)
        )
net.initialize(init.Normal(sigma=0.01))

# 训练模型

def accuracy(y_hat, y):
    return (y_hat.argmax(axis=1) == y.astype(‘float32‘)).mean().asscalar()
def evaluate_accuracy(data_iter, net):
    acc = 0
    for X, y in data_iter:
        acc += accuracy(net(X), y)
    return acc / len(data_iter)

def train(net, train_iter, test_iter, loss, num_epochs, batch_size,
              params=None, lr=None, trainer=None):
    for epoch in range(num_epochs):
        train_l_sum = 0
        train_acc_sum = 0
        for X, y in train_iter:
            with autograd.record():
                y_hat = net(X)
                l = loss(y_hat, y)
            l.backward()
            if trainer is None:
                gb.sgd(params, lr, batch_size)
            else:
                trainer.step(batch_size)  # 下一节将用到。
            train_l_sum += l.mean().asscalar()
            train_acc_sum += accuracy(y_hat, y)
        test_acc = evaluate_accuracy(test_iter, net)
        print(‘epoch %d, loss %.4f, train acc %.3f, test acc %.3f‘
              % (epoch + 1, train_l_sum / len(train_iter),
                 train_acc_sum / len(train_iter), test_acc))

num_epochs = 5
lr = 0.5
batch_size = 256
loss = gloss.SoftmaxCrossEntropyLoss()
train_iter, test_iter = load_data_fashion_mnist(batch_size)

trainer = gluon.Trainer(net.collect_params(),‘sgd‘,{‘learning_rate‘:lr})
train(net,train_iter,test_iter,loss,num_epochs,batch_size,None,None,trainer)

原文地址:https://www.cnblogs.com/TreeDream/p/10045913.html

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

Gluon 实现 dropout 丢弃法的相关文章

MXNET:丢弃法

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

小白学习之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-

机器学习(ML)七之模型选择、欠拟合和过拟合

训练误差和泛化误差 需要区分训练误差(training error)和泛化误差(generalization error).前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似.计算训练误差和泛化误差可以使用之前介绍过的损失函数,例如线性回归用到的平方损失函数和softmax回归用到的交叉熵损失函数. 直观地解释训练误差和泛化误差这两个概念.训练误差可以认为是做往年高考试题(训练题)时的错误率,泛化误差则可以通过真正参加高

Recommending music on Spotify with deep learning 采用深度学习算法为Spotify做基于内容的音乐推荐

本文参考http://blog.csdn.net/zdy0_2004/article/details/43896015译文以及原文file:///F:/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/Recommending%20music%20on%20Spotify%20with%20deep%20learning%20%E2%80%93%20Sander%20Dieleman.html 本文是比利时根特大学(Ghent University)的Reservoir 

Task03 打卡

模型过拟合欠拟合 训练误差和泛化误差 训练误差指模型在训练数据集上表现出的误差 泛化误差指模型在任意?个测试数据样本上表现出的误差的期望 我们的注意力应集中于降低泛化误差,使模型具有更好的普适性. 模型选择 验证数据集 (validation set) 预留?部分在训练数据集和测试数据集以外的数据来进?模型选择.这部分数据被称为验证数据集,简称验证集. \(K\)折交叉验证 我们把原始训练数据集分割成K个不重合的?数据集,然后我们做K次模型训练和验证.每?次,我们使??个?数据集验证模型,并使?

流量控制与拥塞控制

拥塞控制 在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion).出现资源拥塞的条件:对资源需求的总和 > 可用资源若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降. 拥塞控制与流量控制的关系 拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷.拥塞控制是一个全局性的过程,涉及到所有的主机.所有的路由器,以及与降低网络传输性能有关的所有因素. 流量控制往往指在给定的发送端和

93、QOS区分式服务配置实验之队列

1.队列解析 2.First In First Out(FIFO) 接口带宽大于2.048M的接口,默认情况下,运行的是FIFO队列. 接口带宽小于2.048M的接口,默认情况下,运行的是WFQ队列. 3.Priority Queuing(PQ) 分类:PQ队列可以分为High.Medium.Normal.Low四个队列,默认流量都在Normal队列. 加队:默认各个队列缓存大小分别为20.40.60.80,采用尾丢弃法. 调度:只有当高一级流量发送完毕,才会发送低一级流量. 4.Custom

《Python自然语言处理实战:核心技术与算法》PDF新书推介,附带链接地址

本书从各个方面着手,帮助读者理解NLP的过程,提供了各种实战场景,结合现实项目背景,帮助读者理解NLP中的数据结构和算法以及目前主流的NLP技术与方法论,结合信息检索技术与大数据应用等流行技术,终完成对NLP的学习和掌握. --黄英 阿里巴巴达摩院高级算法专家 目前市面上的NLP书籍,要么是针对研究人员的偏理论性的教科书,要么是针对资深工程师进一步深入了解NLP技术的高级读物.为了填补这一空白,三位来自工业界的资深NLP专家,结合真实的项目,让读者能够以快的速度掌握NLP技术的精髓.同时,穿插大