首页 文章

如何使用Caffe框架提取预训练Alex网络模型的卷积参数

提问于
浏览
2

我正在进行一些优化,以使Convolution层和完全连接层快速工作 . 我需要预训练的Alex Net模型的卷积核重量,以便用实际图像执行卷积 .

我尝试通过编写一个简单的python代码来提取第一个Convolution层的内核参数 .

# Load the original network and extract the fully connected layers'    parameters.
import caffe
import sys

f1=open('./testfile', 'w')

net = caffe.Net('models/bvlc_alexnet/deploy.prototxt', 
            '/media/ubuntu/sdcard/bvlc_alexnet.caffemodel', 
            caffe.TEST)

print >> f1, net.params['conv1'][0].data

这给了我Alex Net第一层的内核权重,但是内核的大小存在差异 .

我的输出文件是这样的

[[[[ -2.83153467e-02  -6.76262565e-03   1.69464536e-02 ...,
 -1.89594068e-02  -1.02251852e-02   6.16483716e-03]
[ -3.29505093e-02  -1.28040602e-02   1.36566022e-02 ...,
 -2.06015427e-02  -3.66760854e-04   2.51943078e-02]
[ -3.83224562e-02  -1.63374413e-02   1.71793532e-02 ...,
 -2.37888489e-02   1.93770428e-03   3.10342778e-02]
...,
[ -1.32519063e-02   1.20311677e-02   1.48218526e-02 ...,
 -1.09308660e-02   1.10638803e-02   3.24864089e-02]
[ -1.22069763e-02   8.22285190e-03   1.70185007e-02 ...,
 -8.42322689e-03   1.14848586e-02   3.08694635e-02]
[ -3.33898212e-03   1.44736944e-02   9.51856188e-03 ...,
 -1.00268638e-02   6.68688724e-03   2.11901478e-02]]

由于我们在alex net的第一个卷积层中有96个大小(11 * 11 * 3)的内核,因此预期的输出是96个内核(11 * 11 * 3) .

我没有为第二个甚至第三个卷积层获得适当的权重 .

1 回答

  • 1

    我能够获得卷积内核权重,问题在于记事本文件的大小 .

    这是我修改过的代码,我在循环中逐个打印内核权重 .

    import caffe
    import sys 
    import numpy as np
    
    f1=open('./testfile', 'w')
    print >> f1,"";
    f1.close();
    net = caffe.Net('models/bvlc_alexnet/deploy.prototxt', 
                '/media/ubuntu/sdcard/bvlc_alexnet.caffemodel', 
                caffe.TEST)
    f1=open('./testfile', 'a')
    for num in range(0,95):
        print >> f1,net.params['conv1'][0].data[num]
    f1.close()
    

    我得到了96个大小为11 * 11 * 3的内核 .

    • 希望你觉得它有用:)

相关问题