Use the following MATLAB code (you must compile MatCaffe first) for computing per-class accuracy on a validation or test set, instead.
% global parameters DATA_ROOT = '/home/twang/data/flower/flower_531_crop_256/'; TEST_LIST_FILE = '/home/twang/data/flower/flower_531_meta/val.txt'; NUM_CLASSES = 531; % caffe initialization gpu_id = 0; model = '/home/twang/caffe/models/resnet_flower531/deploy.prototxt'; weights = '/home/twang/caffe/models/resnet_flower531/resnet_flower531_iter_120000.caffemodel'; caffe.set_mode_gpu(); caffe.set_device(gpu_id); net = caffe.Net(model, weights, 'test'); mean_data = caffe.io.read_mean('/home/twang/caffe/models/resnet_flower531/flower_mean.binaryproto'); % read files [files,labels] = textread(TEST_LIST_FILE, '%s %d\n'); accuracy = zeros(2, NUM_CLASSES); for ii = 0 : NUM_CLASSES-1 class_files = files(labels == ii); % all files for current class accuracy(1, ii+1) = length(class_files); for jj = 1 : accuracy(1, ii+1) im_data = caffe.io.load_image([DATA_ROOT class_files{jj}]); input_data = {imresize(im_data - mean_data, [224 224])}; scores = net.forward(input_data); [~, predict] = max(scores{1}); if (predict == ii+1) accuracy(2, ii+1) = accuracy(2, ii+1) + 1; end end fprintf('Class #%03d accuracy = %.2f.\n', ii+1, accuracy(2, ii+1) / accuracy(1, ii+1)); end caffe.reset_all();