為什麼談論深度學習工具時,很少有人討論matlab的神經網路工具包?

matlab的神經網路應該是配置起來最簡單的深度學習實驗工具了吧,雖然theano也容易,但再加上cuda的話就複雜一些了,尤其是在windows下。但是很少見有人談論matlab的工具包,是因為我關注matlab少,還是matlab的神經網路工具包本身有不足之處呢?


MatConvNet總體來說還是蠻不錯的, 代碼結構清晰, debug的時候因為是在matlab下面, 很容易把每個variable都plot出來看, 適合初學者上手和非CS背景的研究者(這類用戶其實非常龐大,比如說一些做城市規劃的,股票預測的,物理生物背景等). 我去年TA的一門MIT的課程6.819/6.869: Advances in Computer Vision裡面CNN相關的assigment和final project就是教學生用MatConvNet來完成( 6.869 Assignments).

這門課的final project我設計了個mini-Places Challenge, 從Places(A Large-Scale Database for Scene Understanding)裡面選取了100類場景,每類場景1000張圖, 然後學生可以組隊參賽,最後我們設有leaderboard和獎品.學生們通過訓練和改進網路來提升分類結果,最後學生們收穫還是頗豐,真正學習到了CNN的工作原理和如何調參.這個課的所有課件我們也release出來了, 有興趣的朋友可以看看, 6.869 Schedule.後來Berkeley的Computer Vision課程也使用了我們這個mini-Places數據集,來寓教於樂,讓學生學習如何訓練CNN網路.後來有學生專門寫郵件來感謝TA,說通過這個mini-places實踐學習到了CNN的工作機制,對他後來的interview有挺大幫助,順利拿到了internship offer:).

平時我也用Matcaffe, caffe在matlab下面的wrapper.Matcaffe可以無縫跟matlab鏈接,載入pre-trained model抽feature等都挺方便.


我嘗試著回答一下這個問題吧. 上面 @周博磊講到了, 在MATLAB上debug其實是有很多優勢的, 比如可以plot出中間結果, 特別是對於做vision的人來說, 有時候斷點進去看value很難發現異常的, 只有visualize出來才能發現. 比如我在調FCN的時候經常出來的結果和輸入圖像有個空間上的shift, 這種不可視化很難發現. 當然其它的平台下也可以這樣子可視化, 比如tensorflow, mxnet這種有python binding的都可以用matplotlib, torch也有iTorch, 但畢竟都沒有matlab方便. Matlab的優勢並不是這門語言, 而是整個的開發/debug環境. 這門語言別說賣一萬塊, 一分錢都不值.

那為什麼基於Matlab的深度學習框架Matconvnet並沒有流行起來呢?

首先深度學習不光是在學術界非常火熱, 在工業界也有著大量的運用, 這就要求深度學習框架要方便在伺服器上部署, 而這個恰恰是Matlab的軟肋, 想像一下你前端用個Django做個頁面接受用戶輸入的圖像, 後端跟Matlab交互... 當然我並不是說這無法實現, 我也曾經用MATLAB做過網站的後台, 踩坑無數...

其次深度學習框架大多數都是由社區開發和維護的, 開發者遍布世界各地, 使用一門開源/免費的語言就有著天然的優勢. 要是用Matlab的話每個開發者都得買一個Matlab Licence, 太蛋疼了.

然後就是Matlab開發深度學習框架優點雞肋. 因為但凡想在大數據集上跑基本都要cuda, 用cuda寫一堆Matlab mex然後在Matlab中調用, 那和caffe寫個Matlab binding其實區別不大, 調試還是得到cuda里看.

所以說我覺得caffe這種C++/cuda為主, 外面套一層Matlab binding是最好的解決方案, 既能利用Matlab方便可視化, 又能兼顧性能.


我覺得有以下幾點:

1.matlab 的模塊與其他python 或者lua的腳本語言可使用的庫在使用難度上並沒有特別大的優勢,特別是在伺服器上運行

2.各種論文的實現依賴的框架更容易復現論文結果和進行改進,這些方面caffe torch theano可能具有更好的優勢,且最新網路組件的更新也會在這些框架上比較早的實現

3.與其他開源框架相比,對matlab的模型進行工程化工作量更大,並不想用matlab來做服務

4.開源框架有利於進行創新,二次開發

5. 個人認為matlab語言比較醜陋,不喜勿噴


  • MatConvNet 是基於 MATLAB 的工具箱,它將 CNN 用於計算機視覺應用程序(由 Andrea Vedaldi 創建)
  • 深度學習工具箱,包含深度信念網路、堆疊式自動編碼器、CNN 和示例(由 Rasmus Berg Palm 創建)
  • 深度神經網路,深度信念網路的深度學習工具(由 Masayuki Tanaka 創建)
  • 深度信念網路和 MATLAB 的其他深度學習工具(由 Ruslan Salakhutdinov 和 Geoffrey Hinton 創建)
  • 面部表情識別,通過 CNN 進行表情分類,結合使用 CUDA 和 MATLAB 實現(由 Ruslan Salakhutdinov 創建)

more see

深度學習:MATLAB 入門的 7 大方法

不同工具,不同語言,各有利弊。


因為某位智者告訴過我:Matlab根本不是語言!


不覺得呢

CV領域裡用matlab深度學習工具的人很多,不乏國際名校的實驗室



貴。


最重要的是工業界一般沒錢買matlab


這真的是歧視

看一下招聘網站,

matlab被許多公司都不認為是編程語言。。。

其實,matlab何止是強大?


慢,數據量大的時候直接out of memory。數據量小的時候,還是matlab快。


MATLAB 被鄙視 主要是因為這是一款商業軟體。

除去授權 , MATLAB不受 深度學習 待見還是因為 慢慢慢 ...

在 Python 上 Tensorflow + GPU 目測能比MATLAB 快60倍 ~~

MATLAB 上的反人類 工具包 我給你們推薦一個 。

https://github.com/stavros99/DeapLearningToolbox_Matlab

我校不知道誰寫的。 非常難用 , 深受其害 ~


我就用MatConvNet,感覺也挺不錯的。VLFeat - Home

其中卷積神經網路的前向計算和反向求導推導地很清楚


其實大學裡很多實驗室在用,今年夏天我們單位招實習生,很多人實驗室用的都是MatConvNet。

關於為什麼工業界不喜歡用matlab,這裡提一點很多人在學校里遇不到的問題:打包

當研發進行到一定階段,客戶(同一個公司旗下的其他部門)會希望獨立對演算法做一些測試,例如會拿一些研發人員沒見過的測試數據,看看有沒有過擬合。

這個階段客戶滿意之後,才會用最終使用的語言(一般是c++)來改寫代碼,去除並自己實現一些單位不想出錢的開源代碼。然後再交給工程部門進行代碼的各種優化。

而在用戶測試這個階段,研發人員不希望用戶看到源碼。所以就要進行打包

matlab不僅本身是收費的,那些工具包是收費的,而且matlab compiler這個打包工具也是收費的,而且不便宜。

而python不僅本身免費,而且有很多免費的打包工具。

當然,如果客戶只想測試deploy部分,其實可以把訓練好的模型提取出來,然後用其他工具,例如caffe提供的C++介面,寫測試程序。

但如果客戶想自己拿一批數據訓練個模型測試一下,對matlab程序的打包就很難避免了。

如果這個研發部門長期使用matlab還好,否則單純為了某一個項目去花這筆錢,不划算。都夠我們這些碼農好幾天工資了,不如讓碼農用相同的時間學習一下其他的深度學習工具。


用matlab的好像還是蠻多的吧?

不知道為啥現在業內用matlab容易被嘲諷,確實慢但真的比較好用啊,做network裡面的visualisation也很方便

再想想可能就是因為容易,所以才會被嘲諷。。。人家學tensorflow啊torch啥的花那麼長時間也不容易,大家都是碼農,早晚都要一起禿頂,朋友一生一起走,想嘲諷就嘲諷吧(攤手

#一個寫程序寫到絕望的姑娘


深度學習是搞CS專業的人炒起來的,然而CS人有太多可選的編程語言,沒必要用matlab這種不開源、價格貴的軟體。


主要是深度學習處於快速發展階段,主要貢獻是學術界和工業界,擁抱來源,所以matlab用的少了


正版matlab太貴


說白了就是錢的問題……


matlab多貴啊,而且慢的跟狗一樣,python怎麼輸


推薦閱讀:

Mathematica和c++是探索 宇宙萬物 本質規律最好的工具嗎?
為什麼數學軟體要用自己的語言?
MATLAB和Python 相互無法替代的地方有哪些,對於以後一直做科研的人,兩種語言到底哪家強?
Matlab面向對象編程是否值得大量使用?
R相比於matlab有哪些優勢?為什麼現在被越來越多的使用?

TAG:MATLAB | 機器學習 | 神經網路 | 深度學習DeepLearning |