若是內容侵權的話,聯繫我,我會立馬刪了的~由於參考的太多了,若是一一聯繫再等回覆,戰線太長了~~蟹蟹給我貢獻技術源泉的做者們~html
最近準備從理論和實驗兩個方面學習深度學習,因此,前面裝好了Theano環境,後來知乎上看到這個回答,就調研了一下各個深度學習框架,我沒有看源碼,調研也不是很深刻,僅僅是爲了選擇深度學習框架作的一個大概瞭解~python
1. 如何選擇深度學習框架?linux
參考資料以下:c++
1. https://github.com/zer0n/deepframeworks/blob/master/README.mdgit
2. http://blog.csdn.net/qiexingqieying/article/details/51734347github
3. https://www.zhihu.com/question/41907061算法
4. http://www.open-open.com/news/view/1069a70api
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
-> 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目錄下,這個在源代碼安裝方式中用到這個配置了。