imagenet-vgg-verydeep-19.mat参数解析
下载链接 http://www.vlfeat.org/matconvnet/models/beta16/imagenet-vgg-verydeep-19.mat
作者:得克特
来源:CSDN
原文:https://blog.csdn.net/weixin_40548136/article/details/88395056
一、VGG-19的结构
先上一下VGG-Net的结构图,来自论文《VERY DEEP CONVOLUTIONAL NETWORK SFORLARGE-SCALE IMAGE RECOGNITION》,发表于ICLR 2015上,比较起ALEXNET,VGG对图片有更精确的估值以及更省空间。注意19只包含了卷积层,没有算池化、Relu和最后的FC-1000,而在下载的模型参数中这些层都有包含,导致开始没有想明白。
import scipy.io
import scipy.misc
path = "/Users/enjlife/deep-learning-model/imagenet-vgg-verydeep-19.mat"
vgg = scipy.io.loadmat(path)
vgg.keys()
查看vgg字典,发现共有6个key
dict_keys(['__header__', '__version__', '__globals__', 'layers', 'classes', 'normalization'])
这里我们关注layers key,里面是我们需要的参数
vgg['layers'].shape获取shape结果为(1, 43),正好与我们的模型层数相符合。
下面取第一层layer查看vgg['layers'][0][0].shape,结果显示是一个二维(1, 1)数组。
查看其元素内容发现vgg['layers'][0][0]包含参数部分和说明部分dtype=[('weights', 'O'), ('pad', 'O'), ('type', 'O'), ('name', 'O'), ('stride', 'O')],上述为说明部分,参数太长这里没有贴。
vgg['layers'][0][0][0][0][0]最后一个零选取的是W和b的参数。
vgg['layers'][0][0][0][0][1]最后一个1选组的是pad填充的参数。依次可以取出layer的类型、名字、步长。
这里还要注意,取出的W和b的矩阵依然是一个二维矩阵vgg['layers'][0][0][0][0][0].shape,结果为(1,2),然后我们通过vgg['layers'][0][0][0][0][0][0][0]和vgg['layers'][0][0][0][0][0][0][1]取到W和b的值。
引用一张图片来总结下结果