楼主: 时光永痕
1098 0

[数据挖掘新闻] 如何处理卷积神经网络中的过拟合 [推广有奖]

  • 0关注
  • 14粉丝

svip3

学术权威

12%

(VIP/贵宾)四级

17%

威望
0
论坛币
26 个
通用积分
49.8622
学术水平
4 点
热心指数
4 点
信用等级
4 点
经验
34070 点
帖子
2731
精华
0
在线时间
317 小时
注册时间
2020-7-21
最后登录
2024-5-13

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如何处理卷积神经网络中的过拟合
当训练数据集(用于“教学”模型的数据集)的准确性大于测试准确性时,就会发生机器学习模型的过拟合或高方差。在“损失”方面,当模型的训练集中误差较小而测试集中误差较大时,过度拟合会显示出来。您可以通过绘制损耗和准确性指标并查看两个数据集的绩效指标在何处收敛来直观地识别这一点。
CNN中的过度拟合-损失与时代图损失与时代图
CNN中的过度拟合-准确性与时代图精度与时代图
过度拟合表明您的模型对于要解决的问题而言过于复杂,即,在回归模型和集成学习的情况下,模型具有太多功能;在卷积神经网络的情况下,具有过滤功能;在整体深度方法下,其层次太多学习模型。这会使您的模型很好地了解示例数据,但对任何新数据的性能均较差。
这很烦人,但可以通过调整超参数来解决,但首先,让我们首先确保将数据划分为比例合理的集合。
分割数据
对于深度学习模型,我建议拥有3个数据集:培训,验证和测试。验证集应用于微调模型,直到您对模型的性能满意为止,然后切换到测试数据以训练模型的最佳版本。首先,我们将导入必要的库:
从sklearn.model_selection导入train_test_split
现在让我们谈谈比例。我的理想比率是70/10/20,这意味着训练集应由您数据的约70%组成,然后将10%用于验证集,将20%用于测试集,就像这样,
#创建验证数据集
Xtrain,Xval,ytrain,yval = train_test_split(train_images,train_labels_final,train_size = 0.9,test_size = 0.1,random_state = 42)#创建测试和最终训练数据集
Xtrain,Xtest,ytrain,ytest = train_test_split(Xtrain,ytrain,train_size = 0.78,random_state = 42)
您将需要执行两个train_test_split()函数调用。第一次调用是在图像和标签的初始训练集上进行的,以形成验证集。我们将调用参数random_state来保持函数运行时结果的一致性,并调用test_size来注意我们希望验证集的大小为训练数据的10%,而train_size则将其设置为等于训练数据的剩余百分比数据为90%。
默认情况下可以省略,因为python足够聪明地进行数学运算。变量Xval和yval是指我们的验证图像和标签。在第二次调用中,我们将从新形成的训练数据Xtrain和ytrain生成测试数据集。我们将重复上述操作,但是这次我们将最新训练集设置为先前训练集的78%,并将最新数据集分配给与先前训练相同的变量以保持一致性。同时,我们将测试数据分配给Xtest以获得测试图像并测试标签数据。
现在我们准备开始建模。请参阅我以前的博客,深入了解CNN的初始设置。假设我们的第一个模型如上图所示,我们将从第二个模型开始。我们将使用以下技术:
正则化
重量初始化
辍学正则化
体重限制
其他
正则化
正则化通过惩罚复杂模型来优化模型,从而最大程度地减少损失和复杂性。因此,这迫使我们的神经网络变得更简单。这里我们将使用L2正则化器,因为它是最常见的并且比L1正则化器更稳定。在这里,我们将向网络的第二层和第三层添加一个正则化器,其学习率(lr)为0.01。
#隐藏的第1层
model2.add(layers.Conv2D(64,(4,4),Activation ='relu',kernel_regularizer = regularizers.l2(l = 0.01))))
model2.add(layers.MaxPooling2D((2,2)))#隐藏第2层
model2.add(layers.Conv2D(128,(3,3),activation ='relu',kernel_regularizer = regularizers.l2(l = 0.01))))
model2.add(layers.MaxPooling2D((2
重量初始化
权重初始化是在训练过程开始之前首次为所有神经元设置权重向量。选择正确的权重至关重要,因为我们希望在足够的时间内尽可能接近成本函数的全局最小值。在此模型的迭代中,我们将使用He初始化:
#第三模型的输入层
model3.add(layers.Conv2D(32,(3,3),激活='relu',kernel_initializer ='he_normal',input_shape =(96,96,3)))
辍学正则化
辍学正则化会忽略该层中单元的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:神经网络 神经网 过拟合 Activation activatio

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-22 17:42