2012-10-21 68 views
2

我讀了以下問題:如何使用C++讀取MNIST數據集?

How to read MNIST data in C++?

並有用於讀取數據庫MNIST一些C++代碼。在嘗試之後,我發現它一直運行良好,直到它開始讀取數據的地方。

這是下面的代碼:

for(int i=0;i<number_of_images;++i) 
     { 
     for(int r=0;r<n_rows;++r) 
     { 
      for(int c=0;c<n_cols;++c) 
      { 
       unsigned char temp=0; 
       file.read((char*)&temp,sizeof(temp)); 
       //cout<<(int)temp<<" "; //printing the pixel in integer format 

      } 
     } 
    } 

我試圖打印出變量「溫度」的整數值,但是我沒有得到的像素正確的號碼(全部爲零)。 我不知道有什麼問題,每個像素需要一個字節的空間,然後我把它轉換爲一個int,它不起作用。爲什麼會發生?預先感謝您

+0

只是一個更新,代碼是完全正常的。我不確定爲什麼昨天晚上我檢查時它不工作,但是今天我醒來後,我試着再次運行它,輸出結果是正確的。也許昨天在我的電腦上出現了某種衝突,並且簡單的重新啓動就解決了這個問題?我不確定,但是在研究了這些文件的格式之後,我無法簡單理解爲什麼這些代碼不起作用,這對我來說沒有任何意義,這正是我重新運行它的原因。謝天謝地,現在一切都好! – ksm001

回答

2

當使用MNIST數據集時,我遇到了和您一樣的問題。我可以閱讀標籤,但訓練和測試集的圖像大多是假的;訓練集幾乎全部用175填充,並且測試集幾乎全部用0填充(除了前6個圖像)。重新啓動沒有解決問題,我無法確定爲什麼文件讀取不能正常工作。

對於有這個問題的人,我會建議使用位於http://cis.jhu.edu/~sachin/digit/digit.html的數據文件。數據已經按照編號進行組織(不需要標籤/圖像關聯),並且像素值的數組依次被簡單地編碼。知道每個數組是28x28並且每個數字有1000個圖像,您可以輕鬆編寫代碼來輸入像素值的單個圖像數組。

+1

如果有人正在尋找簡單的.csv文件,我在我的網站上發佈了火車和測試集,你可以在這裏找到他們(http://pjreddie.com/projects/mnist-in-csv/)。希望他們有用! – pjreddie

5

我有同樣的問題,前幾個字節的數據很好,然後其餘的是填充0。事實證明,文件流在第一次遇到字節0x01A時失敗。對此問題進行修復正在發生變化:

ifstream file ("data"); 

ifstream file ("data", std::ios::binary);