Tensorflow 2.0学习DAY04 Dropput抑制过拟合与超参数的选择

构建网络的总原则

  1. 增大网络容量,直到过拟合。
  2. 采取措施抑制过拟合。
  3. 继续增大网络容量,直到过拟合。

过拟合与欠拟合

过拟合:在训练数据上得分很高,在测试数据上得分相对比较低。

欠拟合:在训练数据上得分比较低,在测试数据上得分相对比较低。

dropout

 为什么说dropout可以解决过拟合

  1. 取平均的作用:先回到标准的模型即没有dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用“5个结果取均值”或者“多数取胜的投票策略”来决定最终结果。
  2. 减少神经元之间复杂的共适应关系:因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。
  3. dropout类似于性别在生物进化中的角色。

参数选择原则

理想的模型是刚好在欠拟合和过拟合的界线上,也就是正好拟合数据。

首先开发一个过拟合的模型:

  1. 添加更多的层。
  2. 让每一层变得更大。
  3. 训练更多的轮次。

抑制过拟合:(没有训练数据的情况下)

  1. dropout。
  2. 正则化。
  3. 图像增强。

再次,调节超参数:

  1. 学习速率。
  2. 隐藏层单元数。
  3. 训练轮次。
  • 超参数的选择是一个经验与不断测试的结果。
  • 经典机器学习的方法,如特征工程、增加训练数据。
  • 注意交叉验证。

添加dropout层训练

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))  # 28*28
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(10,activation='softmax'))  #把输出变成概率分布

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
              loss='categorical_crossentropy',
              metrics=['acc']
)
model.fit(train_image,train_label_onehot,epochs=10)

结果如下:

查看loss曲线和acc曲线


小型网络训练

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))  # 28*28
model.add(tf.keras.layers.Dense(32,activation='relu'))
model.add(tf.keras.layers.Dense(10,activation='softmax'))  #把输出变成概率分布

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
              loss='categorical_crossentropy',
              metrics=['acc']
)

history = model.fit(train_image,train_label_onehot,
                    epochs=10,
                    validation_data=(test_image,test_label_onehot))

训练结果如下:

loss值和acc值如下:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值