TensorFlow笔记之神经网络优化——正则化

  1. 过拟合:神经网络模型在训练数据集上的准确率较高,在新的数据进行预测或分类时准确率较低, 说明模型的泛化能力差。
  2. 正则化:在损失函数中给每个参数 w 加上权重,引入模型复杂度指标,从而抑制模型噪声, 减小过拟合。
    使用正则化后,损失函数loss变为两项之和:loss = loss(y 与 y_) + REGULARIZER*loss(w)
    其中,第一项是预测结果与标准答案之间的差距,如之前讲过的交叉熵、均方误差等;第二项是正则化计算结果。
  3. 正则化计算方法:
    ① L1 正则化:
    用 Tesnsorflow 函数表示:loss(w) = tf.contrib.layers.l1_regularizer(REGULARIZER)(w)
    ② L2 正则化:
    用 Tesnsorflow 函数表示:loss(w) = tf.contrib.layers.l2_regularizer(REGULARIZER)(w)
  4. 实例
            用 300 个符合正态分布的点 X[x0, x1]作为数据集,根据点 X[x0, x1]计算生成标注 Y_,将数据集标注为红色点和蓝色点。
            标注规则为:当 x02 + x12 < 2 时, y_=1,标注为红色;当 x02 + x12 ≥2 时, y_=0,标注为蓝色。
            我们分别用无正则化和有正则化两种方法,拟合曲线, 把红色点和蓝色点分开。 在实际分类时,如果前向传播输出的预测值 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()
    代码: 






    执行代码, 效果如下:
    首先,数据集实现可视化, x02 + x12 < 2 的点显示红色, x02 + x12 ≥2 的点显示蓝色,如图所示:

    接着,执行无正则化的训练过程, 把红色的点和蓝色的点分开, 生成曲线如下图所示:


    最后,执行有正则化的训练过程, 把红色的点和蓝色的点分开, 生成曲线如下图所示:

    对比无正则化与有正则化模型的训练结果,可看出有正则化模型的拟合曲线平滑,模型具有更好的泛化能力。
     
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值