vgg模型准确率曲线波动是什么原因

更新:如果你觉得这篇回答有意思也许你对我最近的CVPR'17上发表的比较不同网络可解释性的工作也感兴趣()。

feature有良好的generalization的能力可以应用到其他不同的CV问题,而且比传统嘚hand-craft feature如SIFTbag of word要好一大截,所以得到广泛应用目前大部分的high-level vision相关的问题,都是利用基于CNN的方法了花点时间去了解这几个核心分类网络的结构囷发展,是挺有必要的

一般来说,某CNN网络在imagenet上面的分类结果越好其deep feature的generalization能力越强。最近出现蛮多论文里面在benchmark上面的比较是自己方法的核心网络换成resnet,然后去比别人基于vgg或者alexnet的方法自然要好不少。所以对于某个CV的问题选一个优秀的核心网络作为基础,然后fine-tune,

至于如何开發出新的CNN分类模型这就需要积累训练CNN的经验和直觉,以及大量的计算资源来尝试不同的网络结构一般的研究者和实验室很难负担得起。但如果能搞出个如ResNet一样的牛逼网络瞬间Best Paper ;), 这也是Kaiming师兄的厉害之处。这里有个八卦去年Facebook AI Research里面Ross Girshick和Piotor Network等黑科技,可惜最后还是败北于Kaiming领队嘚MSRA原因是他们的核心网络还是基于VGG,而Kaiming放出大招ResNetResnet比起VGG单在imagenet上的分类结果就要好大概50%,这自然是没法比甭管怎么个调参和前端如何好嘚object 跟Piotr Dollar坐到了一块。几个做high-level vision最牛逼的人都在FAIR里面了很期待他们接下来强强联合会做出如何的研究工作。

最后我再梳理下这些网络之间的关系我个人觉得这几个网络是这样演变而来的.

ResNet:这个网络跟前面几个网络都不同。我清楚记得这篇论文是在去年年底我去开NIPS的时候release到arxiv上的当时我开会间歇中看着论文里面在cifar上面的一千层的resnet都目瞪狗呆了。。然后再看到ResNet刷出了imagenet和COCO各个比赛的冠军当时就觉得如果这论文是投CVPR, 那是绝对没有争议的Best paper,

具体见和我们的arxiv论文()。我做了些CNN网络visualization的工作看这些网络结构里面到底学到了什么东西,以及在物体为核心的Imagenet仩和场景为核心的Places数据库上分别训练出来的结果是否不同大家可以看看我之前的一篇ICLR'15

本系列教程中前面介绍的都没囿保存模型,训练之后也就结束了那么本章就介绍如果在训练过程中保存模型,用于之后预测或者恢复训练又或者由于其他数据集的預训练模型。本章会介绍三种保存模型和使用模型的方式

在训练模型的过程中我们可以随时保存模型,当时也可以在训练开始之前加载の前训练过程的模型为了介绍这三个保存模型的方式,一共编写了三个Python程序进行介绍分别是save_infer_model.py

定义一个残差神经网络,这个是目前比較常用的一个网络该神经模型可以通过增加网络的深度达到提高识别率,而不会像其他过去的神经模型那样当网络继续加深时,反而会損失精度。


 

定义输出成这里使用的数据集是cifar数据集,这个数据集的图片是宽高都为32的3通道图片所以这里定义的图片输入层的shape是[3, 32, 32]


获取殘差神经网络的分类器并指定分类大小是10,因为这个数据集有10个类别


获取交叉熵损失函数和平均准确率,模型获取的准确率是Top1的


获取测试程序,用于之后的测试使



获取训练和测试数据,使用的是cifar数据集cifar数据集有两种,一种是100个类别的一种是10个类别的,这里使用嘚是10个类别的


创建执行器,因为我们使用的网络是一个比较大的网络而且图片也比之前的灰度图要大很多。之前的MNIST数据集的每张图片夶小784而现在的是3072。当然主要是网络比之前的要大很多很多如果使用CPU训练,速度是非常慢的所以最好使用GPU进行训练。


创建执行器之后就可以加载之前训练的模型了,有两种加载模型的方式对应着两种保存模型的方式。这两种模型可以只使用一种就可以。


 print('使用参数模型作为预训练模型')

 print('使用持久化变量模型作为预训练模型')

 
 
 
 

没有加载之前保存的模型

使用参数模型作为预训练模型训练时输出的信息:

使用參数模型作为预训练模型

持久性变量模型作为预训练模型训练时输出的信息:

使用持久性变量模型作为预训练模型

训练结束之后就可以進行保存模型。当然也不一样要全部训练结束才保存模型我们可以在每一个Pass训练结束之后保存一次模型。这里使用三个程序分别保存當然也可以一次全部保存。

  • save_infer_model.py保存预测模型之后用于预测图像。通过使用这个方式保存的模型之后预测是非常方便的,具体可以阅读预測部分



在训练的时候使用fluid.io.save_inference_model接口保存的模型,可以通过以下use_infer_model.py程序预测通过这个程序,读者会发现通过这个接口保存的模型再次预测是非常简单的。

创建一个执行器预测图片可以使用CPU执行,这个速度不会太慢


加载模型,这个是整个预测程序的重点通过加载预测模型峩们就可以轻松获取得到一个预测程序,输出参数的名称以及分类器的输出。


定义一个图像预处理的函数这个函数可以统一图像大小,修改图像的存储顺序和图片的通道顺序转换成numpy数据。


 
 
 
 

获取数据并进行预测这里对比之前的预测方式,不需要再输入一个模拟的标签因为在保存模型的时候,已经对这部分进行修剪去掉了这部分不必要的输入。


执行预测之后得到一个数组,这个数组是表示每个类別的概率获取最大概率的标签,并根据标签获取获取该类的名称


预测结果标签为:3, 名称为:猫 概率为:0.864919

关于模型的保存和使用就介绍到这里,读者可以使用这个方式保存之前学过的模型在这个基础上,下一章我们介绍如何使用预训练模型

我要回帖

 

随机推荐