前言
前面介紹的案例都是leveldb的格式,但是比較流行和實用的格式是lmdb,原因從此網站摘取
- 它們都是鍵/值對(Key/Value Pair)嵌入式資料庫管理系統程式設計庫。
- 雖然lmdb的記憶體消耗是leveldb的1.1倍,但是lmdb的速度比leveldb快10%至15%,更重要的是lmdb允許多種訓練模型同時讀取同一組資料集。
- 是以lmdb取代了leveldb成為Caffe預設的資料集生成格式。
以下步驟均為在E:\CaffeDev-GPU\caffe-master下實施
第一步
確定路徑E:\CaffeDev-GPU\caffe-master\examples\mnist下存在從mnist官網下載下傳的四個檔案,我在mnist下建立了一個mnist檔案夾,把檔案丢進去了
并在E:\CaffeDev-GPU\caffe-master\examples\mnist檔案夾下建立bat檔案建立訓練集create_minist_trainlmdb.bat,内容如下:
E:\CaffeDev-GPU\caffe-master\Build\x64\Debug\convert_mnist_data.exe ./mnist/train-images-idx3-ubyte ./mnist/train-labels-idx1-ubyte ./mnist_train_lmdb
pause
接下來建立測試集create_minist_testlmdb.bat,内容如下:
E:\CaffeDev-GPU\caffe-master\Build\x64\Debug\convert_mnist_data.exe ./mnist/t10k-images-idx3-ubyte ./mnist/t10k-labels-idx1-ubyte ./mnist_test_lmdb
pause
或者跟我們前面建立leveldb一樣,建立一個bat,内容如下:
set DATA=../../data/mnist
set TOOLS=../../Build/x64/Debug
REM set BACKEND=leveldb
set BACKEND=lmdb
echo "Creating %BACKEND%..."
rd /s /q "mnist_train_%BACKEND%"
rd /s /q "mnist_test_%BACKEND%"
"%TOOLS%/convert_mnist_data.exe" %DATA%/train-images-idx3-ubyte %DATA%/train-labels-idx1-ubyte mnist_train_%BACKEND% --backend=%BACKEND%
"%TOOLS%/convert_mnist_data.exe" %DATA%/t10k-images-idx3-ubyte %DATA%/t10k-labels-idx1-ubyte mnist_test_%BACKEND% --backend=%BACKEND%
echo "Done."
pause
第二步
運作建立訓練集的bat,出現我們的第一個問題
原因在于記憶體問題,打開caffe.sln,然後修改convert_mnist_data.cpp第101行
原始值設定記憶體為1T,然而我們的記憶體并沒這麼大,是以改小一點,差不多100M多一點吧
改完以後重新編譯此cpp檔案,然後再去運作前面建立訓練集和測試集的bat檔案
第三步
運作create_minist_trainlmdb.bat會出現
如果你原來有mnist_train_lmdb這個檔案夾記得删掉,否則會出現
因為我們寫bat的時候并未檢測這個檔案夾是否存在,隻是想單純建立這個檔案夾,用來存lmdb資料,是以會出現mkdir應該就是make dir失敗。
如果我們使用第三個bat就不會出現這個問題了,一目了然