keras搬砖系列-GoogLeNet
2018-01-09 23:42
357 查看
GoogLeNet小结
emmm,应该不算小结吧,充其量就是蜻蜓点水,所有的东西都等考试再弄吧。Andrew课对inception讲的很好。主要的创新在于他的Inception,这是一种网中网(Network In Network)的结构,即原来的结点也是一个网络。Inception一直在不断发展,目前已经V2、V3、V4了,感兴趣的同学可以查阅相关资料。Inception的结构如图9所示,其中1*1卷积主要用来降维,用了Inception之后整个网络结构的宽度和深度都可扩大,能够带来2-3倍的性能提升。
现如今,GPU设备已经很好了,所以大家通常做法是牺牲运行速度来得到最大性能。
keras代码:
#coding=utf-8 from keras.models import Model from keras.layers import Input,Dense,Dropout,BatchNormalization,Conv2D,MaxPooling2D,AveragePooling2D,concatenate from keras.layers.convolutional import Conv2D,MaxPooling2D,AveragePooling2D import numpy as np seed = 7 np.random.seed(seed) def Conv2d_BN(x, nb_filter,kernel_size, padding='same',strides=(1,1),name=None): if name is not None: bn_name = name + '_bn' conv_name = name + '_conv' else: bn_name = None conv_name = None x = Conv2D(nb_filter,kernel_size,padding=padding,strides=strides,activation='relu',name=conv_name)(x) x = BatchNormalization(axis=3,name=bn_name)(x) return x def Inception(x,nb_filter): branch1x1 = Conv2d_BN(x,nb_filter,(1,1), padding='same',strides=(1,1),name=None) branch3x3 = Conv2d_BN(x,nb_filter,(1,1), padding='same',strides=(1,1),name=None) branch3x3 = Conv2d_BN(branch3x3,nb_filter,(3,3), padding='same',strides=(1,1),name=None) branch5x5 = Conv2d_BN(x,nb_filter,(1,1), padding='same',strides=(1,1),name=None) branch5x5 = Conv2d_BN(branch5x5,nb_filter,(1,1), padding='same',strides=(1,1),name=None) branchpool = MaxPooling2D(pool_size=(3,3),strides=(1,1),padding='same')(x) branchpool = Conv2d_BN(branchpool,nb_filter,(1,1),padding='same',strides=(1,1),name=None) x = concatenate([branch1x1,branch3x3,branch5x5,branchpool],axis=3) return x inpt = Input(shape=(224,224,3)) #padding = 'same',填充为(步长-1)/2,还可以用ZeroPadding2D((3,3)) x = Conv2d_BN(inpt,64,(7,7),strides=(2,2),padding='same') x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x) x = Conv2d_BN(x,192,(3,3),strides=(1,1),padding='same') x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x) x = Inception(x,64)#256 x = Inception(x,120)#480 x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x) x = Inception(x,128)#512 x = Inception(x,128) x = Inception(x,128) x = Inception(x,132)#528 x = Inception(x,208)#832 x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x) x = Inception(x,208) x = Inception(x,256)#1024 x = AveragePooling2D(pool_size=(7,7),strides=(7,7),padding='same')(x) x = Dropout(0.4)(x) x = Dense(1000,activation='relu')(x) x = Dense(1000,activation='softmax')(x) model = Model(inpt,x,name='inception') model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy']) model.summary()
相关文章推荐
- keras搬砖系列-细读GoogleNet
- keras搬砖系列-正则项
- keras搬砖系列-inception module
- keras搬砖系列-VGG19
- keras搬砖系列-inception v2与v3
- keras搬砖系列-inception-resnet-v2实现
- keras搬砖系列-线性回归
- keras搬砖系列-inception流派
- GoogLeNet系列解读
- Inception系列1_Going deeper with convolutions GoogleNet inception
- GoogleNet网络详解与keras实现
- keras搬砖系列-重温序贯模型与函数模型
- 【深度学习:CNN】GoogLeNet系列解读(1)
- GoogleNet系列论文学习
- GoogLeNet系列解读InceptionV1/V2
- keras实现常用深度学习模型LeNet,AlexNet,ZFNet,VGGNet,GoogleNet,Resnet
- keras搬砖系列-迁移学习与微调
- keras搬砖系列-vgg16进行分类
- keras搬砖系列-模型可视化
- keras搬砖系列-keras多输入多输出模型