神经网络优化----正则化

过拟合:神经网络模型在训练数据集上的准确率较高,在新的数据进行预测或分类时准确率较低,说明模型的泛化能力差。
正则化:在损失函数中给每个参数w加上权重,引入模型复杂度指标,从而抑制模型噪声,减小过拟合。
使用正则化后,损失函数loss变为两项之和:
loss = loss(y与y_) + REGULARIZER * loss(w)
其中,第一项是预测解锁与标准答案之间的差距,如之前讲过的交叉熵、均方误差;第二项是正则化 计算结果。
正则化计算方法:
在这里插入图片描述
用Tensorflow函数表示:loss(w) = tf.contrib.layers.11_regularizer(REGULARIZER)(w)
在这里插入图片描述
用Tensorflow函数表示:loss(w) = tf.contrib.layers.12_regularizer(REGULARIZER)(w)

用Tensorflow函数实现正则化:
tf.add_to_collection(losses",tf.contrib.layers.12_regularizer(regularizer)(w))
loss = cem + tf.add_n(tf.get_collection(‘losses’))

例如:
用300个符合正态分布的点X[x0,x1]作为数据集,根据点X[x0,x1]计算生成标注Y_,将数据集标注为红色点和蓝色点。
标注规则为:
在这里插入图片描述
我们分别用无正则化和有正则化两种方法,拟合曲线,把红色点和蓝色点分开。在实际分类时,如果前向传播输出的预测值y接近1则为红色点概率越大,接近0则为蓝色点概率越大,输出的预测值y为0.5是红蓝点概率分界线。

matplotlib模块:Python中的可视化工具模块,实现函数可视化
终端安装指令:sudo pip install matplotlib
函数plt.scatter():利用指定颜色实现点(x,y)的可视化
plt.scatter(x坐标,y坐标,c=“颜色”)
plt.show()
收集规定区域内所有的网络坐标点:
xx, yy = np.mgrid[起:止:步长,起:止:步长] #找到规定区域以步长为分辨率的行列网络坐标点
grid = np.c_[xx.ravel(), yy.ravel()] #收集规定区域内所有的网络坐标点
plt.contour()函数:告知x、y坐标和各点高度,用levels指定高度的点描上颜色
plt.contour(x轴坐标值,y轴坐标值,该点的高度,levels=[等高线的高度])
plt.show()

本例代码如下:
神经网络优化----正则化_第1张图片
神经网络优化----正则化_第2张图片
神经网络优化----正则化_第3张图片
神经网络优化----正则化_第4张图片
神经网络优化----正则化_第5张图片
神经网络优化----正则化_第6张图片
执行代码,效果如下:
首先,数据集实现可视化

神经网络优化----正则化_第7张图片
接着,执行无正则化的训练过程,把红色的点和蓝色的点分开,生成曲线如下图所示:
神经网络优化----正则化_第8张图片
最后,执行有正则化的训练过程,把红色的点和蓝色的点分开,生成曲线如下图所示:
神经网络优化----正则化_第9张图片
对比无正则化与有正则化模型的训练结果,可看出有正则化模型的拟合曲线平滑,模型具有更好的泛化能力。

你可能感兴趣的:(神经网络优化----正则化)