yiwenguo / Dynamic-Network-Surgery

Caffe implementation for dynamic network surgery.
Other
186 stars 70 forks source link

how to load pretrained model? #1

Closed liuwenran closed 7 years ago

liuwenran commented 7 years ago

Hello, when I want to use your code to prune lenet-5 , I replace ip1 and ip2 with your cinner_product_layer. But because cinner_product_layer has 4 blobs(weight, bias, weight mask, bias mask) and inner_product_layer just has 2 blobs , so caffe can't load pretrained lenet-5 model lenet_iter_10000.model which is in examples/mnist to this surgery net. So how to load pretraine model to prune it , should I write python or matlab code to transfer parameters of pretrained model to your surgery net manually?

liuwenran commented 7 years ago

a few lines of python code will help, like these:

originPrototxt = 'your_path/alexnet_train_val.prototxt' surgeryPrototxt = 'your_path/alexnet_compress_train_val.prototxt' pretrained_model = 'your_path/bvlc_alexnet.caffemodel' gpu_id = 3 caffe.set_mode_gpu() caffe.set_device(gpu_id) originNet = caffe.Net(originPrototxt, pretrained_model, caffe.TEST) surgeryNet = caffe.Net(surgeryPrototxt, caffe.TEST) layers = filter(lambda x:'conv' in x or 'fc' in x or 'ip' in x, originNet.params.keys()) for idx, layer in enumerate(layers): for i in range(2): surgeryNet.params[layer][i].data[:] = originNet.params[layer][i].data

savedir = 'your_path/alexnet_compress_reference.caffemodel'
surgeryNet.save(savedir)