TensorFlow——dropout和正则化的相关方法
1.dropout
dropout是一种常用的手段,用来防止过拟合的,dropout的意思是在训练过程中每次都随机选择一部分节点不要去学习,减少神经元的数量来降低模型的复杂度,同时增加模型的泛化能力。虽然会使得学习速度降低,因而需要合理的设置保留的节点数量。
在TensorFlow中dropout的函数原型如下:def dropout(x, keep_prob, noise_shape=None, seed=None, name=None),各个参数的意义如下:
x:输入的模型节点
keep_prob:保持节点的比率,如果为1,则表示全部节点参与学习,如果为0.8,则表示丢弃20%的节点。
noise_shape:设置指定的x中参与dropout计算的维度,如果为None,则表示所有的维度都参与计算,也可以设定某个维度,例如:x的形状为[ n, len, w, ch],使用noise_shape为[n, 1, 1, ch],这表明会对x中的第二维度和第三维度进行dropout。
dropout改变了神经网络的网络结构,它仅仅是属于训练时的方法,所以在进行测试时要将dropout的keep_porb的值为1。
x = tf.placeholder(tf.float32, [None, 784])
y = tf.placeholder(tf.float32, [None, 10]) keep_prob = tf.placeholder(tf.float32) w1 = tf.Variable(tf.random_normal([784, 30]))
b1 = tf.Variable(tf.zeros([30]))
w_h_1 = tf.add(tf.matmul(x, w1), b1)
w_h_r_1 = tf.nn.sigmoid(w_h_1)
w_h_r_drop_1 = tf.nn.dropout(w_h_r_1, keep_prob=keep_prob) w2 = tf.Variable(tf.random_normal([30, 30]))
b2 = tf.Variable(tf.zeros([30]))
w_h_2 = tf.add(tf.matmul(w_h_r_drop_1, w2), b2)
w_h_r_2 = tf.nn.sigmoid(w_h_2)
w_h_r_drop_2 = tf.nn.dropout(w_h_r_2, keep_prob=keep_prob) w3 = tf.Variable(tf.random_normal([30, 30]))
b3 = tf.Variable(tf.zeros([30]))
w_h_3 = tf.add(tf.matmul(w_h_r_drop_2, w3), b3)
w_h_r_3 = tf.nn.sigmoid(w_h_3)
w_h_r_drop_3 = tf.nn.dropout(w_h_r_3, keep_prob=keep_prob) w4 = tf.Variable(tf.random_normal([30, 10]))
b4 = tf.Variable(tf.zeros([10]))
w_h_4 = tf.add(tf.matmul(w_h_r_drop_3, w4), b4)
w_h_r_4 = tf.nn.softmax(w_h_4)
pred = tf.nn.dropout(w_h_r_4, keep_prob=keep_prob) cost = tf.reduce_mean(tf.reduce_sum(tf.square(pred - y)))
feed_dict={x:batch_xs, y:batch_ys, keep_prob:0.7}
2.正则化
正则化是在神经网络计算损失值的过程中,在损失后面再加上一项。这样损失值所代表的输出与标准结果间的误差就会受到干扰,导致学习参数w 和 b无法按照目标方向来调整,实现模型无法与样本完全拟合,从而达到防止过拟合的效果。正则化主要有L1和L2正则,如下:
L1:所有学习参数w的绝对值的和
L2:所有学习参数w的平方和然后求平方根。
如此,损失函数表达式如下:

在TensorFlow中,已经封装好了相应的函数,L2的正则化函数为:tf.nn.l2_loss(t, name=None),L1的正则化函数需要自己组合,tf.reduce_sum(tf.abs(w))
L2 = tf.nn.l2_loss(w1) + tf.nn.l2_loss(w2) + tf.nn.l2_loss(w3) +tf.nn.l2_loss(w4) cost = tf.reduce_mean(tf.reduce_sum(tf.square(pred - y))) + L2*0.01
在使用正则化的时候,我们为正则化项设置一个权重的系数,注意这个权重系数的值,可以通过不断尝试来确定权重系数的值。
TensorFlow——dropout和正则化的相关方法的更多相关文章
- (四) Keras Dropout和正则化的使用
视频学习来源 https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553 笔记 使用drop ...
- tensorflow dropout函数应用
1.dropout dropout 是指在深度学习网络的训练过程中,按照一定的概率将一部分神经网络单元暂时从网络中丢弃,相当于从原始的网络中找到一个更瘦的网络,这篇博客中讲的非常详细 2.tens ...
- TensorFlow(三)---------正则化
TensorFlow正则化经常被用于Deep-Learn中,泛化数据模型,解决过拟合问题.再深度学习网络只有在有足够大的数据集时才能产生惊人的学习效果.当数据量不够时,过拟合的问题就会经常发生.然而, ...
- tensorflow dropout
我们都知道dropout对于防止过拟合效果不错dropout一般用在全连接的部分,卷积部分不会用到dropout,输出曾也不会使用dropout,适用范围[输入,输出)1.tf.nn.dropout( ...
- TensorFlow之DNN(三):神经网络的正则化方法(Dropout、L2正则化、早停和数据增强)
这一篇博客整理用TensorFlow实现神经网络正则化的内容. 深层神经网络往往具有数十万乃至数百万的参数,可以进行非常复杂的特征变换,具有强大的学习能力,因此容易在训练集上过拟合.缓解神经网络的过拟 ...
- TensorFlow构建卷积神经网络/模型保存与加载/正则化
TensorFlow 官方文档:https://www.tensorflow.org/api_guides/python/math_ops # Arithmetic Operators import ...
- TensorFlow笔记-08-过拟合,正则化,matplotlib 区分红蓝点
TensorFlow笔记-08-过拟合,正则化,matplotlib 区分红蓝点 首先提醒一下,第7讲的最后滑动平均的代码已经更新了,代码要比理论重要 今天是过拟合,和正则化,本篇后面可能或更有兴趣, ...
- 模型正则化,dropout
正则化 在模型中加入正则项,防止训练过拟合,使测试集效果提升 Dropout 每次在网络中正向传播时,在每一层随机将一些神经元置零(相当于激活函数置零),一般在全连接层使用,在卷积层一般随机将整个通道 ...
- TensorFlow实战——个性化推荐
原创文章,转载请注明出处: http://blog.csdn.net/chengcheng1394/article/details/78820529 请安装TensorFlow1.0,Python3. ...
随机推荐
- C#的选择语句练习(二)
1.输入a,b,c三个数,计算一元二次方程ax²+bx+c的根:若a=0,则不是一元二次方程:△=b²-4ac,根的计算公式为-b±√b²-4ac/2a:若△=b²-4ac>0,则方程有两个不一 ...
- git的安装与命令行基本的使用
1.https://git-scm.com/ 点击这个网址进入git的官方网站 2,.进去里面会有提示,64位于32位的,根据自己的电脑安装 3 下载完了过后就直接安装,一般会安装在c盘里面 ,进入安 ...
- Editplus配置java编译运行环境
1.进入配置环境界面 首先,从菜单"工具(Tools)"->"配置用户工具..."进入用户工具设置. 在类别里展开"工具"树形菜单-& ...
- Python--day64--Bootstrap样式的使用
Bootstrap样式网址:https://v3.bootcss.com
- H5 存储数据sessionStorage
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- visualStudio 无法登陆
如果遇到 visualStudio 无法登陆,可以看下我的方法,可能有用 尝试关闭代理 打开设置.网络.代理,关了它,试试 如果遇到下面的问题: 我们无法刷新此账户的凭据 No home tenant ...
- P1004 奶牛与牧场
题目描述 有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供 \(a\) 头牛吃 \(b\) 天,或可供 \(c\) 头牛吃 \(d\) 天,那么,这片牧场每天新生的草量最多可供几头牛吃1天? 输 ...
- linux 选择 ioctl 命令
在为 ioctl 编写代码之前, 你需要选择对应命令的数字. 许多程序员的第一个本能的反 应是选择一组小数从0或1 开始, 并且从此开始向上. 但是, 有充分的理由不这样做. ioctl 命令数字应当 ...
- 关于CPython中set集合的无序研究
set集合本身是无序的,但是无意间发现set集合中都是数字时set貌似有序了. 无论声明这个set时数字如何摆放,输出结果总是以一种固定的顺序!同样我将dict字典的key值设为int类型,这时候字典 ...
- 30分钟全方位了解阿里云Elasticsearch(附公开课完整视频)
摘要: 阿里云Elasticsearch提供100%兼容开源Elasticsearch的功能,以及Security.Machine Learning.Graph.APM等商业功能,致力于数据分析.数据 ...