深度学习caffe--手写字体识别例程(四)—— create_mnist.sh脚本文件详解

Fiona ·
更新时间:2024-09-21
· 995 次阅读

        在《深度学习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.


作者:fxfreefly



caffe 手写字体 create 字体 mnist

需要 登录 后方可回复, 如果你还没有账号请 注册新账号