DeepMind開源Sonnet:可在TF中快速構建神經網路
選自DeepMind
作者:Malcolm Reynolds等
機器之心編譯
參與:李澤南、Ellen Han
昨天,DeepMind 發布了 Sonnet,一個在 TensorFlow 之上用於構建複雜神經網路的開源庫。這是繼 DeepMind Lab 後,這家谷歌旗下的公司的又一次開源舉措。Sonnet 的開源意味著 DeepMind 構建的模型可以更輕鬆地與所有開發者共享。
距 DeepMind 做出決定,在整個研究機構中使用 TensorFlow(TF) 已將近一年。事實證明這是一個明智的選擇——較之以往,我們很多模型的學習速度變得更快,而分布式訓練中的嵌入式特徵極大地簡化了我們的代碼。同時,我們發現 TensorFlow 的靈活性和自適應性使得為特定目的構建更高級的框架成為可能,DeepMind 內部已經開發了一個框架來用 TF 快速構建神經網路模塊。我們正積極開發的這個代碼庫以讓它更好地滿足我們的研究需求,今天我們很高興宣布今天它已開源化。我們把這個框架命名為 Sonnet。
自從 2015 年 11 月首次推出以來,圍繞 TensorFlow 出現了許多更高級的庫,使得很多常用任務得以更快實現。除了和現存的一些神經網路庫具有許多相似性外,Sonnet 還具有一些根據 DeepMind 的研究需求設計的特性。和我們 Learning to learn 論文一同發布的代碼是 Sonnet 的初級版本,其它即將發布的代碼則基於我們今天發布的完整庫而完成。
將 Sonnet 開源化使其它在 DeepMind 內創建的模型得以在社區中共享,我們也希望社區能使用 Sonnet 將他們的研究向前推進。在最近幾個月,我們也將自己的旗艦平台 DeepMind Lab 開源化了,並且正和暴雪一同工作來開發一個開源 API 以支持《星際爭霸 2》中的人工智慧研究。還有更多的發布版即將到來,並且它們將出現在我們新的開源頁面:
https://deepmind.com/research/open-source/
與 Torch/NN 類似,Sonnet 庫使用面向對象的方法,允許創建定義一些前向傳導計算的模塊。模塊用一些輸入 Tensor 調用,添加操作到圖裡並返回輸出 Tensor。其中一種設計選擇是通過在隨後調用相同的模塊時自動重用變數來確保變數分享被透明化處理。
在各類文獻中,很多模型都可以被視為分層形式,如可微分神經計算機可能包含 LSTM 控制器,可以實現為包含標準線性層。我們已經發現,編寫明確表示子模塊的代碼可以輕鬆實現代碼重用和快速實驗——Sonnet 可以在內部聲明其他子模塊的編寫模塊,或在構建時傳遞其他模塊。
我們發現最有意義的技術是允許某些模塊在任意嵌套的 Tensors 組中進行操作。循環神經網路的最佳表現形式通常是一些異構 Tensor 的集合,如果表示為一個平面列表則會容易出錯。Sonnet 提供了用於處理這些層次結構的實用工具,這樣在你需要更換另一種 RNN 的時候就不需要繁瑣的代碼更改了。我們已經對 TensorFlow 內核進行了更改,對這種用例增加了更多支持。
Sonnet 專為 TensorFlow 設計,因此它不會阻止你訪問 Tensor 和 variable_scope 這樣的底層細節。用 Sonnet 編寫的模型可以與原始 TensorFlow 代碼,及其他高級庫中的代碼自由融合。
Sonnet 的發布不是一次性的,我們將持續更新 Github 以使其符合 DeepMind 的內部版本。我們對目前 Sonnet 的功能還有很多想法,它們將陸續成為現實。我們非常感謝來自開源社區的貢獻。
GitHub 鏈接:https://github.com/deepmind/sonnet
安裝步驟
若想安裝 Sonnet,你需要使用 bazel 依靠 TensorFlow 頭文件對這個庫進行編譯。請按照指定步驟安裝 TensorFlow:
https://www.tensorflow.org/install/
該庫兼容 Linux/Mac OS X 和 Python 2.7。TensorFlow 的版本必須至少為 1.0.1。Sonnet 支持 TensorFlow 的 virtualenv 安裝模式,以及 nativ pip 安裝。
安裝 BAZEL
請確保你擁有最新版本的 bazel(至少為 0.4.5 版),如果版本過舊,請遵循以下步驟:
https://bazel.build/versions/master/docs/install.html
Virtualenv TensorFlow 安裝
如果你想使用 virtualenv,請在安裝時急活你的 virtualenv,或跳過此步驟:
$ source $VIRTUALENV_PATH/bin/activate # bash, sh, ksh, or zsh
$ source $VIRTUALENV_PATH/bin/activate.csh # csh or tcsh
配置 TensorFlow 頭文件
首先複製 Sonnet 和 TensorFlow 的源代碼作為一個子模塊:
$ git clone --recursive https://github.com/deepmind/sonnet
然後使用 configure:
$ cd sonnet/tensorflow
$ ./configure
$ cd ../
你可以在 TensorFlow 配置期間選擇建議的默認值。注意:這不會修改你現有的 TensorFlow 安裝。這一步是讓 Sonnet 構建於 TensorFlow 頭文件上的必要步驟。
構建和運行安裝程序
運行安裝腳本,在臨時目錄中創建一個 wheel file:
$ mkdir /tmp/sonnet
$ bazel build --config=opt :install
$ ./bazel-bin/install /tmp/sonnet
pip install 生成的 wheel file:
$ pip install /tmp/sonnet/*.whl
如果已安裝 Sonnet,卸載 wheel file 上之前的 pip install :
$ pip uninstall sonnet
你可以通過嘗試重採樣(resampler op)這樣的操作來驗證 Sonnet 是否安裝成功:
$ cd ~/
$ python>>> import sonnet as snt>>> import tensorflow as tf>>> snt.resampler(tf.constant([0.]), tf.constant([0.]))
預計的輸出應該是:
當然,如果引入了 ImportError,C++組件未找到時,請確保你沒有導入複製的源代碼(即在複製的資源庫外調用 Python),並在安裝 wheel file 前卸載 Sonnet。
※機器學習研究趨勢分析:TF已超越Caffe成研究最常用框架
※英偉達推出Titan Xp,首次支持Mac的Pascal顯卡
※OpenAI新研究發現無監督情感神經元:可調控生成文本的情感
※谷歌發布神經音頻合成器NSynth:專註於啟迪音樂創作
※ACL 2017接受了哪些論文?這份可視化分析讓你輕鬆看懂
TAG:機器之心 |
※DeepMind發布Sonnet 幫你用TensorFlow快速搭建神經網路
※DCOS中的容器網路與IP-per-container解決方案
※在Linux安裝GoogleTensorFlow神經網路軟體
※Imagination發PowerVR NNA神經網路加速器
※Apple Watch Series 3正式發布:終於加入了LTE網路支持
※Apple Watch Series 3終於加入了LTE網路支持
※從三大神經網路,測試對比TensorFlow、MXNet、CNTK、Theano四個框架
※Deep Learning 讀書分享:前饋神經網路
※Sprint和Verizon網路中斷 Twitter網友發文引關注
※Facebook開源 PyTorch版 fairseq,準確性最高、速度比循環神經網路快9倍
※VMware AppDefense將安全帶入虛擬化網路層
※Apple Watch Series 3蜂窩網路版開箱初體驗:功能OK,服務未完善
※巨人網路擬收購Alpha Frontier Limited全部股權
※使用 Linux tracepoints,perf以及eBPF跟蹤網路數據包的流程
※蘋果或在年內推LTE版Apple Watch,網路基帶由Intel提供
※Apple Watch Series 3蜂窩網路版拆解:內部與Series 2大致相同
※Silicon Labs Bluetooth網狀網路解決方案幫助IoT開發人員將產品上市時間縮短六個月
※MIT Nature Photonics新突破:實現光學深度神經網路系統
※蘋果承認 Apple Watch Series 3 LTE 版存在網路連線問題