如何导出caffemodel参数

来源:互联网 发布:em算法硬币 编辑:程序博客网 时间:2024/05/16 17:04

最近在github上看到一个导出mnist的model参数的Matlab和python的脚本,比较简单,以后可能用得到,记录一下。

load_caffemodel.py: 使用python脚本加载lenet的参数。

conv*.mat: 在blob数据中相同结构定义的层的参数。

parse_param.m: Matlab脚本,将加载到的每层参数保存出来的mat文件整合成一个parsed_param.mat文件。

parsed_param.mat: Matlab保存生成的mat文件。

如果github打不开的话,我这里把这几个脚本的代码贴出来。

================================================================================

load_caffemodel.py

import numpy as npimport scipy.io as sioimport caffedef load():# Load the netcaffe.set_mode_cpu()# You may need to train this caffemodel first# There should be script to help you do the trainingnet = caffe.Net(root + 'lenet.prototxt', root + 'lenet_iter_10000.caffemodel',\caffe.TEST)conv1_w = net.params['conv1'][0].dataconv1_b = net.params['conv1'][1].dataconv2_w = net.params['conv2'][0].dataconv2_b = net.params['conv2'][1].dataip1_w = net.params['ip1'][0].dataip1_b = net.params['ip1'][1].dataip2_w = net.params['ip2'][0].dataip2_b = net.params['ip2'][1].datasio.savemat('conv1_w', {'conv1_w':conv1_w})sio.savemat('conv1_b', {'conv1_b':conv1_b})sio.savemat('conv2_w', {'conv2_w':conv2_w})sio.savemat('conv2_b', {'conv2_b':conv2_b})sio.savemat('ip1_w', {'ip1_w':ip1_w})sio.savemat('ip1_b', {'ip1_b':ip1_b})sio.savemat('ip2_w', {'ip2_w':ip2_w})sio.savemat('ip2_b', {'ip2_b':ip2_b})if __name__ == "__main__":# You will need to change this pathroot = '/caffe/examples/mnist/'load()print 'Caffemodel loaded and written to .mat files successfully!'

parse_param.m

clear;close all;clc%% Parse the ConvNet parameters loaded from caffe into better fit version% Author: Yuliang Zou% Date: 06/14/2016%% Load parametersload('conv1_w.mat');load('conv1_b.mat');load('conv2_w.mat');load('conv2_b.mat');load('ip1_w.mat');load('ip1_b.mat');load('ip2_w.mat');load('ip2_b.mat');%% Parse parameters into better fit version% conv1 has 20 filters with 5 * 5 size W1 = zeros(5,5,20);for i = 1:20    W1(:,:,i) = conv1_w(i,1,:,:);endb1 = double(conv1_b');% conv2 has 50 filters with 5 * 5 size W2 = zeros(5,5,20,50);for k = 1:20    for i = 1:50        W2(:,:,k,i) = conv2_w(i,k,:,:);    endendb2 = double(conv2_b');% fc layersip1W = double(ip1_w);ip1b = double(ip1_b');ip2W = double(ip2_w);ip2b = double(ip2_b');save('parsed_param.mat','W1','W2','b1','b2','ip1W','ip1b','ip2W','ip2b');



0 0
原创粉丝点击