深度學習caffe--手寫字體識別例程(四)—— create_mnist.sh腳本文件詳解

        在《深度學習caffe--手寫字體識別例程(一)》中,我們進行了手寫字體識別例程的演練,在獲取了數據集後,需要將數據集轉換爲caffe需要的LMDB格式的文件,使用create_mnist.sh腳本文件進行轉換,這篇文章我們來研究一下這個腳本文件到底做了什麼。我們在caffe根目錄下的examples/mnist/目錄下可以找到這個腳本文件,源碼如下所示。

#!/usr/bin/env sh
# This script converts the mnist data into lmdb/leveldb format,
# depending on the value assigned to $BACKEND.
set -e

EXAMPLE=examples/mnist
DATA=data/mnist
BUILD=build/examples/mnist

BACKEND="lmdb"

echo "Creating ${BACKEND}..."

rm -rf $EXAMPLE/mnist_train_${BACKEND}
rm -rf $EXAMPLE/mnist_test_${BACKEND}

$BUILD/convert_mnist_data.bin $DATA/train-images-idx3-ubyte \
  $DATA/train-labels-idx1-ubyte $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND}
$BUILD/convert_mnist_data.bin $DATA/t10k-images-idx3-ubyte \
  $DATA/t10k-labels-idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND}

echo "Done."

        1、在文件的第一行指定的是腳本的解釋程序,第二行和第三行是對這個腳步文件的功能的註釋。

        2、set -e的作用是在接下來執行的命令中,如果命令的返回值不爲0,那麼會使所在的進程或shell退出。

        3、接下來三行代碼

EXAMPLE=examples/mnist
DATA=data/mnist
BUILD=build/examples/mnist

定義了3個變量EXAMPLE、DATA、BUILD,它們分別表示三個路徑。

        4、BACKEND="lmdb"定義了另一個變量爲LMDB尾綴。

        5、echo "Creating ${BACKEND}..."的作用是在終端上打印Creating lmdb... ,其中${BACKEND}表示BACKEND的取值,即lmdb。

        6、

rm -rf $EXAMPLE/mnist_train_${BACKEND}
rm -rf $EXAMPLE/mnist_test_${BACKEND}

這兩行代碼的作用是刪除EXAMPLE目錄下的mnist_train_lmdb和mnist_test_lmdb文件或目錄。它們是將以前的痕跡清楚掉,避免與新生成的數據產生混亂。

        7、接下來的命令

$BUILD/convert_mnist_data.bin $DATA/train-images-idx3-ubyte \
  $DATA/train-labels-idx1-ubyte $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND}

它的作用是調用BUILD目錄下的convert_mnist_data.bin可執行文件來進行數據轉換,$DATA/train-images-idx3-ubyte和$DATA/train-labels-idx1-ubyte爲DATA目錄下的轉換前的圖片文件和標籤文件,也就是轉換的原料,$EXAMPLE/mnist_train_${BACKEND}爲轉換完的文件保存的路徑,--backend=${BACKEND}表示生成的文件類型。這兩行代碼最終會將我們下載的mnist訓練數據集轉換爲lmdb格式的文件。關於convert_mnist_data.bin的作用,我們將在下一篇文章中進行詳解。

        8、接下來的兩行

$BUILD/convert_mnist_data.bin $DATA/t10k-images-idx3-ubyte \
  $DATA/t10k-labels-idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND}

它與7中的兩行代碼的作用是相似的,只不過這兩行轉換的是測試數據集。

       9、最後一行

echo "Done."

它的作用是轉換完成後,在終端中打印Done.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章