从keras看VGG16结构图
来源:互联网 发布:酷狗m1 知乎 编辑:程序博客网 时间:2024/05/22 08:18
vgg16训练
上面放了一个keras用vgg16训练测试的例子,我也试过用vgg16训练然后测试自己的例子,效果一般,这里我们来分析一下vgg16的网络结果
keras代码如下
def VGG_16(weights_path=None): model = Sequential() model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))#卷积输入层,指定了输入图像的大小 model.add(Convolution2D(64, 3, 3, activation='relu'))#64个3x3的卷积核,生成64*224*224的图像,激活函数为relu model.add(ZeroPadding2D((1,1)))#补0,保证图像卷积后图像大小不变,其实用padding = 'valid'参数就可以了 model.add(Convolution2D(64, 3, 3, activation='relu'))#再来一次卷积 生成64*224*224 model.add(MaxPooling2D((2,2), strides=(2,2)))#pooling操作,相当于变成64*112*112 model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(128, 3, 3, activation='relu')) model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(128, 3, 3, activation='relu')) model.add(MaxPooling2D((2,2), strides=(2,2)))#128*56*56 model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(256, 3, 3, activation='relu')) model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(256, 3, 3, activation='relu')) model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(256, 3, 3, activation='relu')) model.add(MaxPooling2D((2,2), strides=(2,2)))#256*28*28 model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(512, 3, 3, activation='relu')) model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(512, 3, 3, activation='relu')) model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(512, 3, 3, activation='relu')) model.add(MaxPooling2D((2,2), strides=(2,2)))#512*14*14 model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(512, 3, 3, activation='relu')) model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(512, 3, 3, activation='relu')) model.add(ZeroPadding2D((1,1))) model.add(Convolution2D(512, 3, 3, activation='relu')) model.add(MaxPooling2D((2,2), strides=(2,2))) #到这里已经变成了512*7*7 model.add(Flatten())#压平上述向量,变成一维25088 model.add(Dense(4096, activation='relu'))#全连接层有4096个神经核,参数个数就是4096*25088 model.add(Dropout(0.5))#0.5的概率抛弃一些连接 model.add(Dense(4096, activation='relu'))#再来一个全连接 model.add(Dropout(0.5)) model.add(Dense(1000, activation='softmax')) if weights_path: model.load_weights(weights_path) return model
下面是详细的参数个数
INPUT: [224x224x3] memory: 224*224*3=150K weights: 0CONV3-64: [224x224x64] memory: 224*224*64=3.2M weights: (3*3*3)*64 = 1,728CONV3-64: [224x224x64] memory: 224*224*64=3.2M weights: (3*3*64)*64 = 36,864POOL2: [112x112x64] memory: 112*112*64=800K weights: 0CONV3-128: [112x112x128] memory: 112*112*128=1.6M weights: (3*3*64)*128 = 73,728CONV3-128: [112x112x128] memory: 112*112*128=1.6M weights: (3*3*128)*128 = 147,456POOL2: [56x56x128] memory: 56*56*128=400K weights: 0CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*128)*256 = 294,912CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*256)*256 = 589,824CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*256)*256 = 589,824POOL2: [28x28x256] memory: 28*28*256=200K weights: 0CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*256)*512 = 1,179,648CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*512)*512 = 2,359,296CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*512)*512 = 2,359,296POOL2: [14x14x512] memory: 14*14*512=100K weights: 0CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296POOL2: [7x7x512] memory: 7*7*512=25K weights: 0FC: [1x1x4096] memory: 4096 weights: 7*7*512*4096 = 102,760,448FC: [1x1x4096] memory: 4096 weights: 4096*4096 = 16,777,216FC: [1x1x1000] memory: 1000 weights: 4096*1000 = 4,096,000TOTAL memory: 24M * 4 bytes ~= 93MB / image (only forward! ~*2 for bwd)TOTAL params: 138M parameters
0 0
- 从keras看VGG16结构图
- VGG16结构图
- vgg16 on keras for tensorflow
- 从Keras源码看模型实现
- keras实现VGG16 CIFAR10数据集
- VGG16
- Kaggle入侵物种检测VGG16示例——基于Keras
- keras迁移学习 使用vgg16进行手写数字识别
- caffe入门 从vgg16结构学习caffe
- Keras VGG16中ValueError: filter must not be larger than the input问题的解决
- 使用keras预训练VGG16模型参数分类图像并提取特征
- keras用vgg16预训练的参数训练自己数据集
- 深度学习、图像分类入门,从VGG16卷积神经网络开始
- 深度学习、图像分类入门,从VGG16卷积神经网络开始
- Keras实现LeNet-5网络,并可视化网络结构图
- [vgg16]vgg16相关文件
- keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)
- keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)
- tkprof用法
- Linux下修改PATH路径
- 微信小程序学习笔记
- Crontab用法
- 关于alter database open resetlog…
- 从keras看VGG16结构图
- 80行Python实现-HOG梯度特征提取
- ORA-01081: cannot start already-…
- 在sqlplus中看redo log大小,和文…
- linux中新增磁盘分区、格式化以及…
- 触发写Redo Log的条件
- 什么是RBA
- e.slice is not a function
- Oracle 10g中新的后台进程