python 機器學習不會很慢嗎?
我不懂機器學習這個領域。業餘會點Python和cpp。
我一直納悶現在大火的「機器學習」「人工智慧」為什麼都流行用py實現?python的運行效率不是很低嗎?
誰特么邀請我的= =砍死。。
首先 Python 的的性能 emmm 的確是一個讓人吐槽已久的問題。
但是 Python 有三個非常重要的特性,易上手,社區豐富,性能擴展方便
易上手。
這個很容易理解了,Python 算是目前對於新手最為友好的語言了,你基本直接隨意找一個 Tutorial 走一遍基本就能上手了。
而且 Python 作為一種解釋性語言,人機交互方面,天生比 C++/Scala 這種編譯型語言要人類有好的多。快速驗證一個模型什麼的,出個 圖什麼的,都很方便。
社區豐富:
Python 目前周邊算是非常成熟,針對不同的需求都有著自己比較受歡迎的庫什麼的
比如臨時寫個 web 介面什麼的
pallets/flaskgithub.comdjango/djangogithub.com比如覺得自帶的 REPL 不太好用的
jupyter/jupytergithub.comjupyter/notebookgithub.com想要快速出個圖什麼的
https://github.com/plotly/plotly.pygithub.compyecharts/pyechartsgithub.com配合前面的易上手的特性,模型人員在快速驗證想法,迭代 prototype 的時候,可以很方便的按需選擇,而不必去考慮太多關於工程上的細節。
性能擴展方便
CPython 一直保持的一點就是,在你覺得某些地方存在性能瓶頸的時候,可以很方便的用其餘語言進行擴展
pandas-dev/pandasgithub.comnumpy/numpygithub.comtensorflow/tensorflowgithub.com比如這些常見的一大堆東西,模式都是 C/C++ 底層性能部分,Python wrap 之後暴露給使用者。
所以吧,對於 Python 來講,性能的確是個問題,但是不是根本問題,我們可以有很多方法去彌補這個問題。
而 Python 帶來的收益,就目前來看,的確是對降低編程門檻,加快迭代效率而言有著不錯的利好。
所以這個問題,最終依舊歸根結底一句話:「我們所做的任何一個選擇都是在利弊之間選擇的一個妥協點」
py是遙控器,cpp是電視機.
遙控器是給人用的,用兩節五號電池就行了.
電視機是拿來接收信號展示的,所以用了220V交流電.
機器學習中,py只是用來調用cpp牌電視機的遙控器.
python機器學習開發用到的庫底層基本都是cpp實現的吧,所以在數據量不是很大的前提下還是可以接受的
純python實現是比c慢很多比如jieba(一個中文分詞庫),cppjieba就比純python實現的快10倍左右。不過你可以使用c來實現python中的部分函數,我就使用c來實現了jieba中的核心函數,提升了一倍左右。詳情可以見github :deepcs233/jieba_fast
我的blog:Deepcs不會,因為如果大數據,計算量極大的情況,都在用顯卡計算,python介面對速度的影響微不足道,如果計算量很小,那python比起cpp也不會有太大差距。
理論上彙編語言運行效率最快,那為什麼我們不使用彙編語言進行開發呢?某個運行在虛擬機里的語言,號稱一次編譯到處運行,你覺得是因為它比C++更快嗎?顯然,大家選擇這門語言,無非是因為它的社區生態好而已。所以,運行效率和開發效率是兩個不同的概念。
作為天生喜歡競爭的人類,我們更看重的是怎麼能比別人更快搶佔市場,怎麼能比別人更快賺到錢。讓代碼跑得比別人快這件事情,除了愚蠢的程序員以外,沒有人會真正在乎,想想那些年寫過的Todo,你當真以為我們不在乎嗎?我們只是沒有時間而已!
Python和Lua都是腳本語言,都提供了C/C++的介面,所以對於核心級別的代碼,通常會用C/C++來編寫以保證效率,而業務層面通常都用這些腳本語言封裝後調用,目的是更快地完成業務邏輯,Python擁有最全面的第三方庫,你覺得這些作者不會考慮到這種問題?
總而言之,你犧牲運行效率來換取開發效率,這是理所應當的事情,不應該指責Python慢,人生苦短,我用Python。開發效率和運行效率是兩回事,用python開發,再調用C++來運行
不會。python做機器學習底層也會調c++的代碼
會慢,所以TensorFlow只是把Python當成交互介面,並不會用Python去運算。
同理Java不是很慢嗎?為什麼那麼多人學?手動微笑
但是它開發快呀
大部分庫由c實現,只要函數式編程,把大部分東西寫到函數里就好了。
所以,我選擇scala……
機器語言運行效率最高,en……一定是這樣的。
工業界不清楚,應該不會都用py吧,但科研界,py的比重非常大了,特別是剛接觸機器學習的。。
畢竟,你是想花一倍時間寫代碼兩倍時間跑,還是花兩倍時間寫代碼一倍時間跑呢?學生或者菜鳥更喜歡前者吧
python編譯器是c寫的,據說大佬們在用彙編重寫,然而工作量巨大,能用彙編寫出來,和c差不多效率 怕不是奔著滅絕滅絕別的語言前進
運行效率低是低,但那幾毫秒差距,人咋感覺。再而且硬體早晚不是問題。再而且python開發效率高,通俗易懂。喜歡運行效率高,大可以學彙編或者機器語言,但為啥沒多大有人學,晦澀難懂,所以之後c就出來,然後python這位也是沖著c寶座而來的
推薦閱讀:
※如何看待摩根大通利用 AI 機器人執行金融交易?其工作原理是怎樣的?
※cart樹怎麼進行剪枝?
※在可見的未來,機器會不會替代投行員工?
※知識圖譜目前亟待的問題有哪些?
※美國機器學習方向的 master 找工作前景如何?