1. 程式人生 > >可以拋棄 Python 了?Google 開源 Swift for TensorFlow 意味著什麼

可以拋棄 Python 了?Google 開源 Swift for TensorFlow 意味著什麼

點選上方“CSDN”,選擇“置頂公眾號”

關鍵時刻,第一時間送達!

Google開源Swift for TensorFlow無疑是對熱衷於喜愛Swift程式語言的開發者的一種特殊福利。這也不由得讓我更加欽佩Swift之父Chris Lattner此舉的偉大。

此前,Lattner在蘋果領導開發的Swift不僅速度快,可用性高,在開發者群體中極受歡迎,隨後,在Tesla短暫停留的六個月之後,Lattner於2017年8月選擇加盟Google Brain,專攻機器學習和人工智慧,目前來看,Swift for TensorFlow應該其加入Google之後的第一個大動作。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

上個月底,在TensorFlow舉辦的開發者峰會上,Google重磅釋出了許多產品。除了TensorFlow.js的釋出之外,還有一個就是宣佈了即將開源的

Swift for TensorFlow。昨日,Google的承諾如期兌現,也再次將人工智慧和深度學習相關專案研發的從業者對TensorFlow的喜愛推向高潮。據瞭解,Swift for TensorFlow在GitHub上開源,連結為:https://github.com/tensorflow/swift。

640?wx_fmt=png

可以說截止目前,TensorFlow已經滿足了包括Python、Java、Swift、Go、C等多種程式語言的支援。

據TensorFlow官方介紹,

“Swift for TensorFlow 為 TensorFlow 提供了一種新的程式設計模型,將 TensorFlow 計算圖與 Eager Execution 的靈活性和表達能力結合在了一起,同時還注重提高整個軟體架構每一層的可用性。

此外,TensorFlow還編寫了一些文件,其中詳細介紹了其理論和實現,存放在README 檔案中,連結:https://github.com/tensorflow/swift/blob/master/README.md。

第一個必讀文件是“Swift for TensorFlow 設計總覽”,這裡介紹了專案的主要組成部分以及結合方式。

另外,TensorFlow還詳細介紹專案的幾個重要領域,通過“Graph Program Extraction”的演算法,可以讓開發者用 Eager Execution 式的程式設計模型來實現程式碼,同時保留 TensorFlow 計算圖的高效能優勢。並且,這個專案還允許開發者直接通過Swift程式碼任意使用Python API。

當然,TensorFlow官方還提到,之所以選擇Swift作為主語言,目的在於“實現可靠的 Graph Program Extraction 演算法對於程式語言的設計有很高的要求”。

總的來講,自從Tensorflow開源之後,其提供的API對搭建神經網路有著足夠的自由度,很大程度上為開發者們搭建和實現功能解決了後顧之憂,但另一方面,鑑於使用TensorFlow的基本模型,Python作為資料科學家專用的最舒適的語言,與TensorFlow也是一個很自然的契合。甚至連fast.ai創始人、前任Kaggle總裁Jeremy Howard在看到此次專案之後曾在Twitter上評論:“我們是不是終於可以放下Python了?”

640?wx_fmt=png

Jeremy Howard在Twitter上的回覆

此前,TensorFlow官方曾給出一個特別的提示:“現在使用Swift for TensorFlow重寫你的深度學習模型還為時尚早。”

那麼,我們何時需要開始真得需要並投入到Swift中來呢?

近期,來自Fritz.ai聯合創始人兼CEO Jameson Toole發表一篇標題為《為什麼資料科學家應該開始開始學習Swift》(Why data scientists should start learning Swift),其中,他談到了Swift for Tensorflow以及機器學習發展的未來。

640?wx_fmt=png

他表示,不要將Swift視為TensorFlow的簡單包裝,以便其更易於在iOS裝置上使用。其意義遠不止如此。該專案改變的將是整個機器學習和資料科學生態系統使用的預設工具。

為什麼這麼講呢?

他繼續談到:

“在此背景之下,可以看到兩種趨勢正慢慢滲透:一個是通過神經網路和深度學習掀起的人工智慧復興;一個是向數十億智慧手機和物聯網裝置上執行的移動為先應用的轉變。這兩種技術都需要高效能運算能力,這種情況下Python就顯得尤為不適了。

一方面,深度學習在算力上非常昂貴,需要通過張量運算的長鏈傳遞巨大的資料集。為了快速執行這些計算,軟體必須將數以千計的線條和核心與專用處理器進行編譯。在移動裝置的功耗和熱量被得以真正關注的情況下,這些問題開始加劇了。相對來講,以更少的記憶體換來更為高效的處理器以優化應用,這都是一個不小的挑戰。顯然,迄今為止,Python依然不再是一個很好的解決方案。

而對資料科學家和機器學習研究人員來講,這就是很大的問題。因為,我們不再訴諸於讓GPU承受大量工作負載,但多數人又深陷移動應用開發的泥潭,再耗費時間學習一門新的程式語言似乎不太現實,但這種轉換成本實在太高了。例如Node.js這樣的JavaScript專案和React Native這樣的跨平臺抽象工具。現在,我很難在Python的環境下完成專案。

在由機器學習和邊緣計算主導的世界中,Python無法成為端到端語言,主要還是因為Swift for TensorFlow的推動。Chris Lattner認為,Python作為一種動態型語言,無法帶領我們走得更遠。用他的話來講,工程師需要一種把機器學習當做‘一等公民’的程式語言。當然,雖然他深刻闡述了為什麼採用新的編譯分析與改變利用TensorFlow搭建專案的方式息息相關,但是他最為引人矚目的還對程式設計過程的理解。”

640?wx_fmt=png

Chris Lattner提出了構建機器學習系統的一種新的方式

Jameson Toole做出構想,任何一種能夠方便機器學習的程式語言所具有的特徵:

  1. 可讀、高效語法

  2. 指令碼功能

  3. 類似於Notebook介面

  4. 大型、活躍的社群可構建第三方機構

  5. 從TPU到移動晶片等專業硬體,可提供乾淨、自動化的編碼方式

  6. 移動裝置上的本機執行

  7. 效能更接近於C

寫到最後,Jameson Toole還表示:Lattner和他的團隊正在用Swift for TensorFlow一一核實這些特性。首先,其語法幾乎與Python一模一樣。有一個用於指令碼和筆記本的編譯器。最重要的是,它們能通過執行任意Python程式碼來幫助遷移,而且由於Swift現在是iOS應用開發的預設選項,因此部署到移動端非常容易。Swift的開放原始碼編譯器和靜態型別使得定位特定AI晶片組成為可能。

————— 推薦閱讀 —————

點選圖片即可閱讀

640?wx_fmt=png

640?wx_fmt=jpeg640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=gif

相關推薦

生成命令列介面--google開源的fire使用體驗【python-fire】

在python中,命令列介面常用的argparse 和click,但是相對於python-fire 來說靈活度太缺了,fire可以直接將python中的函式,以命令列顯示. 簡單的介紹幾個例子: #!/usr/bin/env python # -*- coding: utf-8

開源鉅獻:2017 年 Google 開源這些超讚的專案

春節小長假,走親訪友之餘,還可以利用一些零碎的時間收集學習資料,給自己充充電,好在 2018 年成為更優秀的自己。我們知道在開源和貢獻開源方面,Google 一直是行業的典範。2017 年它開源了哪些優秀的軟體,有哪些值得我們借鑑學習呢?讓我們一起來看下: D

為什麼 PythonGoogle選為TensorFlow的開發語言呢?使用 Python比C++語言進行機器學習有什麼優勢?

其實TensorFlow大部分核心並不是用Python編寫的 :它是高度優化了C++和CUDA(Nvidia用於程式設計GPU的語言)的組合。 相反,通常它是使用了Eigen (高效能C ++和CUDA庫)和NVidia的cuDNN (用於NVidia GPU的非常優化的D

2017 年 Google 開源這些超讚的專案

(點選上方公眾號,可快速關注)來源:開源中國編輯部my.oschina.net/editoria

Google 開源Python 命令列庫:初探 fire

作者:HelloGitHub-Prodesire HelloGitHub 的《講解開源專案》系列,專案地址:https://github.com/HelloGitHub-Team/Article 一、前言 在本系列前面所有文章中,我們分別介紹了 argparse、docopt 和 click 的主

Google 開源Python 命令列庫:深入 fire(一)

作者:HelloGitHub-Prodesire HelloGitHub 的《講解開源專案》系列,專案地址:https://github.com/HelloGitHub-Team/Article 一、前言 在第一篇“初探 fire”的文章中,我們初步掌握了使用 fire 的簡單步驟,瞭解了它 Py

Google 開源Python 命令列庫:深入 fire(二)

作者:HelloGitHub-Prodesire HelloGitHub 的《講解開源專案》系列,專案地址:https://github.com/HelloGitHub-Team/Article 一、前言 在上一篇文章中我們介紹了 fire 的子命令、巢狀命令和屬性訪問等內容,今天我們將繼續深入瞭

Google 開源Python 命令列庫:fire 實現 git 命令

作者:HelloGitHub-Prodesire HelloGitHub 的《講解開源專案》系列,專案地址:https://github.com/HelloGitHub-Team/Article 一、前言 在前面三篇介紹 fire 的文章中,我們全面瞭解了 fire 強大而不失簡潔的能力。按照慣例

微軟最強 Python 自動化工具開源!不用寫一行程式碼!

![image](https://upload-images.jianshu.io/upload_images/1466987-ef86c2640ba4508d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 1\. 前言 最近,微軟開源了一款

利用中文數據跑Google開源項目word2vec

訓練數據 ear most text 處理 spa csdn 增量 archive word2vec註釋 1、多線程並行處理: 1、分配內存空間,創建多線程,執行多線程。malloc,pthread_create,pthread_join 2、每個多線程處理的訓練

python入門——條件語句、for、while循環4

python while if一、if語句條件測試每條if語句的核心都是一條值為false或True的表達式,這種表達式稱為條件測試python根據條件測試的結果決是否執行後面的代碼;檢查是否相等>>> name = ‘Woon‘>>> name == ‘Woon‘True

tensorflow:Google】三、tensorflow入門

als 管理 神經網絡 等價 問題 sign ria init 節點 【一】計算圖模型 節點是計算,邊是數據流, a = tf.constant( [1., 2.] )定義的是節點,節點有屬性 a.graph 取得默認計算圖  g1 = tf.get_default_gr

1.1認識python(解)

範式 如果 android平臺 sum 是個 reduce 反饋 eos 文件引入 起源 Python的作者,Guido von Rossum,荷蘭人。1982年,Guido從阿姆斯特丹大學獲得了數學和計算機碩士學位。然而,盡管他算得上是一位數學家,但他更加享受計算機帶來的

Python流程控制中的 for、 while、frange循環和嵌套詞匯continue、brec

python 流程控制 循環 嵌套 本章 內容 含有 python的流程控制循環使用語法 For while 嵌套 語法 Contitune breck循環語法Python中 循環語法有 for 、 while他們都是實現 一個 同一個目的,當有一段程序,我希望反復執行的時候,就會用到

兄弟連學python-解html

結構 clas 文本文件 文本文 www. blank 文件 頁面滾動 超文本 HTML是什麽? http://www.w3school.com.cn/index.html HTML是 HyperText Mark-up Language 的首字母簡寫,意思是超文本標

Python-while循環和for循環

進行 enc http src com 機會 alt 需要 while循環 一、while循環 while循環必須要有一個計數器。滿足循環條件即執行循環體,直到條件不滿足,結束循環。while循環對應一個else的時候,循環在正常結束之後才會執行。 舉例:隨機生成一個數字,

python's seventh day for me

不改變 [1] mce list 調用 rem 元祖 int dai 數據類型的補充:     對於元祖: 如果只有一個元素,並且沒有逗號,此元素是什麽數據類型,該表達式就是什麽數據類型。 tu = (‘顧清秋‘) tul = (‘顧清秋‘,) print(type(t

python's eleventh day for me

war 什麽是 ret inner tar 緩存 url append 函數名 python2 中沒有nonlocal。 函數名是什麽?     函數名就是函數的名字, 本質:變量,特殊的變量。 1.單獨打印函數名: def func(): print(666)

python's sixth day for me 員工信息表

索引 無需 spl class 系統 pwd div 獲取 args import os user_dic = { ‘username‘:None, ‘password‘:None, ‘login‘:True } flag = False nam