DL之小概念

1、FCN:简单来说就是没有全连接层的CNN,主要好处是支持不同大小的输入,支持全图end-to-end的训练,可以更好地学习context信息,非常适合于输出是图像的task比如segmentation、edge detection、optical flow等。经典论文是CVPR 2015的Fully convolutional networks for semantic segmentation。

我去,原来是这样的理解,原来真是这样的,以下是以前的总结:

FCN的原理

FCN将传统CNN中的全连接层转化成一个个的卷积层。如下图所示,在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。

DL之小概念_第1张图片

2、batchnorm(BN):batchnorm前传公式如下,反传由标准的链式法则给出(本文省略):
后面还加了一个“scale and shift”操作

在训练深层神经网络的过程中,由于输入层的参数在不停的变化,因此,导致了当前层的分布在不停的变化,这就导致了在训练的过程中,要求learning rate要设置的非常小。Batch Normalization的提出就是为了解决这个问题的. BN在每一个training mini-batch中对每一个feature进行normalize.通过这种方法,使得网络可以使用较大的learning rate,而且, BN具有一定的regularization作用.

参见:blog.csdn.net/mrhiuser/article/details/52575951

3、dropout是对全连接层,激活后的节点随机以一定概率设置为0的,可以参看tensorflow在mnist上的代码:

W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])              #reshape成向量
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)    #第一个全连接层

keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)                  #dropout层

W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_predict=tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2) + b_fc2)  #softmax层

dropout层有什么作用:训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种trikc供选择。实验结果:

没用Dropout时:

训练样本错误率(均方误差):0.032355
测试样本错误率:15.500%

使用Dropout时:

训练样本错误率(均方误差):0.075819
测试样本错误率:13.000%

可以看出使用Dropout后,虽然训练样本的错误率较高,但是训练样本的错误率降低了,说明Dropout的泛化能力不错,可以防止过拟合。

4、Global average Pooling:假如,最后的一层的数据是10个6*6的特征图,global average pooling是将每一张特征图计算所有像素点的均值,输出一个数据值,这样10 个特征图就会输出10个数据点,将这些数据点组成一个1*10的向量的话,就成为一个特征向量,就可以送入到softmax的分类中计算了

5、大部分CNN模型(比如R-CNN)的输入图像都是固定大小的(大小,长宽比),比如NIPS2012的大小为224X224,而不同大小的输入图像需要通过crop(裁切)或者warp(变形缩放)来生成一个固定大小的图像输入到网络中。这样子就存在问题,1.尺度的选择具有主观性,对于不同的目标,其最适合的尺寸大小可能不一样,2.对于不同的尺寸大小的图像和长宽比的图像,强制变换到固定的大小会损失信息;3.crop的图像可能不包含完整的图像,warp的图像可能导致几何形变。所以说固定输入到网络的图像的大小可能会影响到他们的识别特别是检测的准确率

DL之小概念_第2张图片

6、多层感知机:

单层感知器:即只有输入层和输出层
多层感知器:出了输入层和输出层,还有若干隐藏层

1)、BP神经网络,指的是用了“BP算法”进行训练的“多层感知器模型”。
2)、感知器(MLP,Multilayer Perceptron)是一种前馈人工神经网络模型,其将输入的多个数据集映射到单一的输出的数据集上,可以解决任何线性不可分问题。
3)、多层感知器就是指得结构上多层的感知器模型递接连成的前向型网络。BP就是指得反向传播算法

7、前馈神经网络

前馈神经网络(feedforward neural network),简称前馈网络,是人工神经网络的一种。在此种神经网络中,各神经元从输入层开始,接收前一级输入,并输入到下一级,直至输出层。整个网络中无反馈,可用一个有向无环图表示。

前馈神经网络是最早被提出的人工神经网络,也是最简单的人工神经网络类型。按照前馈神经网络的层数不同,可以将其划分为单层前馈神经网络和多层前馈神经网络。常见的前馈神经网络有感知机(Perceptrons)、BP(Back Propagation)网络、RBF(Radial Basis Function)网络等。

前馈型神经网络取连续或离散变量,一般不考虑输出与输入在时间上的滞后效应,只表达输出与输入的映射关系;

反馈型神经网络可以用离散变量也可以用连续取值,考虑输出与输入之间在时间上的延迟,需要用动态方程来描述系统的模型。

前馈型神经网络的学习主要采用误差修正法(如BP算法),计算过程一般比较慢,收敛速度也比较慢;

而反馈型神经网络主要采用Hebb学习规则,一般情况下计算的收敛速度很快。

反馈网络也有类似于前馈网络的应用,并且在联想记忆和优化计算方面的应用更显特点。

注意:BP只是一种网络学习算法,并不是一种网络模型

8、神经网络的fine-tuning

比如说,先设计出一个CNN结构。

然后用一个大的数据集A,训练该CNN网络,得到网络a。

可是在数据集B上,a网络预测效果并不理想(可能的原因是数据集A和B存在一些差异,比如数据来源不同导致的代表性差异)。如果直接用B的一部分训练的话,数据量太小,CNN不适用。

解决方法:

将数据集B分为train集和test,以a网络的参数为初始参数,以较小的学习率,以B的train集为训练数据,继续训练,得到网络b

这样,b在B的test集中一般可实现较好的预测精度。

9、训练eg

for every pretraining epoch
          for every mini-batch
                  参数的更新
          End
End

10、RoI Pooling Layer:事实上,RoI Pooling Layer是SPP-Layer的简化形式。SPP-Layer是空间金字塔Pooling层,包括不同的尺度;RoI Layer只包含一种尺度,如论文中所述7*7。这样对于RoI Layer的输入(r,c,h,w),RoI Layer首先产生7*7个r*c*(h/7)*(w/7)的Block(块),然后用Max-Pool方式求出每一个Block的最大值,这样RoI Layer的输出是r*c*7*7

你可能感兴趣的:(DL之小概念)