DeepLearning工具Theano学习记录(二) 多层感知机

14 篇文章 4 订阅
12 篇文章 0 订阅

代码参考:http://deeplearning.net/tutorial/mlp.html#mlp

代码学习:http://blog.csdn.net/u012162613/article/details/43221829

代码下载:Github


2015/4/3

Experiment 1:  使用含有1层隐藏层的多层感知机

Github目录下mlp.py文件

使用推荐的配置 

learning_rate = 0.01  

L1_reg = 0.00 

L2_reg=0.0001

n_epoches=1000

batch_size=20

n_hidden=500

实验结果:


实验耗时:



增加中间层:

<span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;">self.hiddenLayer_1 = HiddenLayer(
            rng=rng,
            input=input,
            n_in=n_in,
            n_out=n_hidden_1,
            activation=T.tanh
        )

        self.hiddenLayer_2 = HiddenLayer(
            rng=rng,
            input=self.hiddenLayer_1.output,
            n_in=n_hidden_1,
            n_out=n_hidden_2,
            activation=T.tanh
        )

        self.hiddenLayer_3 = HiddenLayer(
            rng=rng,
            input=self.hiddenLayer_2.output,
            n_in=n_hidden_2,
            n_out=n_hidden_3,
            activation=T.tanh
        )</span></span></span>


MLP中的L1 L2和params也随之改变:

<span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;">self.L1 = (
            abs(self.hiddenLayer_1.W).sum() + abs(self.hiddenLayer_2.W).sum() + abs(self.hiddenLayer_3.W).sum()
            + abs(self.logRegressionLayer.W).sum()
        )

self.L2_sqr = (
            (self.hiddenLayer_1.W ** 2).sum() + (self.hiddenLayer_2.W ** 2).sum() + (self.hiddenLayer_3.W ** 2).sum()
            + (self.logRegressionLayer.W ** 2).sum()
        )

self.params = self.hiddenLayer_1.params + self.hiddenLayer_2.params + self.hiddenLayer_3.params + self.logRegressionLayer.params</span></span></span>



Experiment 2: 使用含有3层隐藏层的多层感知机

Github目录下mlp_3HiddenLayers.py文件

自己中间加入两个隐含层,分别为400 和 300 个节点。实验配置如下: 

learning_rate = 0.01  

L1_reg = 0.00 

L2_reg=0.0001

n_epoches=1000

batch_size=20

n_hidden_1=500

n_hidden_2=400

n_hidden_3=300

实验结果:


实验耗时:


*实验虚拟内存消耗很大!!!



Experiment 3: 使用含有3层隐藏层的多层感知机,学习率减小一倍

修改Experiment 2中代码第264行,learning_rate=0.01 改为 earning_rate=0.005

调整Experiment 2中learning rate。实验配置如下: 

learning_rate = 0.005  

L1_reg = 0.00 

L2_reg=0.0001

n_epoches=1000

batch_size=20

n_hidden_1=500

n_hidden_2=400

n_hidden_3=300

实验结果:


实验耗时:




总结

通过上述三个实验,发现隐含层变多,在测试集上的性能变差。可以参考多层神经网络效果不好的原因:训练深度网络的困难


2015/4/4

针对多层网络效果不好原因,无法确定是由于局部最优还是梯度弥撒。为了探究其原因,决定打印中间变量(模型的参数),发现问题。

在HiddenLayer代码中加入:

<span style="font-size:14px;"><span style="font-size:14px;">def show_params(self):
                print self.W.get_value()
                print self.b.get_value()</span></span>

每次在validation上做测试时候打印变量:

在if (iter + 1) % validation_frequency == 0:下加入代码:

<span style="font-size:14px;"><span style="font-size:14px;">print('It is  %i iteration' %(iter))
                print 'learned parameters for the hidden layer:'
                print classifier.hiddenLayer.show_params()</span></span>


Experiment 1参数的打印结果:


Experiment 2的minibatch_avg_cost打印结果:



Experiment 2的后几轮参数变化打印结果:


红线标注行为第3层隐含层的参数,改行对应展开为:



才疏学浅,分析不出到底是由于梯度弥散还是由于局部最优才导致的问题,改天请教下其他人。


参考博客:http://blog.csdn.net/u012162613/article/details/43221829

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值