caffe的Matlab接口的使用方法

caffe的Matlab接口的使用方法

net.blobs(‘data’).set_data(ones(net.blobs(‘data’).shape));
net.blobs(‘data’).set_data(net.blobs(‘data’).get_data() * 10);
注意:因为Matlab是以1作为起始单元,且以列为主,在Matlab中使用四维blob为[width, height, channels, num],且width是最快的维度,而且要在BGR通道。而且Caffe使用单精度浮点型数据。如果你的数据不是浮点型的,set_data将会自动转换为single。

你也可以访问网络的每一层,以便你作一些网络调整。例如把conv1参数乘以10:
net.params(‘conv1’, 1).set_data(net.params(‘conv1’, 1).get_data() * 10); % set weights
net.params(‘conv1’, 2).set_data(net.params(‘conv1’, 2).get_data() * 10); % set bias
或者
net.layers(‘conv1’).params(1).set_data(net.layers(‘conv1’).params(1).get_data() * 10);
net.layers(‘conv1’).params(2).set_data(net.layers(‘conv1’).params(2).get_data() * 10);

你仅仅需要如下代码保存网络:
net.save(‘my_net.caffemodel’);

获得一层的类型(string):
layer_type = net.layers(‘conv1’).type;

前向和后向计算可以使用net.forward或者net.forward_prefilled实现。函数net.forward将一个包含输入blob(s)的cell数组作为输入,并输出一个包含输出blob(s)的cell数组。函数net.forward_prefilled将使用输入blob(s)中的已有数据进行计算,没有输入数据,没有输出数据。
在通过一些方法(如:data = rand(net.blobs(‘data’).shape);)产生输入数据后,你可以运行:
res = net.forward({data});
prob = res{1};
或者
net.blobs(‘data’).set_data(data);
net.forward_prefilled();
prob = net.blobs(‘prob’).get_data();

后向计算使用net.backward或者net.backward_prefilled,并且把get_data和set_data替换为get_diff和set_diff。在通过一些方法(例如prob_diff = rand(net.blobs(‘prob’).shape);)产生输出blobs的梯度后,你可以运行:
res = net.backward({prob_diff});
data_diff = res{1};
或者
net.blobs(‘prob’).set_diff(prob_diff);
net.backward_prefilled();
data_diff = net.blobs(‘data’).get_diff();
然而,如上的后向计算并不能得到正确的结果,因为Caffe默认网络不需要后向计算。为了获取正确的后向计算结果,你需要在你的网络prototxt文件中设置force_backward: true

假设你想要运行1幅图像,而不是10幅时:
net.blobs(‘data’).reshape([227 227 3 1]); % reshape blob ‘data’
net.reshape();

训练网络
solver = caffe.Solver(‘./models/bvlc_reference_caffenet/solver.prototxt’);
train_net = solver.net;
test_net = solver.test_nets(1);

假设从一个snapshot中恢复网络训练:
solver.restore(‘your_snapshot.solverstate’);

输入和输出:
caffe.io类提供了基本的输入函数load_image和read_mean。例如,读取ILSVRC 2012 mean文件(假设你已经通过运行./data/ilsvrc12/get_ilsvrc_aux.sh下载imagenet例程辅助文件):
mean_data = caffe.io.read_mean(‘./data/ilsvrc12/imagenet_mean.binaryproto’);
im_data = caffe.io.load_image(‘./examples/images/cat.jpg’);
im_data = imresize(im_data, [width, height]); % resize using Matlab’s imresize
注意:以上使用的是width是load_image函数。最快的维度,通道为BGR,与Matlab存取图片的一般方式不一样。

如果你不想要使用caffe.io.load_image,且想自己导入一幅图片:

im_data = imread('./examples/images/cat.jpg'); % read image
im_data = im_data(:, :, [3, 2, 1]); % convert from RGB to BGR
im_data = permute(im_data, [2, 1, 3]); % permute width and height
im_data = single(im_data); % convert to single precision

清除nets和solvers
调用caffe.reset_all()来清理你所创建的所有的solvers,和stand-alone nets。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值