imagenet-vgg-verydeep-19.mat格式詳解


.mat是matlab生成的文件.用matlab打開文件imagenet-vgg-verydeep-19.mat可以幫助理解其結構.matlab代碼如下:

a = open('D:\imagenet-vgg-verydeep-19.mat');

a的結構如下圖所示.

對於讀取imagenet-vgg-verydeep-19.mat,與matlab代碼相應對的python代碼為

matpath = r"D:\imagenet-vgg-verydeep-19.mat"
a = scipy.io.loadmat(matpath)

在python代碼中a是一個dict類型,長度為3,對應圖1的layers,classes,normalization. data["layers"]可以取到matlab中layers對應的數據結構,data["classes"]可以取到matlab中classes對應的數據結構,data["normalization"]可以取到matlab中normalization對應的數據結構.下面分開討論.

layers

data['layers']是一個1*43的ndarray.data['layers'][0]就是一個長度為43的ndarray,對應vgg19的43個各層操作的結果.具體為對應關系為

        0  對應 conv1_1 (3, 3, 3, 64)
        1  對應 relu
        2  對應 conv1_2 (3, 3, 64, 64)
        3  對應 relu
        4  對應 maxpool
        5  對應 conv2_1 (3, 3, 64, 128)
        6  對應 relu
        7  對應 conv2_2 (3, 3, 128, 128)
        8  對應 relu
        9  對應 maxpool
        10 對應 conv3_1 (3, 3, 128, 256)
        11 對應 relu
        12 對應 conv3_2 (3, 3, 256, 256)
        13 對應 relu
        14 對應 conv3_3 (3, 3, 256, 256)
        15 對應 relu
        16 對應 conv3_4 (3, 3, 256, 256)
        17 對應 relu
        18 對應 maxpool
        19 對應 conv4_1 (3, 3, 256, 512)
        20 對應 relu
        21 對應 conv4_2 (3, 3, 512, 512)
        22 對應 relu
        23 對應 conv4_3 (3, 3, 512, 512)
        24 對應 relu
        25 對應 conv4_4 (3, 3, 512, 512)
        26 對應 relu
        27 對應 maxpool
        28 對應 conv5_1 (3, 3, 512, 512)
        29 對應 relu
        30 對應 conv5_2 (3, 3, 512, 512)
        31 對應 relu
        32 對應 conv5_3 (3, 3, 512, 512)
        33 對應 relu
        34 對應 conv5_4 (3, 3, 512, 512)
        35 對應 relu
        36 對應 maxpool
        37 對應 fullyconnected (7, 7, 512, 4096)
        38 對應 relu
        39 對應 fullyconnected (1, 1, 4096, 4096)
        40 對應 relu
        41 對應 fullyconnected (1, 1, 4096, 1000)
        42 對應 softmax

看下面的代碼

vgg_layers = data['layers'][0]
layer0 = vgg_layers[0]

layer0就對應conv1_1.注意這里是對應,要取到w和b的值要用下面的方法.

import scipy.io
matpath = r"D:\imagenet-vgg-verydeep-19.mat"
data = scipy.io.loadmat(matpath)
vgg_layers = data['layers'][0]  # type 1*43
# vgg_layers[0]對應conv1_1,vgg_layers[1]對應relu,vgg_layers[2]對應conv1_2...
w = vgg_layers[0][0][0][0][0][0]
b = vgg_layers[0][0][0][0][0][1]
print(w.shape)  # 輸出是(3, 3, 3, 64)
print(b.shape)  # (1, 64)
## 顯示第0個filter的3個通道
print(w[:, :, 0, 0])
print(w[:, :, 1, 0])
print(w[:, :, 2, 0])

模仿上面的例子可以找到vgg任意一個中間層各參數的值.

classes

normalization

參考資料

  1. TensorFlow Implementation of A Neural Algorithm of Artistic Style
  2. neural-style
  3. MatConvNet Convolutional Neural Networks for MATLAB


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM