利用Keras中的权重约束减少深度神经网络中的过拟合
副标题[/!--empirenews.page--]
权重约束提供了一种方法,用于减少深度学习神经网络模型对训练数据的过度拟合,并改善模型对新数据(例如测试集)的性能。有多种类型的权重约束,例如最大和单位向量规范,有些需要必须配置的超参数。 在本教程中,您将发现Keras API,用于向深度学习神经网络模型添加权重约束以减少过度拟合。 完成本教程后,您将了解: 如何使用Keras API创建向量范数约束。 如何使用Keras API为MLP,CNN和RNN层添加权重约束。 如何通过向现有模型添加权重约束来减少过度拟合。 教程概述 本教程分为三个部分,他们是: Keras的重量约束 图层上的权重约束 体重约束案例研究 Keras的重量约束 Keras API支持权重限制。约束是按层指定的,但是在层中应用和强制执行每个节点。 使用约束通常涉及在图层上为输入权重设置kernel_constraint参数,并为偏差权重设置bias_constraint。 通常,权重约束不用于偏差权重。一组不同的向量规范可以用作约束,作为keras.constraints模块中的类提供。他们是: 最大范数(max_norm),用于强制权重等于或低于给定限制。 非负规范(non_neg),强制权重具有正数。 单位范数(unit_norm),强制权重为1.0。 Min-Max范数(min_max_norm),用于强制权重在一个范围之间。 例如,一个简单的约束可以这样被引入和实例化: # import norm from keras.constraints import max_norm # instantiate norm norm = max_norm(3.0) # import norm from keras.constraints import max_norm # instantiate norm norm = max_norm(3.0) 图层上的权重约束 权重规范可用于Keras的大多数层。在本节中,我们将看一些常见的例子。 MLP加权约束 以下示例在密集完全连接层上设置最大范数权重约束。 # example of max norm on a dense layer from keras.layers import Dense from keras.constraints import max_norm ... model.add(Dense(32, kernel_constraint=max_norm(3), bias_constraint==max_norm(3))) ... # example of max norm on a dense layer from keras.layers import Dense from keras.constraints import max_norm ... model.add(Dense(32, kernel_constraint=max_norm(3), bias_constraint==max_norm(3))) ... CNN加权约束 下面的示例在卷积层上设置最大范数权重约束。 # example of max norm on a cnn layer from keras.layers import Conv2D from keras.constraints import max_norm ... model.add(Conv2D(32, (3,3), kernel_constraint=max_norm(3), bias_constraint==max_norm(3))) ... RNN权重约束 与其他图层类型不同,递归神经网络允许您对输入权重和偏差以及循环输入权重设置权重约束。通过图层的recurrent_constraint参数设置重复权重的约束。以下示例在LSTM图层上设置最大范数权重约束。 # example of max norm on an lstm layer from keras.layers import LSTM from keras.constraints import max_norm ... model.add(LSTM(32, kernel_constraint=max_norm(3), recurrent_constraint=max_norm(3), bias_constraint==max_norm(3))) ... # example of max norm on an lstm layer from keras.layers import LSTM from keras.constraints import max_norm ... model.add(LSTM(32, kernel_constraint=max_norm(3), recurrent_constraint=max_norm(3), bias_constraint==max_norm(3))) ... 现在我们知道如何使用权重约束API,让我们看一个有效的例子。 加权约束案例研究 在本节中,我们将演示如何使用权重约束来减少MLP对简单二元分类问题的过度拟合。此示例提供了一个模板,用于将权重约束应用于您自己的神经网络以进行分类和回归问题。 二元分类问题 我们将使用标准二进制分类问题来定义两个半圆数据集,每个类一个半圆。每个观测值都有两个输入变量,它们具有相同的比例,类输出值为0或1.该数据集称为“月球”数据集,因为绘制时每个类中的观测值的形状。我们可以使用make_moons()函数从这个问题中生成观察结果。我们将为数据添加噪声并为随机数生成器播种,以便每次运行代码时生成相同的样本。 # generate 2d classification dataset X, y = make_moons(n_samples=100, noise=0.2, random_state=1) 我们可以绘制两个变量在图表上作为x和y坐标的数据集,并将类值作为观察的颜色。下面列出了生成数据集并绘制数据集的完整示例。 # generate two moons dataset from sklearn.datasets import make_moons from matplotlib import pyplot from pandas import DataFrame # generate 2d classification dataset X, y = make_moons(n_samples=100, noise=0.2, random_state=1) # scatter plot, dots colored by class value df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y)) colors = {0:'red', 1:'blue'} fig, ax = pyplot.subplots() grouped = df.groupby('label') for key, group in grouped: group.plot(axax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key]) pyplot.show() # generate two moons dataset from sklearn.datasets import make_moons from matplotlib import pyplot from pandas import DataFrame # generate 2d classification dataset X, y = make_moons(n_samples=100, noise=0.2, random_state=1) # scatter plot, dots colored by class value df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y)) colors = {0:'red', 1:'blue'} fig, ax = pyplot.subplots() grouped = df.groupby('label') for key, group in grouped: group.plot(axax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key]) pyplot.show() (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |