第九周

本节内容:

  1.  Inception的作用与结构全解析
  2. 安装GPU版本的tensorflow
  3. 在类似模型的基础上训练自己的一个图片分类的模型
  4. 从头到尾训练一个自己的模型

 

 

 

 Inception的作用与结构全解析:

http://blog.csdn.net/u010402786/article/details/52433324

 

为什么一个5*5的卷积核可以由两个3*3的卷积核替代?

我们假设图片是28*28的
我们使用5*5的卷积核对其卷积,步长为1,得到的结果是:(28-5)/1+1=24
然后我们使用2个卷积核为3*3的,这里的两个是指2层:
第一层3*3:
得到的结果是(28-3)/1+1=26
第二层3*3:
得到的结果是(26-3)/1+1=24
所以我们的最终结果和5*5的卷积核是一样的!!!
 
在当今深度网络的发展趋势中,提升网络的宽度和深度已经是常规操作,能够解决过拟合的同时带来了大量参数的问题,所以减少计算参数也是必要的。在很多网络中,都使用了3个3x3卷积核来代替7x7卷积核,使用了2个3x3卷积核来代替5x5卷积核,这样做的主要目的是:(1)保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果;(2)减少计算参数量
 
卷积神经网络中用1*1 卷积有什么作用或者好处?
1*1卷积过滤器 和正常的过滤器一样,唯一不同的是它的大小是1*1,没有考虑在前一层局部信息之间的关系。最早出现在 Network In Network的论文中 ,使用1*1卷积是想加深加宽网络结构 ,在Inception网络( Going Deeper with Convolutions )中用来降维

由于3*3卷积或者5*5卷积在几百个filter的卷积层上做卷积操作时相当耗时,所以1*1卷积在3*3卷积或者5*5卷积计算之前先降低维度。

那么,1*1卷积的主要作用有以下几点:

1、降维( dimension reductionality )。比如,一张500 * 500且厚度depth为100 的图片在20个filter上做1*1的卷积,那么结果的大小为500*500*20。

2、加入非线性。卷积层之后经过激励层,1*1的卷积在前一层的学习表示上添加了非线性激励( non-linear activation ),提升网络的表达能力;



batchnormal做了两件事。1)输入归一化x_norm=(x-u)/std,其中u和std是个累计计算的均值和方差。2)y=alpha*x_norm+bet...
https://blog.csdn.net/u014114990/article/details/52290064

BN本质上解决的是反向传播过程中的梯度问题。

详细点说,反向传播时经过该层的梯度是要乘以该层的参数的,即前向有:

h_l = w_l^Th_{l-1}

那么反向传播时便有:

\frac{\partial l}{\partial h_{l-1}} = \frac{\partial l}{\partial h_l} . \frac{\partial h_l}{\partial h_{l-1}} = \frac{\partial l}{\partial h_l} w_l

那么考虑从l层传到k层的情况,有:

\frac{\partial l}{\partial h_k} = \frac{\partial l}{\partial h_l} \prod _{i=k+1}^{l} w_i

上面这个 \prod_{i=k+1}^l w_i 便是问题所在。因为网络层很深,如果 w_i 大多小于1,那么传到这里的时候梯度会变得很小比如 0.9^{100} ;而如果 w_i 又大多大于1,那么传到这里的时候又会有梯度爆炸问题 比如1.1^{100} 。BN所做的就是解决这个梯度传播的问题,因为BN作用抹去了w的scale影响。

具体有:

h_l=BN(w_lh_{l-1}) = BN(\alpha w_lh_{l-1})

那么反向求导时便有了:

\frac{\partial h_l}{\partial h_{l-1}}=\frac{\partial BN w_lh_{l-1}}{\partial h_{l-1}} =\frac{\partial BN \alpha w_lh_{l-1}}{\partial h_{l-1}}

可以看到此时反向传播乘以的数不再和 w 的尺度相关,也就是说尽管我们在更新过程中改变了 w 的值,但是反向传播的梯度却不受影响。更进一步:

\frac{\partial h_l}{\partial w_l} = \frac{\partial BNw_lh_{l-1}}{\partial w_l} = \frac{1}{\alpha}.\frac{\partial BN \alpha w_l h_{l-1}}{\partial w_l}

即尺度较大的 w 将获得一个较小的梯度,在同等的学习速率下其获得的更新更少,这样使得整体 w 的更新更加稳健起来。

总结起来就是BN解决了反向传播过程中的梯度问题(梯度消失和爆炸),同时使得不同scale的 w 整体更新步调更一致。

我们看到的卷积核一般都是 1x1、3x3、5x5 大小,Inception Architecture中用的卷积核是 7x1、1x7
采用这种非对称卷积的目的何在?原因总结如下:
先进行 n×1 卷积再进行 1×n 卷积,与直接进行 n×n 卷积的结果是等价的。
非对称卷积能够降低运算量,这个很好理解吧,原来是 n×n 次乘法,改了以后,变成了 2×n 次乘法了,n越大,运算量减少的越多
3、虽然可以降低运算量,但这种方法不是哪儿都适用的,非对称卷积在图片大小介于12×12到20×20大小之间的时候,效果比较好
 

安装GPU版本的tensorflow:

https://developer.nvidia.com/cuda-downloads

 

主要讲的是windows版本的安装,Linux安装可寻找一些其他的流程看看

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 训练自己的一个图片分类的模型:(3中方法)

第一种:从无到有,从头开始,利用大量的训练集进行训练

第二种:找到一个合适的模型,在已有的模型上做改变(已有模型卷积池化层训练好的参数固定不变,对最后一层重新训练)

第三种:和第二种方法类似,对卷积池化层参数进行微调(学习率降得比较低),重新训练最后一层,针对自己的要求做改变

 

 

 以inception3为参考模型,建立自己的图片分类的模型:

现代物体识别模型有数以百万计的参数。从零开始训练需要大量的标记训练数据和强大的计算能力(数以百计的GPU小时或更多)。学习迁移是一种技术,非常快捷的使用一个在相关的任务里已训练过的模型中的一部分,在一个新的模型里重用,从新的类的现有的权重进行再训练。在本教程中,我们将重用在ImageNet上训练的强大的图像分类器的特征提取功能,并在顶层简单地训练一个新的分类层。更多信息参见Decaf文章。  虽然它不如一个完整的训练运行,但对于许多应用程序来说,这是出奇的有效,适用于中等数量的训练数据(数以千计,而不是数百万的标记图像),并可以在一个没有GPU的笔记本电脑上运行三十分钟。
 
原文:https://blog.csdn.net/daydayup_668819/article/details/79972886
 

进github把tensorflow下载下来---https://github.com/tensorflow/tensorflow(下载的时候要注意版本匹配问题-https://blog.csdn.net/xia_xia_mg/article/details/79947570)

 

 

 

数据集下载网址---http://www.robots.ox.ac.uk/~vgg/data/

 按照下面的目录新建文件夹

 

 

 

 

 

 

Windows批处理文件制作---https://jingyan.baidu.com/article/bea41d439050dcb4c51be6d3.html

 

 

 

 

 

retrain.py里面的函数有的需要更新一下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 整体步骤:

步骤一:数据准备,准备自己要分类的图片训练样本。可以去 http://www.robots.ox.ac.uk/~vgg/data/ 下载数据集,下载之后保存到指定目录(我的文件夹路径及结构如下):                 E:\TensorFlow\retrain\data\train\                                                   

-->>animal                                                   

-->>flower                                                   

-->>car

步骤二:下载 retrain.py 程序:去  https://github.com/tensorflow/hub 下载,找到 retrain.py 文件放到 E:\TensorFlow\retrain\ 下

步骤三:下载inception-v3 模型       http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz     

把压缩包存放到  E:\TensorFlow\inception_model  文件夹下,会自动寻找该压缩包。

步骤四:批处理命令文件 retrain.bat ,内容如下,把文件路径按自己的路径填写:

 

在  E:\TensorFlow\retrain\  下新建一个名叫 bottleneck 的文件夹,用于存放批处理之后各个图片的.txt文件。    也就是图片输入到 inception-v3 模型之后,经过倒数第二层的输出值(运行retrain.bat 文件之后产生)。

 

步骤五:预测 prediction.py 程序,用于调用新生成的模型预测新数据的结果。


原文:https://blog.csdn.net/weixin_38663832/article/details/80555341

 

 从头到尾训练一个自己的模型:

下载模型的安装包(https://github.com/tensorflow)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-02-20 15:13  大头swag  阅读(275)  评论(0)    收藏  举报