import numpy as npimport timefrom array import array
import sys
caffe_root = '/home/caffer/'
sys.path.insert(0,caffe_root+'python')import caffe
import structimport reimport osmodel_file = "/home/caffer/models/squeezenet/"net_file = model_file+"deploy.prototxt"caffe_model = model_file+"snapshot_iter_199003.caffemodel"net = caffe.Net(net_file,caffe_model,caffe.TEST)net.forward()for k, v in net.params.items(): print k, " w : ", np.shape(v[0].data), " b : ", np.shape(v[1].data) w = np.reshape(v[0].data, [-1, v[0].data.shape[-1]]) np.savetxt('w_'+k, w) b = np.reshape(v[1].data, [-1, v[1].data.shape[-1]]) np.savetxt('b_'+k, b) for k, v in net.blobs.items(): print k, " shape : ", np.shape(v.data) if np.shape(np.shape(v.data))[0] >= 3: d = np.reshape(v.data, [-1, v.data.shape[-1]]) elif np.shape(v.data) == (): d = np.reshape(v.data, [1, 1]) else: d = v.data np.savetxt('d_'+k, d) print "Finish!"
#!/usr/bin/env pythonimport syscaffe_root = '/home/caffer/'sys.path.insert(0,caffe_root+'python')import caffe
import numpy as np
import osnp.set_printoptions(threshold='nan')
net_file = "deploy.prototxt"MODEL_FILE = 'solver.prototxt'PRETRAIN_FILE = 'snapshot_iter_199003.caffemodel'
params_txt = 'params.txt'pf = open(params_txt, 'w')
net = caffe.Net(net_file, PRETRAIN_FILE, caffe.TEST)
for param_name in net.params.keys(): weight = net.params[param_name][0].data bias = net.params[param_name][1].data
pf.write(param_name) pf.write('\n')
pf.write('\n' + param_name + '_weight:\n\n') weight.shape = (-1, 1)
for w in weight: pf.write('%ff, ' % w)
pf.write('\n\n' + param_name + '_bias:\n\n') bias.shape = (-1, 1) for b in bias: pf.write('%ff, ' % b) pf.write('\n\n')
pf.close
However, if I used the test.prototxt file then the weights could be different each time.
the "/" could be recognized as a directory so I change it into "_"