深度学习神经网络 Tensorflow参数优化 之 正则化 第一部分,数据显示

在这里我们首先使用matplotlib里的函数把我们要进行分类的数据显示出来。

#coding:utf-8
#0导入模块,生成模拟数据集
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
BATCH_SIZE = 30
seed = 2
#基于seed产生随机数
rdm = np.random.RandomState(seed)
#随机数返回300行2列的矩阵,表示300组坐标点(x0,x1)作为输入数据集
X = rdm.randn(300,2)

生成300个数据点,每个数据点都有两个坐标构成,即横坐标和纵坐标。

然后把生成的随机数判断是不是在半径为根2的圆形内,然后标注颜色:

#从X这个300行2列的矩阵中取出一行,判断如果两个坐标的平方和小于2,给Y赋值1,其余赋值0
#作为输入数据集的标签(正确答案)
Y_ = [int(x0*x0+x1*x1<2) for (x0,x1) in X]
#遍历Y中的每个元素,1赋值'red'其余赋值'blue',这样可视化显示时人可以直观区分
Y_c = [['red' if y else 'blue'] for y in Y_]

把Y_变成1列的矩阵。输出这三个矩阵。

#对数据集X和标签Y进行shape整理,第一个元素为-1表示: 随第二个参数计算得到,第二个元素表示多少列,把X整理为n行2列,
#把Y整理为n行1列
X = np.vstack(X).reshape(-1,2)  #这个程序在这里其实没什么卵用,因为本身就是呈2列的
Y_ = np.vstack(Y_).reshape(-1,1) #Y变成1列
print(X)
print(Y_)
print(Y_c)

之后用scatter进行显示:

#用plt.scatter画出数据集X各行中第0列元素和第1列元素的点即各行的(x0,x1),用各行Y_c对应的值表示颜色(c是color的缩写).
plt.scatter(X[:,0],X[:,1],c=np.squeeze(Y_c))
plt.show()

显示如下:

我们先整理一下使用正则化的函数:

w是随机生成的一组变量,用于神经网络的计算。l2_regularizer表示使用参数平方和加到损失函数上。l1_regularizer表示用绝对值的和加到损失函数上。bias一般不需要进行正则化。

    w = tf.Variable(tf.random_normal([11,2]),dtype=tf.float32)
    #采用l2_regularizer,表示采用 w1^2+w2^2+w3^2+w4^2+w5^2+w6^2……这种平方和的形式
    tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))
b = tf.Variable(tf.constant(0.01,shape=[11]))

为什么是11个神经元的网络?不为什么,随便设的。我尝试了21个神经元的网络,在没有正则化的条件下效果更好,但是训练时间也更长了。在有正则化的时候效果反而不如11个神经元。

对比一下加了正则化的损失函数和不加郑泽华的损失函数:

#定义损失函数
loss_mse = tf.reduce_mean(tf.square(y-y_))
loss_total = loss_mse + tf.add_n(tf.get_collection('losses')) #add_n:把losses里面的值相加。

这个add_n的作用就是把正则化losses里面的所有参数(这里是w矩阵的各行各列)都加起来,然后再加到loss_mse,构成加了正则的损失函数。

我们下一节在训练时把这两个损失函数的降低化分开进行,然后对比两者的效果。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dezeming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值