對caffe做mnist錯誤識別樣本輸出的過程記錄

2021-07-30 12:30:21 字數 2813 閱讀 9812

參考部落格:caffe視覺化mnist錯誤識別樣本

果然太小白啊,瞎折騰琢磨,出來結果貌似還不對,反正大概流程是搞懂了

1.首先對accuracy_layer函式進行功能新增,開啟src/caffe/layers/accuracy_layer.cpp檔案,在第88行新增如下**段:

else

2.測試樣本總共有10000個,分為100個batch,每個batch大小為100個,所以我們還需要輸出每個batch的序號 ,開啟src/caffe/solver.cpp檔案,在第407行新增如下**段:

for (int i = 0; i < param_.test_iter(test_net_id); ++i)
3.做完上述改變之後發現執行訓練程式時,並沒有對應的輸出,後來檢視知乎上一條問題,在回答下面的回答中發現,再對層進行了修改之後,要對caffe進行make all,讓它對修改過的層重新編譯。

4.編譯完成後,設定訓練輸出日誌檔案

$./examples/mnist/train_lenet.sh >& lenet.log &
見《深度學習:21天實戰caffe》第295頁

5.執行訓練過程

sudo sh examples/mnist/train_lenet.sh
%show_trainerror_minist_data.m %%%by-hh

clear;clc;close all;

fid = fopen('lenet.txt'); % 替換為日誌檔名

tline = fgetl(fid);

c = ; % 定義空矩陣用來存放結果

batch=;

index=;

label=;

output=;

while feof(fid)==0

if ~isempty(strfind(tline, 'batch:')) ||~isempty(strfind(tline, 'index:'))% 查詢字串

% indexline = fgetl(fid);

if ~isempty(strfind(tline, 'batch:'))

%tline = indexline;

% 在tline中解析batch

idx1 = strfind(tline, 'batch:');

batch = [batch;str2num(tline(idx1 + 6 : length(tline)))];

elseif ~isempty(strfind(tline, 'index:'))

% tline = indexline;

% 在indexline中解析index,label,output

idx2 = strfind(tline, 'index:');

idx3 = strfind(tline, 'label:');

idx4 = strfind(tline, 'output:');

index = [index;str2num(tline(idx2 + 6 : idx3 - 2))];

label = [label;str2num(tline(idx3 + 6 : idx4 - 2))];

output = [output;str2num(tline(idx4 + 7 : length(tline)))];

endend tline = fgetl(fid);

end% 新增到陣列

%disp('321..')

c = [batch, index, label, output];

fclose(fid);

% 視覺化部分

image_file_name = 't10k-images-idx3-ubyte';

index_file_name = 't10k-labels-idx1-ubyte';

fid1 = fopen(image_file_name,'rb');

fid2 = fopen(index_file_name,'rb');

images_data = fread(fid1,'uint8');

index_data = fread(fid2,'uint8');

fclose(fid1);

fclose(fid2);

images_data = images_data(17:end);

index_data = index_data(9:end);

image_buffer = zeros(28, 28);

for k = 1:1:size(c,1)

figure(size(c,1));

index = c(k,1) * 100 + c(k,2)+1;

image_buffer = reshape(images_data((index) * 28 * 28 + 1 : (index + 1) * 28 * 28), 28, 28);

subplot(10, 10, k);

imshow(uint8(image_buffer)'); % 轉置

title(sprintf('

%d->%d', index_data( index + 1), c(k,4))); % label -> output

end

7.結果感覺是錯的,具體也不知道到底哪步出現了問題,還會有8->8這樣的結果出現……

LSTM對MNIST資料集做分類

rnn 從每張的第一行畫素讀到最後一行,然後再進行分類判斷.匯入資料 mnist input data.read data sets mnist data one hot true hyperparameters lr 0.001 learning rate training iters 10000...

caffe之MNIST基礎詳解

cd caffe root data mnist get mnist.sh examples mnist create mnist.sh 開啟lenet train test.prototxt檢視詳細資訊 資料層定義如下圖,需要注意的是source和backend,batch size也可以根據需要...

caffe執行自帶的mnist

sh data mnist get mnist.sh但是這些檔案是不能夠直接使用的,因此 sh examples mnist create mnist.sh轉換為lmdb檔案,轉換之後會在examples mnist下面還是生成 mnist train lmdb mnist test lmdb 裡面...