1. 程式人生 > >淺析caffe設計中的幾個重大缺憾

淺析caffe設計中的幾個重大缺憾

caffe是由時在google實習的賈揚清開源的用於大規模GPU深度學習加速運算的框架,作為第一代深度學習框架的代表,其在14-17年間佔據絕對主力的位置,直到16年google開源的第二代深度學習框架tensorflow後來居上並遙遙領先,徹底取代了其在深度學習屆的地位。本人也是從caffe入門深度學習的,近年來迫不得已選擇了tensorflow,對其應該是有很多投入的,但所謂選擇大於努力,對於現在才入門深度學習的來說我是建議從caffe入手的。網上對其歌功頌德的博文數不勝數,我在這裡就不贅述了,我們更應該剖析其日漸式微的根源,吸取架構設計上的教訓。

1.首當其衝的是依賴複雜,一個caffe庫要依賴protobuf、glog、gflags、boost、lmdb、hdf5等十幾個庫,如果每個庫都從頭編譯的話至少需要一天的時間,其中尤以boost為甚,這個號稱C++標準備胎的庫,僅原始碼就有100多M,完全編譯後更是佔據10多個G的空間,所需時間更是4個小時以上,更別提裡面16鍾編譯模式了,這其實也不怪它,整個C++就沒有一個跨平臺的系統級的依賴庫管理系統,程式碼複用一直是個棘手的事,還是python的import來的方便。google自家的那幾個庫是很好用,但是就為了生成個隨機數就得強加十幾個G的依賴真的有必要嗎?還是我們直接能假設使用者都用的是linux系統?不管Windows使用者了?

2.其次是文件不全,猶記得當初我花了近乎一個星期的時間好不容易把它編譯過了,居然不知道接下來該做什麼了。當然隨著時間的推移文件慢慢的補上來了,不過看上去仍然沒有連貫性,各個部分單獨成章,沒有系統的邏輯。更像是參考手冊而不是使用教程。而更重要的為什麼設計成這樣的基本沒有講述,還得靠第三方的程式碼解析才能猜出蛛絲馬跡。

3.沒有擴充套件性,加個層都得大動干戈,又是改proto,又是寫cu檔案。更好的是應該設計成外掛式的結構,按需載入。小白使用者需要的扔進去一個數據集就能訓練,換資料集只改個路徑就好,而現在又是改proto,又是生成lmdb,又是生成mean,囉囉嗦嗦好幾個步驟還分了好幾部分去講,真是毀人不倦。

4.blob設計的問題。模型引數和特徵map本來是兩個風馬牛不相及的結構,非得把他們雜糅到一個Blob類裡,弄的不倫不類,嚴重違背了軟體工程中單一功能的原則,這也是造成它極不靈活的根源。