如果內容侵權的話,聯系我,我會立馬刪了的~因為參考的太多了,如果一一聯系再等回復,戰線太長了~~蟹蟹給我貢獻技術源泉的作者們~
最近准備從理論和實驗兩個方面學習深度學習,所以,前面裝好了Theano環境,后來知乎上看到這個回答,就調研了一下各個深度學習框架,我沒有看源碼,調研也不是很深入,僅僅是為了選擇深度學習框架做的一個大概了解~
1. 如何選擇深度學習框架?
參考資料如下:
1. https://github.com/zer0n/deepframeworks/blob/master/README.md
2. http://blog.csdn.net/qiexingqieying/article/details/51734347
3. https://www.zhihu.com/question/41907061
4. http://www.open-open.com/news/view/1069a70
5. http://www.kuqin.com/shuoit/20151124/349098.html
博客2總結如下:
庫名稱 | 開發語言 | 速度 | 靈活性 | 文檔 | 適合模型 | 平台 | 上手 |
Caffe | c++/cuda | 快 | 一般 | 全面 | CNN | 所有系統 | 中等 |
TensorFlow | c++/cuda/python | 中等 | 好 | 中等 | CNN/RNN | Linux\OSX | 難 |
MXNet | c++/cuda | 快 | 好 | 全面 | CNN | 所有系統 | 中等 |
Torch | c/lua/cuda | 快 | 好 | 全面 | CNN/RNN | Linux\OSX | 中等 |
Theano | python/c++/cuda | 中等 | 好 | 中等 | CNN/RNN | Linux\OSX | 易 |
(1)Caffe
(2)TensorFlow
(3)MXNet
1.Extract AlexNet or VGG features? Use Caffe
2.Fine tune AlexNet for new classes? Use Caffe
3.Image caption with finetuning?
-> Need pretrained models (Caffe, Torch, Lasagne)
-> Need RNNs (Torch or Lasagne)
-> Use Torch or Lasagna
-> Need pretrained model (Caffe, Torch, Lasagna) -> Need funny loss function
-> If loss function exists in Caffe: Use Caffe
-> If you want to write your own loss: Use Torch
5.Object Detection?
-> Need pretrained model (Torch, Caffe, Lasagne)
-> Need lots of custom imperative code (NOT Lasagne) -> Use Caffe + Python or Torch
6.Language modeling with new RNN structure?
-> Need easy recurrent nets (NOT Caffe, Torch)
-> No need for pretrained models
-> Use Theano or TensorFlow
7.Implemente BatchNorm?
-> Don’t want to derive gradient? Theano or TensorFlow
-> Implement efficient backward pass? Use Torch
最后,JJ比較個人化地給出了自己的偏好:

第一部分對於這5個框架的介紹講述了一些概念以及基本優缺點,首先我的使用情況就是文本訓練學習,可能需要用到RNN模型,而且我比較熟悉python一些,C++以及lua都不太會,所以基本確定要了解Theano 和 Tensorflow這兩個框架,杜客在知乎回答的內容中,選擇tensorflow還是Theano,可以看出大牛介紹的主要還是圖像領域的一些應用,然后第6點,Language modeling with new RNN structure也可以基本確定我們需要這兩個框架。
然后選擇誰?雖然Caffe的作者賈揚清老師說“都是基於Python的符號運算庫,TensorFlow顯然支持更好,Google也比高校有更多的人力投入。Theano的主要開發者現在都在Google,可以想見將來的工程資源上也會更偏向於TF一些”。知乎用戶張昊說“ 1. 看你做什么application 2. 看哪個framework能夠提供給你最多與你所做的問題相關的資源。舉個例子,比如做language相關,在小數據上跑跑實驗的話我覺得theano不錯,網上能找到的相關資源(比如其他相關paper的實現,model)很多。如果做視覺相關的那theano的資源跟caffe和torch比就少多了,所以caffe和torch可能會是更好的選擇。TF也不錯,最近Google promote的很厲害,估計隨着用的人越來越多在一兩年內資源也會越來越多。”鑒於我目前只是學習一下,所以決定使用Theano ,但是今天還是花了蟹時間安裝Tensorflow。
2.安裝Tensorflow
Ubuntu14.04+cuda7.5+cudnnv4+Tensorflow
基本根據官方給的教程就可以安裝了https://www.tensorflow.org,然后學校有時候打不開界面,所以也可以參考這里。
我選擇的pip install方式。
$ sudo apt-get install python-pip python-dev
其實這些工具前面好像安裝過了,但是怕有問題就再執行一遍,選擇符合自己情況的命令執行下去。
# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7 # Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below. $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl
出現錯誤,在教程里的common problems中說:
...
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
Solution: Download the wheel manually via curl or wget, and pip install locally.所以使用wget命令下載再執行安裝。
wget https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl sudo pip install tensorflow-0.9.0-cp27-none-linux_x86_64.whl
接着測試tensorflow.
Open a terminal and type the following:
$ python ... >>> import tensorflow as tf >>> hello = tf.constant('Hello, TensorFlow!') >>> sess = tf.Session() >>> print(sess.run(hello)) Hello, TensorFlow! >>> a = tf.constant(10) >>> b = tf.constant(32) >>> print(sess.run(a + b)) 42 >>>
沒有問題。
$ python -c 'import os; import inspect; import tensorflow; print(os.path.dirname(inspect.getfile(tensorflow)))'
結果如下:
測試運行:
$ python -m tensorflow.models.image.mnist.convolutional
出現錯誤:
lvxia@kde:~$ python -m tensorflow.models.image.mnist.convolutional
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcudnn.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally Extracting data/train-images-idx3-ubyte.gz Traceback (most recent call last): File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib/python2.7/runpy.py", line 72, in _run_code exec code in run_globals File "/usr/local/lib/python2.7/dist-packages/tensorflow/models/image/mnist/convolutional.py", line 316, in <module> tf.app.run() File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 30, in run sys.exit(main(sys.argv)) File "/usr/local/lib/python2.7/dist-packages/tensorflow/models/image/mnist/convolutional.py", line 128, in main train_data = extract_data(train_data_filename, 60000) File "/usr/local/lib/python2.7/dist-packages/tensorflow/models/image/mnist/convolutional.py", line 75, in extract_data buf = bytestream.read(IMAGE_SIZE * IMAGE_SIZE * num_images) File "/usr/lib/python2.7/gzip.py", line 261, in read self._read(readsize) File "/usr/lib/python2.7/gzip.py", line 308, in _read self._read_eof() File "/usr/lib/python2.7/gzip.py", line 347, in _read_eof hex(self.crc))) IOError: CRC check failed 0xe1d362ba != 0x90dd462eL
https://github.com/tensorflow/tensorflow/issues/1319中的解決方式:
因此,進入convolutional.py所在目錄,修改文件權限,然后將WORK_DIRECTORY的data修改為 /usr/local/lib/python2.7/dist-packages/tensorflow/models/image/mnist/data 即可。
sudo chmod 777 convolutional.py
重新執行:
python -m tensorflow.models.image.mnist.convolutional
還是出現錯誤
E tensorflow/stream_executor/cuda/cuda_dnn.cc:286] Loaded cudnn library: 5005 but source was compiled against 4007. If using a binary install, upgrade your cudnn library to match. If building from sources, make sure the library loaded matches the version you specified during compile configuration.
可以看到是cudnn版本不一致的問題導致的。
然后官網上有這么一句“Download cuDNN v4 (v5 is currently a release candidate and is only supported when installing TensorFlow from sources).”,所以我就下載了cuDNN v4。
tar xvzf cudnn-7.0-linux-x64-v4.tgz sudo cp cuda/include/cudnn.h /usr/local/cuda-7.5/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda-7.5/lib64 sudo chmod a+r /usr/local/cuda-7.5/include/cudnn.h /usr/local/cuda-7.5/lib64/libcudnn*
我忘記以前怎么操作的了,我的/esr/local文件夾下有兩個cuda文件,一個是cuda一個是cuda-7.5.這里我把他放在cuda7.5文件夾下面。
然后執行上述命令就沒有問題了。
中間暈暈呼呼還嘗試了一遍源代碼安裝方式,就是官網上的install from sources,基本步驟也按照上面來,結合 博客 博客 就可以了,碰到蟹問題,基本google能找出解決辦法的。
這篇博客講述了tensorflow源碼目錄結構的一些知識。
這里記錄幾個小問題和解決方法:
(1)OSError - Errno 13 Permission denied
chown -R user-id:group-id /path/to/the/directory
(2)AttributeError: type object 'NewBase' has no attribute 'is_abstract'
sudo pip install six --upgrade --target="/Library/Python/2.7/site-packages/"
(3)./configure 在 tensorflow目錄下,這個在源代碼安裝方式中用到這個配置了。