过拟合 准确率大幅下降_玄学调参之过拟合?

11/22 坐标:南京 天气:晴

玄学调参,一脸懵逼。

今天的炼的丹---十分类小还丹。它大概长这样。

cdbf86c44eb84d7bcc48faef60a04e10.png

总共是个类,训练集6W,测试集1w

(我举得这个数据集是真的好用,多且整齐)

磨拳擦掌,卷袖开干。

首先,搭建一个三层的DNN,像这样。

def dnn_model():
    num_input=784
    num_outout=10
    batch_size=32
    learning_rate=0.1
    max_epoch=50
    params = HyperParameters_4_2(
        learning_rate, max_epoch, batch_size,
        net_type=NetType.MultipleClassifier,
        init_method=InitialMethod.Xavier,
        optimizer_name=OptimizerName.SGD,
    )
    net=NeuralNet_4_2(params,'dnn_model')

    f1=FcLayer_2_0(num_input,128,params)
    net.add_layer(f1,'f1')
    s1=ActivationLayer(Sigmoid())
    net.add_layer(s1,'s1')


    f2=FcLayer_2_0(f1.output_size,64,params)
    net.add_layer(f2,'f2')
    s2=ActivationLayer(Sigmoid())
    net.add_layer(s2,'s2')

    f3=FcLayer_2_0(f2.output_size,num_outout,params)
    net.add_layer(f3,'f3')
    c1=ClassificationLayer(Softmax())
    net.add_layer(c1,'c1')

    return net

得到的结果像这样:

f315dbc9d5145d7f4878892ca8bad101.png

训练集大概88%,模型好像过拟合了。

但是不因该啊????

模型过拟合,不因该是模型过于复杂才导致过拟合吗??

就我这个模型,参数加起来还没有2M就过拟合了?????

但是,这个图像,emmmmmmm

61643382bf47f43fae0d1b234ea0c527.png

没办法,尝试一下,解决过拟合的办法。

第一,扩充数据集,不用了,这么优秀的数据集,不需要我扩充

第二,加正则化项,DropOut层

那就加正则项吧

填加一个L2正则项,β=0.1,得到的结果是这样的

013cd312e4abdb3a55dc1e66b9d29112.png

β=0.2,得到的结果是这样的

23bea84cd25e09a6080f1e88bf2f5880.png

凸(艹皿艹 )

c93462e098b3f1d548b89c8302170e5a.png

训练集的准确率是下来了,但是测试集的准确率也没上去啊。而且β越大效果越差。

原理大概是这样

ff39666fe10433ed1f163e87d8c56f3b.png

β越大,偏离最优解越远。

正则化,pass

试一下DropOut,ratio=0.2,得到的结果是这样的

8f985800c8f4f52416c18fc6380cb098.png

感觉和没用之前差不多,我试一下把ratio再调大一点

ratio=0.4,epoch加到200

a2ee190ecbe0c477a6847b9ccec4f939.png

把不加dropout模型跑200epoch

1fd52dcce8d03ba9034cefff6b2a2880.png

(吓死我了,不是欠拟合。)

有一点点用

1460f7320844534f58c4bb2387801768.png

L2,β=0.2 加dropout,ratio=0.2

cc260fa601e28435d5cdbd4786b58aa9.png

1082eb427059809fcbeff35e6b68bdc3.png

我怀疑可能是模型有问题,换一个CNN试试???

def cnn_model():
    batch_size = 32
    learning_rate = 0.01
    max_epoch = 10
    params = HyperParameters_4_2(
        learning_rate, max_epoch, batch_size,
        net_type=NetType.MultipleClassifier,
        init_method=InitialMethod.MSRA,
        optimizer_name=OptimizerName.SGD
    )

    net=NeuralNet_4_2(params,'conv_test')

    c1=ConLayer((1,28,28),(32,3,3),(1,0),params)
    net.add_layer(c1,'c1')
    r1=ActivationLayer(Relu())
    net.add_layer(r1,'r1')
    p1=PoolingLayer(c1.output_shape,(2,2),2,PoolingTypes.Max)
    net.add_layer(p1,'p1')

    f2=FcLayer_2_0(p1.output_size,128,params)
    net.add_layer(f2,'f2')
    bn2=BnLayer(f2.output_size)
    net.add_layer(bn2,'bn2')
    r2=ActivationLayer(Relu())
    net.add_layer(r2,'r2')

    f3=FcLayer_2_0(f2.output_size,10,params)
    net.add_layer(f3,'f3')
    s4=ClassificationLayer(Softmax())
    net.add_layer(s4,'s4')

    return net

注:ConLayer((InputChannelCount, H, W),(OutputChannelCount, FH, FW),(stride, padding),hp) 参数意思是图片输入通道,长,宽;输出通道,卷积核长与宽;步长和padding

PoolingLayer((input_c,input_h,input_w),(pool_h,pool_w),stride,pooling_type) 参数意思是上层输入通道,输入长,宽;池化长,宽;步长,池化类型。

但是感觉跑了一万年,epoch=10

5af6f4881b0aa1c6987ba7144678c44d.png

虽然,CNN比较专业,但是我想知道DNN那个是怎么回事。

CNN牛逼

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值