caffe随记(四) --- mnist示例超详细讲解


这个mnist手写体数字识别的例子可以说是caffe中的 Hello World。mnist最初用于支票上的手写数字识别,针对mnist识别的专门模型是Lenet,这是由Yan LeCun大神搞出来的,可以说是最早的CNN实例。通过这个例子我们来看一下使用caffe大概是个什么流程

1、下载数据

   第一步自然是要有数据了,没有数据怎么学习呢?

  我们之前谈到数据一般是保存在caffe目录下data这个目录的


再进入mnist目录看一下:


这里只有1个file,即是get_mnist.sh脚本,我们就是运行它来下载mnist数据的,

来看一下此脚本里面写的什么

 

打开此脚本:vim  get_mnist.sh 



这里面的内容了解一下即可,主要是让大家看看稀奇,可见它用了一个for循环,下载了4个文件,并解压了它们。

这里可能和其他一些地方分别把四个文件的名字和网址都列出来不一样,可能是caffe版本的问题,但是所执行的任务是一样的,for循环大家总看得懂吧

 

废话有点多了,回到caffe根目录,输入下面的代码,

./data/mnist/get_mnist.sh


然后就显示以下内容



下载完毕,原来的文件夹里多了四个文件



2、转换数据格式

下载的数据为二进制文件,需要转换为LEVELDB或LMDB,

Mnist这个例程保存在我之前Caffe随记(一)中谈及的caffe目录下example这个目录,转到此目录可见如下,可以看到有个叫做mnist的文件夹,我们就要用到里面的东西


打开mnist目录



我们会用到create_mnist.sh这个脚本(然后我们还偶遇了上篇博文中提到的lenet_solver.prototxt这个脚本)

打开脚本看看里面的内容: vim create_mnist.sh



这里还是讲一下这个脚本中写的内容把,

首先,定义了几个路径变量:EXAMPLEDATABUILD,因为这里路径变量定义的原因,所以我们等会儿调用这个脚本时要回到caffe这个根目录哦!

下面的这几个变量等会儿执行时就用这几个路径替换


然后,定义了 BACKEND这个变量为”lmdb”,所以下面程序中的BACKEND就用lmdb替换

 

接着,rm –rf $EXAMPLE/mnist_train_${BACKEND}这两句是在删除原来这个路径下的文件,

也就是如果你之前转换过一次,他会先删除原来转换得到的文件,然后再重新转换一次

 

最后,$BUILD/convert_mnist_data.bin这句话就是在调用BUILD这个路径下的一个可执行文件

         convert_mnist_data.bin,    看名字就知道是在转换格式啦

        紧跟  $DATA/train-images-idx3-ubyte\

                 $DATA/train-labels-idx1-ubyte\

      这两个参数就是我们刚刚1步下载后的文件,你看DATA对应的路径是不是第1步中的?这是训练集数据train,一个数据一个标签

     紧跟    $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND}EXAMPLE/mnist_train_

     这个参数是把转换后的文件保存到哪里

  对于test数据也是同样的操作

 

这就是这个脚本的详细描述

那么我们回到caffe根目录输入以下代码:

./examples/mnist/create_mnist.sh


再去刚刚那个EXAMPLE目录也就是examples/mnist目录去看看:



这里的两个文件夹中存放的就是我刚刚转换了的数据

 

3、网络模型

我们用的网络是LeNer-5模型,这个模型当初Yan LeCun用的是sigmoid激活函数,但是至AlexNet之后的网络基本都用ReLU激活函数了,所以这个模型在caffe中用的也是ReLU

 

有兴趣的可以vim打开这个看一下这个文件,这里我就不贴图占篇幅了,caffe随记(二)中Net那一部分(点击打开)我就是举得这个例子。

文件的目录:

,caffe/example/mnist/lenet_train_test.prototxt 上一张图片其实就能看到这个文件的位置


4、训练网络

 

Data准备好了,Net也定义了,下面就该轮到训练了

caffe根目录下运行 ./example/mnist/train_lenet.sh



其实先不急运行,咱们来看看这个脚本的内容再说:


如图,这个脚本的内容很少,重要的就最后一行:

./build/tools/caffe train 这一句其实是在运行一个可执行文件,最后我们会详解一下,这里不急,因为这里面用的也是相对路径,那个点代表的是根目录caffe,所以我们也要在caffe根目录下执行这个文件。

后面的--solver=examples/mnist/lenet_solver.prototxt   是 参数

这个文件我也不打开看了,因为我的caffe随记(三)中讲sovler(点击可打开)时举的例子就是这个,这个就是我用来训练时需要的核心文件。脚本的内容就是这样,下面执行把。

 

执行结果会打印出来很多东西:

①GPU信息


我用的0号GPU: Tesla K40c (实验室的服务器,自己当然是买不起的- -)


②solver文件的参数信息:



③lenet_train_test.prototxt网络的信息和各层的建立过程

你可能会发现打印了两次网络,但其实一个是TRAIN一个是TEST,如下所示

        和    


细节我就不贴图了,太长了

 

然后就等着Iteration一直显示到10000,因为sovler.prototxt中规定了最大迭代次数10000可以点此转到我那篇博文;

根据GPU或者CPU性能不同等待的时间不一样,千万不要以为你电脑卡住了,只要它的Iteration一直在增长就说明是在运行

 

然后会在5000和10000次的时候各输出2个数据一共是2x2=4个文件,






lenet_iter_5000.caffemodel、lenet_iter_5000.solverstate

lenet_iter_10000.caffemodel、lenet_iter_10000.solverstate

这四个文件

同样是 因为 solver 中定义了每 5000 次迭代存储一次数据,可以 点此转到我那篇博文。


5、进行测试

获得训练出的模型之后,我们就可以用它来测试一把了。

运行 ./examples/mnist/test_lenet.sh

也许出于某些原因你的./examples/mnist目录下没有test_lenet.sh这个脚本文件,无妨,你其实可以自己写一个,调用linux指令touch 新建一个test_lenet.sh文件,然后再vim编辑它即可,来看看它的内容是什么:


#!/usr/bin/env sh

./build/tools/caffe.bin test--model=examples/mnist/lenet_train_test.prototxt –gpu 0--weights=examples/mnist/lenet_iter_10000.caffemodel -iterations 100

第一行 #!/usr/bin/env sh是说用sh方式执行这个脚本,

第二行 ./build/tools/caffetest 还是在调用可执行文件./build/tools/caffe.bin,然后test是它的参数,表明我现在是在测验了,

            之前我们在train的时候已经碰到了./build/tools/caffe 这个命令,只不过那个时候参数是train,你可以往上翻到第4步去看看。

            后面的--model=examples/mnist/lenet_train_test.prototxt仍然是参数,就是指定Net模型

           后面的–gpu 0是我自己添上的一个参数,表明我是指定使用0号GPU来执行

     为什么我要自己加个这个呢?因为如果不加GPU的话,caffe.bin这个文件默认调用CPU来运行,这里不急,我后面会单独详解这个caffe.bin这个可执行文件

          后面的--weights=examples/mnist/lenet_iter_10000.caffemodel仍然是参数,这个必须要带上,因为这就是你第4步训练出来的模型(也就是得到的权值文件),

          后面的-iterations100仍然是参数,表明迭代次数

然后去根目录下运行此脚本即可,如果你是自己新建的这个脚本,如果不修改权限的话,也许需要在前面加上sh 这个命令才能运行。

 

当然其实经过上面的脚本文件讲解后,你完全可以直接在根目录下输入脚本里面的那个命令内容,如下:

./build/tools/caffe.bin test \

> -model examples/mnist/lenet_train_test.prototxt \

> -weightsexamples/mnist/lenet_iter_10000.caffemodel \

> -iterations 100


你看,这里我通过 直接在caffe根目录下输入命令来执行test操作,这里我就没有输入gpu 0,它打印的信息显示Use CPU


如果我选择调用我自己刚刚那个脚本文件来运行,因为那个文件里面我谢了GPU参数,所以就用GPU来运行咯,如下:


你看用的就是我的gpu 0, Tesla K40c



最终结果如下


平均准确率达到0.9904

至此,本篇讲解mnist的例子就到此结束了,完成这个实验,你就已经在caffe中玩了一次 Hello World!了


关于 .build/tools/caffe.bin这个可执行文件,我在下一篇博客来详细介绍一下,点击这里













  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 安装caffe-ssd-gpu在ubuntu18.04的步骤如下: 1. 安装CUDA:从Nvidia官网下载合适的CUDA安装包,按照官方文档的指引进行安装。 2. 安装依赖:运行以下命令安装所需依赖库: ``` sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev \ libopencv-dev libhdf5-serial-dev protobuf-compiler \ libgflags-dev libgoogle-glog-dev liblmdb-dev libboost-all-dev ``` 3. 下载caffe-ssd-gpu源码并编译:从Github上下载caffe-ssd-gpu的源码,按照官方文档指引进行编译。编译时需要指定编译选项为GPU模式。 4. 运行测试:安装完成后,运行测试脚本,确保安装配置成功。 以上为简要步骤,具体操作请参考对应文档和官方指引。 ### 回答2: Ubuntu18.04是目前比较常见的Linux操作系统之一,而CAFFE-SSD-GPU是深度学习的一个工具。下面是安装caffe-ssd-gpu的步骤: 1. 安装CUDA和cuDNN 首先,您需要安装CUDA和cuDNN,这是运行深度学习框架所需的必备组件。下载安装CUDA和cuDNN之前,您需要查看您的图形卡的型号,以便选择正确的CUDA版本和cuDNN版本。 在下载和安装CUDA和cuDNN之前,您需要在NVIDIA的开发者网站上注册自己,并下载适用于您机器的CUDA和cuDNN版本。此外,您还需要在命令行界面中设置以下环境变量: export PATH=/usr/local/cuda-8.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH 2. 安装依赖项 在安装caffe之前,需要安装一些依赖项。您可以使用以下命令将这些依赖项安装到您的Ubuntu系统上: sudo apt-get update sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev protobuf-compiler gfortran libjpeg62 libfreeimage-dev libatlas-base-dev git python-dev python-pip libgoogle-glog-dev libbz2-dev libxml2-dev libxslt-dev libffi-dev libssl-dev libgflags-dev liblmdb-dev python-yaml python-numpy python-scipy 3. 下载和安装CAFFE 现在,您需要在您的系统上下载和安装CAFFE。从github上获取caffesource代码并进行安装: git clone https://github.com/weiliu89/caffe.git cd caffe git checkout ssd 4. 编译和安装CAFFE 使用以下命令编译和安装caffe: cp Makefile.config.example Makefile.config make all -j $(($(nproc) + 1)) make pycaffe 执行该命令后,您需要等待一段时间才能完成CAFFE的编译。如果出现任何编译错误,请检查您的CUDA和cuDNN版本是否正确,并重新安装依赖项。 5. 使用CAFFE-SSD-GPU 现在,您已经成功地在Ubuntu18.04操作系统上安装并编译了CAFFE-SSD-GPU,您可以开始使用该工具来执行深度学习任务了。 总结 安装CAFFE-SSD-GPU需要充分理解linux的命令行操作。需要先确认CUDA和cuDNN已经安装,并正确设置环境变量。然后需要下载和安装CAFFE, 并最后编译和安装CAFFE。在安装过程中如果存在问题,可以查看错误日志,重新检查步骤。如果对命令行操作不熟悉,则先学习linux基础操作。 ### 回答3: caffe-ssd-gpu是一种基于caffe框架的用于实现目标检测的神经网络模型,在Ubuntu18.04系统中安装caffe-ssd-gpu需要进行以下步骤: 1. 安装CUDA CUDA是NVIDIA公司推出的用于高性能计算的并行计算平台和编程模型,是使用GPU进行深度学习任务所必需的。在Ubuntu18.04上安装CUDA需要首先确认自己的显卡型号,并选择合适的CUDA版本进行安装。可以在NVIDIA官网上下载相应的CUDA安装包,也可以通过命令行方式进行安装。在安装过程中注意要按照提示完成相应的配置和设置。 2. 安装cuDNN cuDNN是用于深度神经网络的GPU加速库,也是必需的组件之一。在安装过程中同样需要确认CUDA的版本和自己的显卡型号,并下载相应的cuDNN安装包进行安装。 3. 安装依赖包 在安装caffe-ssd-gpu前需要先安装几个依赖包,包括protobuf、opencv、boost等。可以通过命令行方式进行安装,例如: ``` sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev ``` 4. 下载caffe-ssd-gpu源码 可以在GitHub上找到caffe-ssd-gpu的源码,下载后解压到自己想要的目录下。 5. 编译和安装caffe-ssd-gpu 进入caffe-ssd-gpu源码目录下,执行以下命令: ``` cd caffe-ssd-gpu mkdir build cd build cmake .. make all -j8 make install ``` 其中,make all -j8表示使用8个线程进行编译,提高编译速度。make install表示安装编译好的caffe-ssd-gpu库文件和可执行文件。 6. 测试安装是否成功 可以尝试运行caffe-ssd-gpu自带的测试程序,检查安装是否成功。在源码目录下执行以下命令: ``` ./build/tools/caffe time --model=models/VGGNet/VOC0712/SSD_300x300_ft/deploy.prototxt --gpu=0 ``` 这条命令会测试caffe-ssd-gpu在GPU上执行推断的速度,如果没有问题,则说明安装成功。 需要注意的是,在安装过程中可能会遇到各种问题,例如依赖包的版本不兼容、CUDA和cuDNN的配置出错等等。这时候需要耐心调试错误,逐个解决问题,才能确保caffe-ssd-gpu能够正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值