赣州做网站多少钱暴雪公司
news/
2025/9/28 11:15:31/
文章来源:
赣州做网站多少钱,暴雪公司,淘宝客网站建设任务,移动互联网开发心得解决神经网络过拟合问题—Dropout方法一、what is Dropout#xff1f;如何实现#xff1f;二、使用和不使用Dropout的训练结果对比一、what is Dropout#xff1f;如何实现#xff1f;
如果网络模型复杂#xff0c;L2范数权值衰减方法就难以对付过拟合。这种情况下#…
解决神经网络过拟合问题—Dropout方法一、what is Dropout如何实现二、使用和不使用Dropout的训练结果对比一、what is Dropout如何实现
如果网络模型复杂L2范数权值衰减方法就难以对付过拟合。这种情况下用Dropout方法。
Dropout是一种在学习过程中随机删除神经元的方法。
训练时随机选出隐藏层神经元然后将其删除。每传递一次数据就会随机选择要删除的神经元。
测试时对各个神经元的输出要成上训练时的删除比例。
实现代码
每次正向传播self.mask以False形式保存要删除的神经元。
self.mask np.random.rand(*x.shape) self.dropout_ratioself.mask随机生成和x形状相同数组将值大于dropout_ratio元素设为True。
每次反向传播如果正向传播时候传递了信号的神经元反向传按原样传反之不传。
class Dropout:http://arxiv.org/abs/1207.0580def __init__(self, dropout_ratio0.5):self.dropout_ratio dropout_ratioself.mask Nonedef forward(self, x, train_flgTrue):if train_flg:self.mask np.random.rand(*x.shape) self.dropout_ratioreturn x * self.maskelse:return x * (1.0 - self.dropout_ratio)def backward(self, dout):return dout * self.mask二、使用和不使用Dropout的训练结果对比
从MNIST数据集里只选出来300个数据然后增加网络复杂幅度用7层网络每层100个神经元激活函数ReLU。
# coding: utf-8
import os
import sys
sys.path.append(os.pardir) # 为了导入父目录的文件而进行的设定
import numpy as np
import matplotlib.pyplot as plt
from dataset.mnist import load_mnist
from common.multi_layer_net_extend import MultiLayerNetExtend
from common.trainer import Trainer(x_train, t_train), (x_test, t_test) load_mnist(normalizeTrue)# 为了再现过拟合减少学习数据
x_train x_train[:300]
t_train t_train[:300]# 设定是否使用Dropuout以及比例
use_dropout True # 不使用Dropout的情况下为False
dropout_ratio 0.2
# network MultiLayerNetExtend(input_size784, hidden_size_list[100, 100, 100, 100, 100, 100],output_size10, use_dropoutuse_dropout, dropout_rationdropout_ratio)
trainer Trainer(network, x_train, t_train, x_test, t_test,epochs301, mini_batch_size100,optimizersgd, optimizer_param{lr: 0.01}, verboseTrue)
trainer.train()train_acc_list, test_acc_list trainer.train_acc_list, trainer.test_acc_list# 绘制图形
markers {train: o, test: s}
x np.arange(len(train_acc_list))
plt.plot(x, train_acc_list, markero, labeltrain, markevery10)
plt.plot(x, test_acc_list, markers, labeltest, markevery10)
plt.xlabel(epochs)
plt.ylabel(accuracy)
plt.ylim(0, 1.0)
plt.legend(loclower right)
plt.show()下图是使用Dropout的情况 下图是不使用Dropout的情况。 对比得出使用Dropout训练数据和测试数据的识别精度的差距变小了并且训练数据也没有到100%识别。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920567.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!