zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    jquery笔记
    linux的日常经常使用的命令
    IDEA设置类注解和方法注解(详解)
    java读取项目或包下面的属性文件方法
    枚举类的使用
    将一个浮点数转化为人民币大写字符串
    简单五子棋实现
    crontab 设置服务器定期执行备份工作
    linux创建日期文件名
    代码层读写分离实现
  • 原文地址:https://www.cnblogs.com/zhouyang209117/p/6684761.html
Copyright © 2011-2022 走看看