GoogleNet inception-v4概述及python实现方法
来源:互联网 发布:深圳网络安全工程师 编辑:程序博客网 时间:2024/06/07 12:27
在复现论文的时候发现需要用谷歌的inception-v4先提取出物体的特征,网上找了一圈也没有现成的,所以就打算自己实现一下。这里实现的是论文中的pure inception blocks。
inception-v4主体就是论文中的figure 9,然后figure 3,4,5,6,7,8分别是对主体中每层细节的展开。从图中可以看到,每层中用到的操作都是卷积,池化和filter_concat,所以在实现上还是比较好实现的。
选择keras是为了快速复现这一论文,keras更加抽象,相较于tensorflow是一个更高层的神经网络API。这里我们用的keras后端是tensorflow-gpu。下面就开始具体的实现步骤。
首先定义卷积函数:
def conv(input, n_filter, row, col, strides=(1,1), padding='same', bias=False): x = Convolution2D(n_filter, [row,col],strides=strides, padding=padding, use_bias=bias)(input) x = BatchNormalization(axis=channel_axis)(x) x = Activation('relu')(x)
这个函数实现了figure3-8中每一小块的卷积功能,用的是keras里函数式模型。
Convolution2D中n_filter指卷积核的个数,[row,col]是卷积核的大小,strides是滑动步长,padding为same时则输出矩阵尺寸与输入相同,为valid时不同,use_bias是是否选择偏置项,这里选择否。偏置就是w*x+b里的b。
BatchNormalization也就是BN层,关于BN层的作用有如下4个:1.加速收敛;2.控制过拟合,可以少用或不用Dropout和正则;3.降低网络对初始化权重不敏感;4.允许使用较大的学习率。具体的参考文献是Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift。这里按channel_axis=-1。
Activation中使用relu激活,激活函数就不做过多的解释了。
现在已经完成了图中的小格,剩下的任务就是将小格拼起来,这里只列出figure9中stem的代码:
def stem(input): x = conv(input, 32, 3, 3, strides=(2,2), padding='valid') x = conv(x, 32, 3, 3, padding='valid') x = conv(x, 64, 3, 3,) x1 = MaxPooling2D((3,3), strides=(2,2), padding='valid')(x) x2 = conv(x, 96, 3, 3, strides=(2,2), padding='valid') x = merge([x1,x2], mode='concat', concat_axis=channel_axis) return x
这里需要注意的是merge时使用图中concat方法,这是将几个同shape的张量合成为向量。这块的函数和官方文档的不太一样,应该是版本的问题。具体的mode有
“sum”,”mul”,”concat”,”ave”,”cos”,”dot”,可以对照文档上对应的函数使用。
下一篇文章将使用inception-v4进行训练。
- GoogleNet inception-v4概述及python实现方法
- GoogLeNet 之 Inception(V1-V4)
- googleNet Inception v1 - v4 papers 发展历程
- GoogleNet Inception v1 - v4 papers 发展历程
- GoogleNet Inception
- 【转】CNN卷积神经网络_ GoogLeNet 之 Inception(V1-V4)
- GoogLenet Inception module的caffe实现
- GoogLeNet:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning论文笔记
- Inception-v4, Inception-ResNet
- Deep Learning-TensorFlow (13) CNN卷积神经网络_ GoogLeNet 之 Inception(V1-V4)
- Deep Learning-TensorFlow (13) CNN卷积神经网络_ GoogLeNet 之 Inception(V1-V4)
- GoogleNet之Inception in CNN
- 从GoogLeNet至Inception v3
- inception V4 与resnet
- 论文笔记:Inception-V4, Inception-ResNet
- Inception系列1_Going deeper with convolutions GoogleNet inception
- googLeNet--Inception四部曲二Batch Normalization
- GoogLeNet inception v2 到底有多少参数?
- 【翻译】SSD: Single Shot MultiBoxDetector
- 谷歌开源图像分类工具TF-Slim,定义TensorFlow复杂模型
- shell 多个程序 log 的备份(一)
- Qt 5.9安装及配置环境变量的注意事项
- JS中的作用域以及全局变量的问题
- GoogleNet inception-v4概述及python实现方法
- CSS块级元素和行内元素
- node.js升级造成gulp无法使用的解决问题
- hadoop DirectoryScanner
- 基于Visual C++之实现Windows用户管理
- Android组件化初识
- TabLayout让文字平铺以及改变字体大小
- android事件传递全解析
- easyui的validate校验必填项,空格问题。