Closed liuwenran closed 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)
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?