在tensorflow+VGG运行的第一个程序

试着在tensorflow上运行第一个小程序,其中源代码都是有的,具体网址可以看这个https://www.cs.toronto.edu/~frossard/post/vgg16

原来是caffe的,现在移植到了tensorflow上,能够提供更好的接口

输出模型的类型,即我们需要分类的名称都在imagenet_classes.py

vgg16_weights.np是已经训练好的权重,,可以直接调用

vgg的网络结构都在vgg16.py里面,有空可以来分析分析~,作者在里面加入了预处理,直接可以计算平均像素值,不用像caffe还要自己生成,VGG的结构如下:
在tensorflow+VGG运行的第一个程序_第1张图片

VGG是卷积网络,由图片上可知,前面经历了卷积+激活(激活函数采用的是relu,relu函数在收敛性和时间上都较优于其他函数,后面讲对relu的函数性能做解释),然后进行池化层,再进行一次全连接+relu激活,最后激活函数采用的softmax,softmax可以对属于的类进行判断,生成属于每一类的概率值,概率最大的值就是最后的归属类,同时也可以看到属于其他类的概率值,这就是使用softmax的好处。

卷积我是这样理解的,类似于图像处理的模板,你统一输入一个模板,比如三阶的全1矩阵,你对图像中的每一个3阶矩阵进行卷积,最后得到的值都有可能不一样,有些得到的值一样的,可能像素值比较相同,相似度较高,明显不同图像的,得到的卷积值就不一样,所以卷积类似于提取特征。卷积就相当于是加权,但是卷积在处理的过程中卷积核进行了翻转,

池化的作用简单的说就是降维了。有很多种降维的方式,比如这里的max pooling,就是选择最大值进入下一层,比如2N*2N的原始图像,进行2*2的max pooling后就是N*N,瞬间减少了很多~减少了运算量。

下载好所有的文件运行python vgg16.py

由于tensorflow不支持py27,只能用py35,但是vgg里面是用的27的语法,所以会报这里的输出错误,只需要这样加个括号就行

然后再次执行,输出以下就是正确的

在tensorflow+VGG运行的第一个程序_第2张图片

输出的是每一层的模型大小,最后的输出是各个的概率。。。。

不过很不高兴的是。。。居然把我的神兽

在tensorflow+VGG运行的第一个程序_第3张图片分类成了这个。。。

在tensorflow+VGG运行的第一个程序_第4张图片

纸风车是什么鬼。。。什么鬼 。。。。哎,

对正常的还分类的比较对,哈哈

在tensorflow+VGG运行的第一个程序_第5张图片

雪橇犬,种类还准确的~心疼的我神兽,其实我的神兽也是狗,哈哈~

对于vgg网络的细节,后面再继续谈~玩通一个网络,再继续下一个~come on guys~

你可能感兴趣的:(机器学习)