VGG16详细实现(笨办法)

一、 VGG16简介

  • VGG16网络是通过卷积和全连接的方式提取图片特征,进行识别一种网络结构。曾在某年取得分类第二,定位任务第一的佳绩。
  • 其结构包含: 13个卷积层 + 3个全连接层,所以被称为VGG16,如下图绿色的部分即是网络的结构组成:
    在这里插入图片描述
  • 卷积配置说明
    • input(224224RGB image) :输入图片大小为:224224,通道数为:3
    • conv3_XXX :卷积核为3(以下都是卷积核都是3,后面省略),卷积层的通道数为:XXX
  • VGG16特点(这里是借鉴[韩鼎の个人网站]
    • 卷积核全部使用3*3的卷积核 ,且所有卷积核 : strides=[1,1,1,1] ,padding=“SAME”。
    • 池化层全部使用: max的池化方式,2*2的池化核,通过全0填充,步长为2,strides=[1,2,2,1] ,padding=“SAME”。

二、代码实现

import h5py
import json
import tensorflow as tf
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 该文件包括最后三层的全连接层
# 这里的h5文件和下面的json文件下载来自于kaggle:链接为:https://www.kaggle.com/keras/vgg16
model_path = './kreas_vgg16_model_para/vgg16_weights_tf_dim_ordering_tf_kernels.h5'
# 该文件不包含最后三层的全连接层
# model_path = './kreas_vgg16_model_para/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5'


# 1.通过h5py读取model的各层参数,笨办法就主要笨在这个地方,但是很好理解。
with h5py.File(model_path,'r') as f:
    # # 得到h5文件的第一层目录名字
    # layer1 = [ i for i in f]
    # print(layer1)
    # # 得到h5文件的第二层目录名字
    # layer2 = {'layer2_'+str(i):[j for j in f[layer1[i]]] for i in range(len(layer1))}
    # print(layer2)

    # 13层convolution 5个block  卷积核kernel为3*3*3
    # block1
    block1_conv1_W_1 = f['/block1_conv1/block1_conv1_W_1:0'][:]
    # print(block1_conv1_W_1.shape)
    block1_conv2_W_1 = f['/block1_conv2/block1_conv2_W_1:0'][:]
    # print(block1_conv2_W_1.shape)
    block1_conv1_b_1 = f['/block1_conv1/block1_conv1_b_1:0'][:]
    block1_conv2_b_1 = f['/block1_conv2/block1_conv2_b_1:0'][:]

    # block2
    block2_conv1_W_1 = f['/block2_conv1/block2_conv1_W_1:0'][:]
    # print(block2_conv1_W_1.shape)
    block2_conv2_W_1 = f['/block2_conv2/block2_conv2_W_1:0'][:]
    # print(block2_conv2_W_1.shape)
    block2_conv1_b_1 = f['/block2_conv1/block2_conv1_b_1:0'][:]
    block2_conv2_b_1 = f['/block2_conv2/block2_conv2_b_1:0'][:]

    # block3
    block3_conv1_W_1 = f['/block3_conv1/block3_conv1_W_1:0'][:]
    # print(block3_conv1_W_1.shape)
    block3_conv2_W_1 = f['/block3_conv2/block3_conv2_W_1:0'][:]
    # print(block3_conv2_W_1.shape)
    block3_conv3_W_1 = f['/block3_conv3/block3_conv3_W_1:0'][:]
    # print(block3_conv3_W_1.shape)
    block3_conv1_b_1 = f['/block3_conv1/block3_conv1_b_1:0'][:]
    block3_conv2_b_1 = f['/block3_conv2/block3_conv2_b_1:0'][:]
    block3_conv3_b_1 = f['/block3_conv3/block3_conv3_b_1:0'][:]

    # block4
    block4_conv1_W_1 = f['/block4_conv1/block4_conv1_W_1:0']
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值