最近有学一些机器学习的相关知识,就来讲一些tensorflow使用正则化和不使用正则化的区别
简介
——搭建一个简单的神经网络
——前向传播
——反向传播过程
——八股之正则化
什么是正则化呢?
正则化的概念及原因
简单来说,正则化是一种为了减小测试误差的行为(有时候会增加训练误差)。我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好的表现。当你用比较复杂的模型比如神经网络,去拟合数据时,很容易出现过拟合现象,这会导致模型的泛化能力下降,这时候,我们就需要使用正则化,让训练出来的模型没有那么复杂。
(以上是正则化的概念)
我个人理解是:
机器在学习的过程中如果对一方面的处理(如图像识别)等方面做的非常的好,但是如果出现了新的情况却不能正确的响应,这就是过拟合现象——但是使用了正则化的方法,就可以在损失函数模型中引入复杂度指标,从而有效缓解过拟合现象。
|所以正则化是用来优化训练模型的一个方式
——来举个例子
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# coding:utf-8
# 0导入模块 , 生成模拟数据集合
BATCH_SIZE = 30
seed = 2
# 基于seed产生随机数
rdm = np.random.RandomState(seed)
# 随机数返回300行2列的矩阵, 表示300组坐标点 (x0,x1) 座位输入数据集
X = rdm.randn(300, 2)
# 从X这个矩阵中取出一行,判断如果两个坐标的平方和小于2,给Y赋值1, 其余赋值0
# 作为输入数据集的表情 (正确答案)
Y_ = [int(x0 * x0 + x1 * x1 < 2) for (x0, x1) in X]
Y_c = [['red' if y else 'blue'] for y in Y_]
# 对数据集合X和标签Y进行shape整理, 第一个元素为 -1表示,随第二个参数计算得到,第二个元素
# 表示多少列, 把X整理为n行2列, 把Y整理为n行1列
X = np.vstack(X).reshape(-1, 2)
Y_ = np.vstack(Y_).reshape(-1, 1)
print(X)
print(Y_)
print(Y_c)
# 用plt.scatter画出数据集X各行中第0列元素和第1列元素的点即各行的(x0, x1),用各行Y_c对应
# 的值表示颜色(c是color的缩写) X[:, 0]的意思是取出横坐标x的第一列元素x0,后面的就是取出第二列x1
plt.scatter(X[:, 0]