caffe教程 (2)
caffe教程
1 caffe簡介
Caffe是一個深度學習框架,本教程解釋了它的理念,體系結構和用法。這是一本實用指南和框架介紹,所以深入學習的全部前沿,背景和歷史不能在這里介紹。盡可能給出解釋,機器學習和神經網絡的背景是有幫助的。
2 Caffe特點
- 表達式:模型和優化定義為明文模式而不是代碼。
- 速度:對于研究和行業來說,速度對于最先進的模型和海量數據至關重要。
- 模塊化:新的任務和設置需要靈活性和擴展性。
- 開放性:科學和應用進展需要共同的代碼,參考模型和可重復性。
- 社區:學術研究,啟動原型和工業應用都通過在BSD-2項目中進行聯合討論和開發來共享優勢。
3 caffe組成
Blob,Layer,Net,Solver
Blob:是基礎的數據結構,是用來保存學習到的參數以及網絡傳輸過程中產生數據的類。
Layer:是網絡的基本單元,由此派生出了各種層類。修改這部分的人主要是研究特征表達方向的。
Net:是網絡的搭建,將Layer所派生出層類組合成網絡。
Solver:是Net的求解,修改這部分人主要會是研究DL求解方向的。
3.1blob
Caffe支持CUDA,在數據級別上也做了一些優化,這部分最重要的是知道它主要是對protocol buffer所定義的數據結構的繼承,Caffe也因此可以在盡可能小的內存占用下獲得很高的效率。(追求性能的同時Caffe也犧牲了一些代碼可讀性)
在更高一級的Layer中Blob用下面的形式表示學習到的參數:
這里使用的是一個Blob的容器是因為某些Layer包含多組學習參數,比如多個卷積核的卷積層。
以及Layer所傳遞的數據形式,后面還會涉及到這里:
3.2 Layer
5大Layer派生類型
Caffe十分強調網絡的層次性,也就是說卷積操作,非線性變換(ReLU等),Pooling,權值連接等全部都由某一種Layer來表示。具體來說分為5大類Layer
1 NeuronLayer類 定義于neuron_layers.hpp中,其派生類主要是元素級別的運算(比如Dropout運算,激活函數ReLu,Sigmoid等),運算均為同址計算(in-place computation,返回值覆蓋原值而占用新的內存)。
2 LossLayer類 定義于loss_layers.hpp中,其派生類會產生loss,只有這些層能夠產生loss。
3 數據層 定義于data_layer.hpp中,作為網絡的最底層,主要實現數據格式的轉換。
4 特征表達層(我自己分的類)定義于vision_layers.hpp(為什么叫vision這個名字,我目前還不清楚),實現特征表達功能,更具體地說包含卷積操作,Pooling操作,他們基本都會產生新的內存占用(Pooling相對較小)。
5 網絡連接層和激活函數(我自己分的類)定義于common_layers.hpp,Caffe提供了單個層與多個層的連接,并在這個頭文件中聲明。這里還包括了常用的全連接層InnerProductLayer類。
Layer的重要成員函數
在Layer內部,數據主要有兩種傳遞方式,正向傳導(Forward)和反向傳導(Backward)。Forward和Backward有CPU和GPU(部分有)兩種實現。Caffe中所有的Layer都要用這兩種方法傳遞數據。
未完待續……………………
總結
以上是生活随笔為你收集整理的caffe教程 (2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度贴吧的数据抓取和分析(一):指定条目
- 下一篇: C# FTP 上传、下载、获取文件列表