网站首页 > 技术文章 正文
一、什么是过拟合 (Overfitting)
Overfitting 也被称为过度学习,过度拟合。 它是机器学习中常见的问题。
最有效的方式是通过识别精度判断模型是否存在过拟合:比较模型对验证集和训练集的识别精度,如果验证集识别精度大幅低于训练集,则可以判断模型存在过拟合。
举个Classification(分类)的例子。
图中黑色曲线是正常模型,绿色曲线就是overfitting模型。尽管绿色曲线很精确的区分了所有的训练数据,但是并没有描述数据的整体特征,对新测试数据的适应性较差。
过拟合是什么时候发生的?
要获得这个信息,就需要在模型训练过程中动态的监测每次迭代(Epoch)后训练集和验证集的识别精度,一旦出现训练集识别率继续上升而验证集识别率不再提高,就说明过拟合发生了。
举个Regression (回归)的例子:
第三条曲线存在overfitting问题,尽管它经过了所有的训练点,但是不能很好的反应数据的趋势,预测能力严重不足。 TensorFlow提供了强大的dropout方法来解决overfitting问题。
二、dropout原理简述
tf.nn.dropout是TensorFlow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层。
dropout就是在不同的训练过程中随机扔掉一部分神经元。也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了。示意图如下:
三、tf.nn.dropout函数说明
tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None,name=None)
上面方法中常用的是前两个参数:
第一个参数x:指输入;
第二个参数keep_prob: 设置神经元被选中的概率,在初始化时keep_prob是一个占位符,keep_prob = tf.placeholder(tf.float32) 。tensorflow在run时设置keep_prob具体的值,例如keep_prob: 0.5。
当keep_prob=1的时候,相当于100%保留,也就是dropout没有起作用。
第五个参数name:指定该操作的名字。
使用举例:
1、dropout必须设置概率keep_prob,keep_prob也可以是一个占位符。
keep_prob = tf.placeholder(tf.float32)
2、train的时候才是dropout起作用的时候,验证和test的时候不应该让dropout起作用。
sess.run(train_step, feed_dict={xs: X_train, ys: y_train, keep_prob: 0.5})
如下所示,dropout一般只在全连接层而不是卷积层或者池化层使用。
四、具体演示代码
TensorFlow中 keep_prob 参数的官方解释:
With probability keep_prob, outputs the input element scaled up by 1 / keep_prob, otherwise outputs 0. The scaling is so that the expected sum is unchanged.
对于概率 keep_prob,输出的输入元素按比例增加1/keep_prob,否则输出0。
dropout函数的输出结果是: Tensor of the same shape of x
具体演示代码如下:
import tensorflow as tf
import numpy as np
dropout = tf.placeholder(tf.float32)
x = tf.Variable(tf.ones([10, 10]))
y = tf.nn.dropout(x, dropout)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
z = sess.run(y, feed_dict = {dropout: 0.5})
print(x.eval())
print(x.eval().sum())
print(z)
print(z.sum())
查看输出结果:
dropout 输出结果:
- 输入和输出的tensor的shape果然是一样的;
- 不是0的元素都变成了原来的 1/keep_prob倍;
猜你喜欢
- 2024-10-17 【Python深度学习系列】网格搜索神经网络超参数:丢弃率dropout
- 2024-10-17 中英趣译,用英文说对方“活该”才痛快!
- 2024-10-17 问题:ID:16145下列属于dropout特性的有()
- 2024-10-17 那些与out有关的英文表达! 与out有关的英语词组
- 2024-10-17 Dropout和标准化(Batch Normalization)
- 2024-10-17 麦克风将被静音,美网友都在猜:特朗普会如何应对?
- 2024-10-17 不只Dropout,刚刚,至少30项机器学习技术都变成了谷歌专利
- 2024-10-17 Dropout VS BN: 别在你的网络中使用Dropout
- 2024-10-17 让Dropout在图像超分领域重焕光彩
- 2024-10-17 神经网络中的损失函数正则化和 Dropout 并手写代码实现
你 发表评论:
欢迎- 11-19零基础学习!数据分析分类模型「支持向量机」
- 11-19机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 11-19我以前一直没有真正理解支持向量机,直到我画了一张图
- 11-19研一小姑娘分享机器学习之SVM支持向量机
- 11-19[机器学习] sklearn支持向量机
- 11-19支持向量机
- 11-19初探支持向量机:用大白话解释、原理详解、Python实现
- 11-19支持向量机的核函数
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)