DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异

简介: DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异

输出结

image.png

===========iteration:0===========

std=0.01:2.302533896615576

Xavier:2.301592862642649

He:2.452819600404312

===========iteration:100===========

std=0.01:2.3021427450183882

Xavier:2.2492771742332085

He:1.614645290697084

===========iteration:200===========

std=0.01:2.3019226530108763

Xavier:2.142875264754691

He:0.8883226546097108

===========iteration:300===========

std=0.01:2.3021797231413514

Xavier:1.801154569414849

He:0.5779849031641334

===========iteration:400===========

std=0.01:2.3012695247928474

Xavier:1.3899007227604079

He:0.41014765063844627

===========iteration:500===========

std=0.01:2.3007728429528314

Xavier:0.9069490262118367

He:0.33691702821838565

===========iteration:600===========

std=0.01:2.298961977446477

Xavier:0.7562167106493611

He:0.3818234934485747

===========iteration:700===========

std=0.01:2.3035037771527715

Xavier:0.5636724725221689

He:0.21607562992114449

===========iteration:800===========

std=0.01:2.3034607224422023

Xavier:0.5658840865099287

He:0.33168882912900743

===========iteration:900===========

std=0.01:2.305051548224051

Xavier:0.588201820904584

He:0.2569635828759095

===========iteration:1000===========

std=0.01:2.2994594023429755

Xavier:0.4185962336886156

He:0.20020701131406038

===========iteration:1100===========

std=0.01:2.2981894831572904

Xavier:0.3963740567004913

He:0.25746657996551603

===========iteration:1200===========

std=0.01:2.2953607843932193

Xavier:0.41330568558866765

He:0.2796398422265146

===========iteration:1300===========

std=0.01:2.2964967978545396

Xavier:0.39618376387851506

He:0.2782019670206384

===========iteration:1400===========

std=0.01:2.299861702734514

Xavier:0.24832216447348573

He:0.1512273585162205

===========iteration:1500===========

std=0.01:2.3006214773891234

Xavier:0.3596899255315174

He:0.2719352219860638

===========iteration:1600===========

std=0.01:2.298109767745866

Xavier:0.35977950572647455

He:0.2650267112104039

===========iteration:1700===========

std=0.01:2.301979953517381

Xavier:0.23664052932406424

He:0.13415720105707601

===========iteration:1800===========

std=0.01:2.299083895357553

Xavier:0.2483172887982285

He:0.14187181238369628

===========iteration:1900===========

std=0.01:2.305385198129093

Xavier:0.3655424067819445

He:0.21497438379944553


 

设计思

image.pngimage.png

 

核心代

class MultiLayerNet:

'……'

   def predict(self, x):

       for layer in self.layers.values():  

           x = layer.forward(x)

       return x                        

   def loss(self, x, t):

       y = self.predict(x)

       weight_decay = 0    

       for idx in range(1, self.hidden_layer_num + 2):

           W = self.params['W' + str(idx)]

           weight_decay += 0.5 * self.weight_decay_lambda * np.sum(W ** 2)

       return self.last_layer.forward(y, t) + weight_decay

   def accuracy(self, x, t):

       y = self.predict(x)      

       y = np.argmax(y, axis=1)  

       if t.ndim != 1 :          

           t = np.argmax(t, axis=1)

       accuracy = np.sum(y == t) / float(x.shape[0]) #计算accuracy并返回

       return accuracy        

   def numerical_gradient(self, x, t):  #T1、numerical_gradient()函数:数值微分法求梯度

       loss_W = lambda W: self.loss(x, t)  

       grads = {}

       for idx in range(1, self.hidden_layer_num+2):  

           grads['W' + str(idx)] = numerical_gradient(loss_W, self.params['W' + str(idx)])

           grads['b' + str(idx)] = numerical_gradient(loss_W, self.params['b' + str(idx)])

       return grads  

   def gradient(self, x, t):

       self.loss(x, t)

       dout = 1

       dout = self.last_layer.backward(dout)

       layers = list(self.layers.values())  

       layers.reverse()

       for layer in layers:

           dout = layer.backward(dout)

       grads = {}

       for idx in range(1, self.hidden_layer_num+2):

           grads['W' + str(idx)] = self.layers['Affine' + str(idx)].dW + self.weight_decay_lambda * self.layers['Affine' + str(idx)].W

           grads['b' + str(idx)] = self.layers['Affine' + str(idx)].db

       return grads

networks = {}

train_loss = {}

for key, weight_type in weight_init_types.items():

   networks[key] = MultiLayerNet(input_size=784, hidden_size_list=[100, 100, 100, 100],

                                 output_size=10, weight_init_std=weight_type)

   train_loss[key] = []

for i in range(max_iterations):

   #定义x_batch、t_batch

   batch_mask = np.random.choice(train_size, batch_size)

   x_batch = x_train[batch_mask]

   t_batch = t_train[batch_mask]

   for key in weight_init_types.keys():

       grads = networks[key].gradient(x_batch, t_batch)

       optimizer.update(networks[key].params, grads)

 

       loss = networks[key].loss(x_batch, t_batch)

       train_loss[key].append(loss)

   if i % 100 == 0:

       print("===========" + "iteration:" + str(i) + "===========")

       for key in weight_init_types.keys():

           loss = networks[key].loss(x_batch, t_batch)

           print(key + ":" + str(loss))


相关文章
|
机器学习/深度学习 算法 数据可视化
基于PaddlePaddle框架对CIFAR-100数据集在简易CNN(LeNet-5修改)和简易DNN的效果对比
基于PaddlePaddle框架对CIFAR-100数据集在简易CNN(LeNet-5修改)和简易DNN的效果对比
256 0
基于PaddlePaddle框架对CIFAR-100数据集在简易CNN(LeNet-5修改)和简易DNN的效果对比
|
机器学习/深度学习 算法
DL之DNN:基于sklearn自带california_housing加利福尼亚房价数据集利用GD神经网络梯度下降算法进行回归预测(数据较多时采用mini-batch方式训练会更快)
DL之DNN:基于sklearn自带california_housing加利福尼亚房价数据集利用GD神经网络梯度下降算法进行回归预测(数据较多时采用mini-batch方式训练会更快)
|
机器学习/深度学习
DL之DNN:自定义MultiLayerNet【6*100+ReLU,SGD】对MNIST数据集训练进而比较【多个超参数组合最优化】性能
DL之DNN:自定义MultiLayerNet【6*100+ReLU,SGD】对MNIST数据集训练进而比较【多个超参数组合最优化】性能
DL之DNN:自定义MultiLayerNet【6*100+ReLU,SGD】对MNIST数据集训练进而比较【多个超参数组合最优化】性能
|
6月前
|
机器学习/深度学习 算法 PyTorch
OpenCV-图像着色(采用DNN模块导入深度学习模型)
OpenCV-图像着色(采用DNN模块导入深度学习模型)
来自OpenCv的DNN模块助力图像分类任务
来自OpenCv的DNN模块助力图像分类任务
133 0
来自OpenCv的DNN模块助力图像分类任务
|
机器学习/深度学习 数据库 SQL
|
机器学习/深度学习
DNN 模块MVP 模式学习中的一些问题
为了让View部分可以测试,我们使用interface来分离View和业务逻辑的耦合。 我的问题是: Q:对于在aspx.design.cs中声明的控件,我们也需要在interface中声明吗?如果要声明,那么在aspx.design.cs中的控件声明是不是就是interface的实现? 我们不能在interface直接声明跟aspx.design.cs控件同名的变量,我们应该认为aspx.design.cs中的控件就是view的一部分,我们无法控制。
478 0
|
机器学习/深度学习 前端开发
介绍一些免费的DNN模块
网址:http://oliverhine.com/DotNetNuke.aspx Administration Advanced Control Panel Free fully featured ajax enabled control panel replacement for Dot...
820 0
|
机器学习/深度学习
如何使用NAnt 自动打包DNN模块 之一
一、安装NAnt 每次开发完毕一个DNN模块的版本,打包DNN模块是一件很繁琐的事情。更重要的是,为每一个发布的版本做一个安装包如果用手工管理和容易出错。这里介绍一下如何使用NAnt自动打包模块。 首先需要下载NAnt,http://sourceforge.net/projects/nant/ 下载之后解压这个ZIP包 解压之后的目录重名名为NAnt,拷贝到c:下面。
943 0
|
机器学习/深度学习 SEO
介绍几个DNN SEO模块,可免费试用的
iFinity Url Master - Get the best SEO results by taking control of your DNN urls iFinity Tagger - Tag your DNN content and create specific, target...
609 0