正则化

AI - 过拟合 overfitting

泄露秘密 提交于 2019-12-01 22:44:02
Reference How to prevent the overfitting What is the overfitting Overfitting definition Diagram    The reason of the overfiting The data is limited Model is too complicated How to avoid the overfitting Argument data Increase the data during the training Argument the data For example: 在物体分类(object recognition)问题中,数据扩增已经成为一项特殊的有效的技术。物体在图像中的位置、姿态、尺度,整体图片敏感度等都不会影响分类结果,所以我们就可以通过图像平移、翻转、缩放、切割等手段将数据库成倍扩充。或者在语音识别(speech recognition)中,加入噪音也被看做是一种数据扩增方式。 Enhance the model 奥卡姆剃刀原则,鼓励 简单模型 。(过拟合的模型往往是复杂的) Dropout : 就是让神经网络在前向传播的时候,让某个神经元的激活值以一定的概率P,让他停止工作,也就是将这个神经元的激活值变为0。Dropout是非常有效的减少过拟合的方法

正则化

我与影子孤独终老i 提交于 2019-12-01 19:32:45
1、过拟合、欠拟合   过拟合是指模型在训练集上表现很好,在测试集上表现很差。欠拟合是指在训练集测试集上表现都很差。 上图左图是欠拟合,右图是过拟合的表现。 欠拟合的解决方法 解决方法: 1)添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。 2)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。 3)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。 4)可以增加迭代次数继续训练 5)尝试换用其他算法 6)增加模型的参数数量和复杂程度 过拟合的解决方法: 1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。 2)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。 3)采用正则化方法。正则化方法包括L0正则、L1正则和L2正则,而正则一般是在目标函数之后加上对于的范数。 4)针对神经网络,可以采用dropout方法,间接减少参数数量,也相当于进行了数据扩增。弱化了各个参数(特征)之间的单一联系,使起作用的特征有更多组合,使从而模型不过分依赖某个特征。 5)提前停止训练,也就是减少训练的迭代次数。从上面的误差率曲线图可以看出

tf.fully_connected

泪湿孤枕 提交于 2019-12-01 18:35:29
def fully_connected(   inputs,  # 输入   num_outputs,  #  本层输出的数量   activation_fn=tf.nn.relu,  # 本层的激活函数(None则默认为线性)   normalizer_fn=None,  # 正则化函数(用来替代偏置[biases],如果设置,则biases的两个选项dou)   normalizer_params=None,  # 正则化参数   weights_initializer=initializers.xavier_initializer(),  # 权重正则化   weights_regularizer=None,  # 权重可选正则化   biases_initializer=init_ops.zeros_initializer(),  #偏置初始化   biases_regularizer=None,  # 对偏置的正则化选择   reuse=None,  # 是否重用该层及其变量   variables_collections=None,   outputs_collections=None,   trainable=True,  # 如果我们是微调网络,有的时候需要冻结某一层的参数,则该项设置为False   scope=None):  # 可变范围 ps:写的不是很好

ex3 多分类和神经网络

倾然丶 夕夏残阳落幕 提交于 2019-12-01 16:10:42
介绍 在本练习中,您将实现一对多逻辑回归和神经识别手写数字的网络。在开始编程之前练习,我们强烈建议观看视频讲座并完成相关主题的复习问题。要开始练习,您需要下载起始代码并将其内容解压缩到要完成练习的目录。如果需要,请在开始本练习之前使用octave/matlab中的cd命令更改到此目录。您也可以在课程网站的“环境设置说明”中找到安装Octave/Matlab的说明。 本练习中包含的文件 ex3.m-octave/Matlab脚本,它引导您完成第1部分 ex3 nn.m-octave/matlab脚本,它引导您完成第2部分 ex3data1.mat-手写数字训练集 ex3weights.mat-神经网络练习的初始权重 submit.m-将解决方案发送到我们服务器的提交脚本 displaydata.m-帮助可视化数据集的函数 fmincg.m-函数最小化例程(类似于fminunc) sigmoid-S形函数 [*]lrcostfunction.m-逻辑回归成本函数 [*]one vs all.m-训练一对多分类器 [*]PredictOneVsall.m-使用一对多分类进行预测 [*]predict.m-神经网络预测功能 *表示需要完成的文件 在整个练习中,您将使用脚本ex3.m和ex3 nn.m。这些脚本为问题设置数据集,并调用要编写的函数。不需要修改这些脚本

编程作业ex3:多元分类与神经网络

假装没事ソ 提交于 2019-12-01 10:23:25
一、多元分类 1.1 数据集 本次实现的是手写数字的识别,数据集中有5000个样本,其中每个样本是20*20像素的一张图片,每个像素都用一个点数来表示,该点数表示这个位置的灰度,将20*20的像素网络展开为400维向量,而训练集中的5000*400的矩阵,每一行就代表了一个手写数字图像的灰度值。 训练集的第二部分是5000维向量y,包含训练集的标签,为了与没有0索引的MATLAB索引兼容,我们将数字零映射到10,因此,\ 0“数字被标记为\ 10”,而数字\ 1“至\ 9”则按照其自然顺序被标记为\ 1“至\ 9”。 1.2 可视化数据 可视化数据的代码已经完成,运行可以看到随机从数据集中挑选出来的100个数字 数据可视化函数: function [h, display_array] = displayData(X, example_width) %DISPLAYDATA Display 2D data in a nice grid % [h, display_array] = DISPLAYDATA(X, example_width) displays 2D data % stored in X in a nice grid. It returns the figure handle h and the % displayed array if requested. % Set

论文解读《Deep Plug-and-Play Super-Resolution for Arbitrary Blur Kernel》

China☆狼群 提交于 2019-12-01 07:45:09
Deep Plug-and-Play Super-Resolution for Arbitrary Blur Kernels: 一旦退化模型被定义,下一步就是使用公式表示能量函数(energy function,也可以称为目标函数).通过MAP(Maximum A Posterriori) probability, 能量函数能够被给出: $min_{x}\frac{1}{2\sigma^{2}}||\textbf{y} - (x\downarrow_{s})\otimes \textbf{k}||^{2} + \lambda \Phi(x)$ 其中$\frac{1}{2\sigma^{2}}||\textbf{y} - (x\downarrow_{s})\otimes \textbf{k}||^{2}$ 是数据保真项或似然项,它由退化函数决定,$\Phi(x)$是一个正则化项或先验项,其中$\lambda$是正则化系数; 对于判别学习方法(discriminative learning method) ,前向传播模型恰恰对应了一个能量函数,退化模型被训练成对的高分辨率和低分辨率的图像对隐式的定义。这解释了为什么现在DNN-based SISR方法训练在双三次退化对于真实图像表现很差。 为了求出上面的式子,我们首先采用变量分割技术引入一个辅助变量$\textbf{z}$

谐门武学:特征选择与Null Importance

被刻印的时光 ゝ 提交于 2019-12-01 05:07:48
特征工程是我们在做机器学习工作中的重要一环,根据我的工作经验,其实特征工程可以分为两个部分,一个是特征生产,另一个是特征选择,今天我们就针对特征选择来进行一下探讨,并给大家介绍一个我在比赛中学到的新的把戏。想看这个把戏的可以直接跳转到 使用Null importance 进行特征选择 特征选择的常见方法 特征选择是机器学习里面一个很老的话题了,常见的特征选择方法我觉得可以归为两大类,一类是基于贪心算法的,接近于暴力搜索。另一类是基于具体的机器学习模型。 基于贪心算法的特征选择 基于贪心算法的特征选择也有两种方式,一种是从零到全部,另一种是从全部到零,其实效果都差不多。前者被称为包裹式,后者被称为过滤式。简单来说包裹式就是: 随机选中一个特征,作为特征组F跑一遍模型,记分数$s_1$ 随机选中一个未被选中过的特征与F一起跑一遍模型,记分数$s_2$。 如果$s_2 > s_1+b$,将新的特征加入到F中,若否,不加入。这里的b为可调节的阈值,通常为零。 重复2~3步骤,直到所有特征都被选择过,输出最终的特征组F。 过滤式其实就是一模一样的思路,只不过从大到小而已: 选取全部特征,作为特征组F跑一遍模型,记分数$s_1$ 随机选中F中的一个特征屏蔽,跑一遍模型,记分数$s_2$。 如果$s_2 > s_1-b$,将该特征从F中去除,若否,不则不去除。 重复2~3步骤

keras调参经验

本小妞迷上赌 提交于 2019-11-30 22:41:44
调参技巧 层叠LSTM的层时 尽量保持两个隐藏层个数一致 收敛的快的多 两层LSTM比一层好很多 激活函数很重要 relu通常效果比较好 激活函数使用笔记 激活函数介绍 学习率太大(0.02),记得要是0.001数量级的学习率,否则直接不收敛,因此学习率不要太大,越小越好 正则化参数 L1正则化效果很差 L2正则化 一般是0.01左右 这个参数影响不太 而且容易拖累模型训练速度 优化器 from tensorflow.keras import optimizers 常用optimizers.Adam ,Nadam 学习率的设置在0.001数量级 来源: https://www.cnblogs.com/rise0111/p/11643547.html

9.正则化

爷,独闯天下 提交于 2019-11-30 17:01:27
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #载入数据集 mnist = input_data.read_data_sets("MNIST_data",one_hot=True) #每个批次的大小 batch_size = 64 #计算一共有多少个批次 n_batch = mnist.train.num_examples // batch_size #定义两个placeholder x = tf.placeholder(tf.float32,[None,784]) y = tf.placeholder(tf.float32,[None,10]) keep_prob=tf.placeholder(tf.float32) # 784-1000-500-10 #创建一个简单的神经网络 W1 = tf.Variable(tf.truncated_normal([784,1000],stddev=0.1)) b1 = tf.Variable(tf.zeros([1000])+0.1) L1 = tf.nn.tanh(tf.matmul(x,W1)+b1) L1_drop = tf.nn.dropout(L1,keep_prob) W2 = tf.Variable(tf