前言:學習深度學習是從本科畢業設計開始,如今學習了不少理論知識,利用Caffe框架要付諸實踐了,記錄下來學習過程,也算是心路歷程。
剛開始搭建Caffe環境遇到很多的問題,先放棄安裝GPU相關的環境了,先在CPU下訓練,盡管跑訓練速度很慢,但以后再解決GPU的問題。
正文:
1、安裝必要依賴包:
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler sudo apt-get install --no-install-recommends libboost-all-dev sudo apt-get install libatlas-base-dev sudo apt-get install python-dev sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
PYTHON需要2.7版本,這是操作系統本身已經安裝好的. 輸入python2.7 --version 會顯示具體的版本號說明安裝了.
2、下載Caffe
首先安裝git工具:
sudo apt-get install git
然后下載caffe包:
git clone https://github.com/BVLC/caffe.git
接下來進入caffe目錄下(我講caffe下載到/home下了)。
cd caffe/
進入里面的PYTHON文件夾,然后輸入
for req in $(cat requirements.txt); do pip install $req; done
如果沒有pip,得先安裝一下: sudo apt install python-pip
3、安裝Caffe
進入caffe根目錄,使用模板寫個Makefile.config. 具體就是先復制一下模板, 再改一些內容
cp Makefile.config.example Makefile.config
首先,#CPU MODE下,在CPU_ONLY := 1前面的#要去掉. (因為僅在CPU下跑Caffe)
然后,在其中找到如下內容,兩個路徑要改成這樣:(添加后面的兩個hdf5的路徑, 否則編譯時報hdf5錯誤)
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
現在准備就緒,開始安裝Caffe:
依次執行下列命令:
make pycaffe make all make test make runtest
當我執行make pycaffe命令的時候,報了錯:fatal error: numpy/arrayobject.h沒有那個文件或目錄
其實numpy已經是安裝的,anaconda2里面有,Python中import numpy也沒有問題,但就是在此處報錯,解決方法:
sudo apt-get install python-numpy
然后再執行一遍 make pycaffe命令就行了。
顯示所有的TESTS PASSED,說明已經安裝好了。
如果遇到:fatal error: hdf5.h: 沒有那個文件或目錄”,解決辦法如下:
在Makefile.config文件的第85行,添加/usr/include/hdf5/serial/ 到 INCLUDE_DIRS,也就是把下面第一行代碼改為第二行代碼。
將# Whatever else you find you need goes here.下面的 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 修改為: INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
在Makefile文件的第173行,把 hdf5_hl 和hdf5修改為hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代碼改為第二行代碼。
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
cd /usr/lib/x86_64-linux-gnu
然后根據情況執行下面兩句:
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
之后繼續編譯就行了。
4、配置python
在caffe根目錄的python文件夾下,有一個requirements.txt的清單文件,上面列出了需要的依賴庫,按照這個清單安裝就可以了。
因為前面配置有報錯,所以執行一下一下語句查看:
sudo pip install -r python/requirements.txt
結果打印如下:
UndefinedEnvironmentName: 'extra' does not exist in evaluation environment.
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
顯示scikit-image錯誤, 那就安裝一下scikit-image就好了。
按照提示,執行一下語句:
pip install --upgrade pip
然后執行:
pip install scikit-image
去到Caffe根目錄里面的python文件夾, 把當前路徑記錄下來(pwd). 然后在終端下輸入以下命令(把記下的路徑改在相應地方),回車
export PYTHONPATH=/path/caffe/python:$PYTHONPATH
這時候應該可以了,試驗一下:
# python Python 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import caffe >>>
當import caffe后回車,沒有報錯,說明python環境已經搭建好。
問題:
當我再進入系統的時候import caffe失效
直接使用export 時 只是在當前的登錄窗口中有效,一旦關閉就會失效
解決如下:
$注意: /path/to/caffe/python 這是你的caffe的路徑下面的python 我查了一下Ubuntu中有很多文件可以存放 PYTHONPATH=/path/to/caffe/python:$PYTHONPATH 添加到 $sudo vim /etc/profile PYTHONPATH=/path/to/caffe/python:$PYTHONPATH export 添加完成后記得要 source profile
解決目前的困難。
更新:在我遠程控制時,出現如下錯誤:
這個錯誤一般是因為你在遠程登陸服務器,而caffe python中 matplotlib是繪圖功能,需要在圖形界面才行,這時候可以在import之前加入如下代碼解決:
打開 {caffe_root}/python/caffe/__init__.py Add the following lines to the top: import matplotlib matplotlib.use('Agg')
解決當前困難。
5、訓練MNIST集
將終端定位到Caffe根目錄
然后執行腳本文件,下載MNIST數據庫並解壓縮
./data/mnist/get_mnist.sh
我由於網絡問題沒有收到HTTP返回,所以按照腳本里的代碼,根據網址在網上下載壓縮包,cp到mnist文件夾下,使用腳本里的解壓命令依次解壓。
然后,將其轉換成Lmdb數據庫格式
./examples/mnist/create_mnist.sh
然后訓練網絡
./examples/mnist/train_lenet.sh
訓練的時候可以看到損失與精度數值
可以看到最終訓練精度是0.9911
成功完成。
分享只為更好的記錄~
by still、