caffe學習筆記4-matcaffe訓練與測試
阿新 • • 發佈:2018-12-30
.m檔案流程(訓練或者測試)
1.
新增路徑 caffe/matlab 使得 Matlab 可以使用 matcaffe, +caffe資料夾下都是matcaffe的.m介面,可用matlab操作caffe網路
if exist('../+caffe', 'dir')
addpath('..');
2.設定caffe cpu/gpu 模式(在測試或者訓練之前。.m檔案中)
if exist('use_gpu', 'var') && use_gpu
caffe.set_mode_gpu();
gpu_id = 0; % we will use the first gpu in this demo
caffe.set_device(gpu_id);
else
caffe.set_mode_cpu();
end
3.後面就是初始化網路,進行訓練或者測試。
用已有模型進行測試流程(測試以分類為例)
model_dir = '../../models/bvlc_reference_caffenet/'; //實際檔案路徑model = './models/bvlc_reference_caffenet/deploy.prototxt';
net_model = [model_dir 'deploy.prototxt'];
net_weights = [model_dir 'bvlc_reference_caffenet.caffemodel'];
phase = 'test'
net = caffe.Net(net_model, net_weights, phase); //建立網路並載入權值
或者:net = caffe.Net(model, 'test'); % 建立網路,但不載入權值
net.copy_from(weights); % 載入權值
prepare_image() //資料預處理(格式+冗餘),自己定義
input_data = {prepare_image(im)}; //裝載資料,等價net.blobs('data').set_data(prepare_image(im));用法
scores = net.forward(input_data); //前向計算
//提取出最大的score(概率)以及對應的標籤號
scores = scores{1}; //等價prob = net.blobs('prob').get_data();用法//計算之後再讀取原塊的資料,最後一層為prob
scores = mean(scores, 2); //取所有分類結果的平均值
1.
新增路徑 caffe/matlab 使得 Matlab 可以使用 matcaffe, +caffe資料夾下都是matcaffe的.m介面,可用matlab操作caffe網路
if exist('../+caffe', 'dir')
addpath('..');
2.設定caffe cpu/gpu 模式(在測試或者訓練之前。.m檔案中)
if exist('use_gpu', 'var') && use_gpu
caffe.set_mode_gpu();
gpu_id = 0; % we will use the first gpu in this demo
caffe.set_device(gpu_id);
else
caffe.set_mode_cpu();
end
3.後面就是初始化網路,進行訓練或者測試。
用已有模型進行測試流程(測試以分類為例)
model_dir = '../../models/bvlc_reference_caffenet/'; //實際檔案路徑model = './models/bvlc_reference_caffenet/deploy.prototxt';
net_model = [model_dir 'deploy.prototxt'];
net_weights = [model_dir 'bvlc_reference_caffenet.caffemodel'];
phase = 'test'
net = caffe.Net(net_model, net_weights, phase); //建立網路並載入權值
或者:net = caffe.Net(model, 'test'); % 建立網路,但不載入權值
net.copy_from(weights); % 載入權值
prepare_image() //資料預處理(格式+冗餘),自己定義
input_data = {prepare_image(im)}; //裝載資料,等價net.blobs('data').set_data(prepare_image(im));用法
scores = net.forward(input_data); //前向計算
//提取出最大的score(概率)以及對應的標籤號
scores = scores{1}; //等價prob = net.blobs('prob').get_data();用法//計算之後再讀取原塊的資料,最後一層為prob
scores = mean(scores, 2); //取所有分類結果的平均值
[~, maxlabel] = max(scores); //找到最大概率對應的標籤號