tensorflow中的正则化函数在_Tensorflow第六课--基于L2正则化损失函数的5层神经网络...

本文介绍了在Tensorflow中如何使用L2正则化来解决过拟合问题,通过一个5层神经网络的实例展示了L2正则化的实现过程,包括权重初始化、损失函数计算等步骤。
摘要由CSDN通过智能技术生成

Tensorflow第六课--基于L2正则化损失函数的5层神经网络

发布时间:2018-05-13 22:18,

浏览次数:306

, 标签:

Tensorflow

这几天一直在看Tensorflow:实战google深度学习框架。感觉这本书真的写的很好,尤其是对于Tensorflow之前毫无所知的我,通过这本书也能学懂并且了解很多。今天我主要是学习了损失函数。添加损失函数的主要目的是解决在训练过程中的过拟合问题。正则化的思想就是在损失函数中加入刻画模型复杂程度的指标。假设用于刻画模型训练数据上表现的损失函数是J(a),那么在优化时不是直接进行优化J(a),而是优化J(a)+bR(w)。R(w)表示刻画模型的复杂程度,而b表示模型复杂损失在总损失中的比例。a表示一个神经网络中所有的参数,包括权重和偏置值。

L1正则化计算公式:

L2正则化计算公式:

无论是哪个正则化表示方式,其主要目的都是希望通过限制权重的大小,使得模型不能任意的你和训练数据中的随机噪音。Tensorflow中集成了正则化损失函数方法。

w = tf.Variable(tf.random_normal([2, 1], stddev = 1, seed = 1),

dtype=tf.float32) #其中stddev是方差,seed是种子。 y = tf.matmul(x, w) loss =

tf.reduce_mean(tf.square(y_ - y) + tf.contrib.layers.l2_regularizer(lamada)(w))

下面代码是利用完整的mnist数据集实现带有L2正则化函数的5层神经网络代码的成功实现,供你们参考。菜菜的我可是用了大半天才运行成功,总是报错,可能是我对tensorflow还不是很熟悉,但是每次练习都是一个成长的过程。

#-*- coding:utf-8 -*- import tensorflow as tf import input_data def

get_weight(shape, lamada,session): var =

tf.Variable(tf.random_normal(shape,stddev=1.0), dtype=tf.float32)

sess.run(tf.global_variables_initializer()) #print sess.run(var)

tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(lamada)(var))

return var #input_data:用于训练和测试的MNIST数据集的源码 mnist =

input_data.read_data_sets("MNIST_data/", one_hot=True) #download the data of

train and testm trainimage = mnist.train.images trainLabel = mnist.train.labels

trainimageSize = mnist.train.images.size trainLabelSize =

mnist.train.labels.size print trainimageSize,trainLabelSize testimage =

mnist.test.images testlabel = mnist.test.labels testimageSize =

mnist.test.images.size testlabelSize = mnist.test.labels.size print

testimageSize,testlabelSize x = tf.placeholder("float", [None, 784])

layer_dimension = [784, 10, 10, 10, 1] n_layers = len(layer_dimension) y_ =

tf.placeholder("float", [None, 1]) # 在机器学习的模型中,我们需要定义一个衡量模型好坏的方式,称为代价函数(Cost

Loss),这里使用了交叉熵去衡量 reduce_sum 累加 init = tf.initialize_all_variables() with

tf.Session() as sess: import numpy as nf sess.run(init) for i in range(1):

batch = mnist.train.next_batch(5) # sess.run(train_step, feed_dict={x:

batch[0],y_: batch[1]}) for i1 in range(5): print "i1:", i1 #cur_layer =

tf.constant([batch[0][i1]],dtype=tf.float32) cur_layer =

nf.array([batch[0][i1]], nf.float32) # print cur_layer.tolist() in_dimension =

layer_dimension[0] for i2 in range(1, n_layers): print "i2:",i2 out_dimension =

layer_dimension[i2] weight = get_weight([in_dimension, out_dimension],

0.001,sess) print "weight:",sess.run(weight) bias =

tf.Variable(tf.constant(0.1, shape=[out_dimension])) a =

tf.global_variables_initializer() sess.run(a) print "bias",sess.run(bias) print

"zhi:",tf.matmul(cur_layer, weight) cur_layer =

tf.nn.sigmoid(tf.matmul(cur_layer, weight) + bias) print sess.run(cur_layer)

in_dimension = layer_dimension[i2] mse_loss =

tf.reduce_mean(tf.square(batch[1][i1] - cur_layer))

tf.add_to_collection('losses', mse_loss) loss =

tf.add_n(tf.get_collection('losses')) print sess.run(mse_loss) print

sess.run(loss) tf.get_default_graph().clear_collection('losses')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值