• 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
  • 相关阅读:
    解决phpcms图片太大撑破表格图片自适应图片按比例缩小
    CSS代码使纯英文数字自动换行
    CSS网页布局错位:CSS宽度计算
    CSS控制div宽度最大宽度/高度和最小宽度/高度
    鼠标HOVER时区块动画旋转变色的CSS3样式掩码
    记录--正则表达式
    写在前面
    ruby Mixin用法
    ruby 模块 的引入
    ruby 编写迭代器
  • 原文地址:https://www.cnblogs.com/zhouyang209117/p/6684761.html
Copyright © 2020-2023  润新知