摘要:昨日,研究人員開源工具包,并表示這個工具包可快速建立有效且可重復使用的學習系統,從而促進深度學習協同發展。支持機器學習與人工智能已經出現很多年,它們的大多研究進展已經被公用研究數據集和更強大的計算機所支持尤其是。
昨日,Facebook 研究人員開源 Torchnet 工具包,并表示這個工具包可快速建立有效且可重復使用的學習系統,從而促進深度學習協同發展。在發布的這篇 Blog 中,Facebook 的三位研究人員介紹了 Torchnet 的特性以及功用,并使用案例進行了詳細講解。
開源的 Torchnet 能夠幫助研究人員及開發者在 Torch 中建立快速且可重復使用的學習系統原型。在建立快速而簡潔的深度機器學習運算原型上,Torchnet 幫助我們向前邁進了一大步。它是使用 Torch 的一種新型軟件工具包,可以促進深度學習實驗的快速協同發展。
這周于紐約召開的國際機器學習大會(ICML)上我們介紹并開放了源碼的 Torchnet,提供包括樣板文件代碼,關鍵抽象化及實施參考的工具集合,能夠相互咬合或被拆解繼而重新使用,大大加快了該領域的發展。它促進了模塊化的程序設計方法,減少了異步使用簡化中的漏洞,實現了并行數據加載及高效 GPU 計算。
Facebook 發布的 Torchnet 論文
Torchnet 建立在 Torch 的成功之上,后者是一種通過在 CPU (OpenMP/SSE) 和 GPU (CUDA)上快速實現常見代數運算,從而建立深度學習模型的框架。
一個實驗框架
盡管 Torch 已經成為深度機器學習領域研究的主要框架之一,但它不提供機器學習實驗的抽象化代碼和樣板文件代碼。因此研究者們不得不反復從零開始編寫實驗代碼——犯同樣的錯并可能得出錯誤結論——完全拖慢了發展進度。我們創造Torchnet 就是為了提供給研究者們有關如何建立代碼的清晰指引,和能夠加快開發進度的樣板文件代碼。
模塊化 Torchnet 的設計簡化了對數據集,數據加載過程,模型,優化和性能指標等一系列變分編碼的測試過程。這使得快速試驗成為可能。例如在不同數據集上運行相同的實驗,和插入不同(bare-bones)數據裝載機一樣簡單,改變評價標準只需更改一行代碼來插入不同的性能表。Torchnet 的總體設計類似于 Legos,其模塊建立在一套能夠實現簡便咬合的協議之上。聯鎖塊制定了一個通用系統,保證組件能夠堅固地安裝在一起并可以輕易更換其他組件。我們還開發了有關如何建立新組件的清晰指引。
開源 Torch 已經擁有了一個活躍的開發者社區,他們創建了優化包,流形學習,度量學習與神經網絡等。在此基礎上建立的 Torchnet 作為一個服務平臺,主要通過執行機器學習實驗或工具的插件,供研究者共享成果。
GPU支持
機器學習與人工智能已經出現很多年,它們的大多研究進展已經被公用研究數據集和更強大的計算機所支持——尤其是 GPUs。
Torchnet 與諸如 Caffe, Chainer, TensorFlow 和 Theano 的深度學習框架基本上是不同的,它不關注深度網絡中的有效推論執行和梯度計算,而是提供一個位于深度學習框架之上的框架(也即 torch/nn),從而方便快速試驗。Torchnet 提供一組子集包并執行五種主要類型的抽象化:
數據集——提供返回數據集中樣本數的 size 函數,及一個返回到數據集中 idx-th 樣本的 get(idx)函數。
數據集迭代器——從 1 到數據集尺寸的簡單 for 循環,并調用 get() 函數的循環值作為輸入。
引擎——提供訓練和測試模型所必需的標準邏輯。
計量儀——用作性能測量,比如一次訓練的運行時間或所有樣本的平均損失函數值。
日志——用來記錄實驗。
最重要的子集包負責與機器學習問題有關的樣板文件代碼的實現。它們包括計算機視覺,自然語言處理和語音處理。
其他子集包或許體量更小,關注的是更明確的問題甚至數據集。比如像 Imagenet 和 COCO 這樣的視覺數據集,TIMIT 和 LibriSpeech ?這種語音數據集,以及類似 One Billion Word Benchmark 和 WMT-14 的文本數據集。
案例
這一節我將展示一個簡單而基礎的、運用Torchnet在MNIST上訓練邏輯回歸的例子。首先是必要的依賴代碼:
require ’nn’local tnt ? = require ’torchnet’local mnist = require ’mnist’
接著我們定義一個在 MNIST 訓練集或測試集上構造異步數據集迭代器的函數。這個數據集迭代器接收一個用來構建 Torchnet 數據集對象的閉包(closure)作為輸入。這里的數據集是從包含圖像和目標的張量中,僅返回相關行的一個ListDataset;其實你也可以用自己的數據集定義來替換這個 ListDataset。核心數據集會被裝進一個 BatchDataset 中用以構建 128 大小的 mini-batches。
local function getIterator(mode)
? return tnt.ParallelDatasetIterator{
? ? nthread = 1,
? ? init ? ?= function() require "torchnet" end,
? ? closure = function()
? ? ? local dataset = mnist[mode .. "dataset"]()
? ? ? return tnt.BatchDataset{
? ? ? ? ?batchsize = 128,
? ? ? ? ?dataset = tnt.ListDataset{
? ? ? ? ? ?list = torch.range(
? ? ? ? ? ? ?1, dataset.data:size(1)
? ? ? ? ? ?),?
? ? ? ? ? ?load = function(idx)
? ? ? ? ? ? ?return {
? ? ? ? ? ? ? ?input ?= dataset.data[idx],
? ? ? ? ? ? ? ?target = torch.LongTensor{
? ? ? ? ? ? ? ? ?dataset.label[idx]
? ? ? ? ? ? ? ?},
? ? ? ? ? ? ?} -- sample contains input and target
? ? ? ? ? ?end,
? ? ? ? }
? ? ? }
? ? end,
? }end
隨后,建立一個簡單的線性模型:
local net = nn.Sequential():add(nn.Linear(784,10))
接下來,我們初始化 Torchnet 引擎并執行重置,更新,打印平均損失和平均分類錯誤的掛鉤。在訓練標準中調用forward() 之后,再調用這個更新平均損失和平均分類錯誤的掛鉤:
local engine = tnt.SGDEngine()local meter ?= tnt.AverageValueMeter()local clerr ?= tnt.ClassErrorMeter{topk = {1}}
engine.hooks.onStartEpoch = function(state)
? meter:reset()
? clerr:reset()end
engine.hooks.onForwardCriterion = function(state)
? meter:add(state.criterion.output)
? clerr:add(
? ? state.network.output, state.sample.target)
? print(string.format(
? ? "avg. loss: %2.4f; avg. error: %2.4f",
? ? meter:value(), clerr:value{k = 1}))end
然后,最小化使用 SGD 的邏輯損失:
local criterion = nn.CrossEntropyCriterion()
engine:train{
? network ? = net,
? iterator ?= getIterator("train"),
? criterion = criterion,
? lr ? ? ? ?= 0.1,
? maxepoch ?= 10,}
訓練完畢后,我們在測試集上測量平均損失和平均分類錯誤:
engine:test{
? network ? = net,
? iterator ?= getIterator(’test’),
? criterion = criterion,}
更高級的例子可能會在引擎中實行額外的掛鉤。比如你想在每個訓練期后測量試驗誤差,就需要 EndEpoch 掛鉤。運行GPU 做同一個案例,則需增加一些簡單代碼——這里尤其注意把模型和數據備份到 GPU 中。可通過在樣本可用后執行一個掛鉤的方式將數據樣本復制到 GPU3 的緩沖區。
require "cunn"
net ? ? ? = net:cuda()
criterion = criterion:cuda()local input ?= torch.CudaTensor()local target = torch.CudaTensor()
engine.hooks.onSample = function(state)
? input:resize(?
? ? ? state.sample.input:size()
? ):copy(state.sample.input)
? target:resize(
? ? ? state.sample.target:size()
? ):copy(state.sample.target)
? state.sample.input ?= input
? state.sample.target = targetend
協同智能
開源 Torchnet 的目的是授權開發者社區,快速建立有效且可重復使用的學習系統。原型能夠更快咬合,實驗便可蓬勃發展。成功的實現方案將更容易復制,漏洞也會隨之減少。
我們希望 Torchnet 能開辟出 Torch 社區的協同智能,從而一起創造更高效的深度學習實驗。
歡迎加入本站公開興趣群商業智能與數據分析群
興趣范圍包括各種讓數據產生價值的辦法,實際應用案例分享與討論,分析工具,ETL工具,數據倉庫,數據挖掘工具,報表系統等全方位知識
QQ群:81035754
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/4354.html
摘要:這一新程序被稱為,是一個完整的深度學習系統,它的架構已經嵌入手機中。因此,移動設備環境對機器學習系統提出了機遇和挑戰。展望下一步,加上這樣的研究工具鏈,是的機器學習產品的核心。 風格遷移一直是機器學習領域內的一項重要任務,很多研究機構和研究者都在努力打造速度更快、計算成本更低的風格遷移機器學習系統,比如《怎么讓你的照片帶上藝術大師風格?李飛飛團隊開源快速神經網絡風格遷移代碼 》、《谷歌增強型...
摘要:近日它們交鋒的戰場就是動態計算圖,誰能在這場戰爭中取得優勢,誰就把握住了未來用戶的流向。所以動態框架對虛擬計算圖的構建速度有較高的要求。動態計算圖問題之一的多結構輸入問題的高效計 隨著深度學習的發展,深度學習框架之間競爭也日益激烈,新老框架紛紛各顯神通,想要在廣大DeepLearner的服務器上占據一席之地。近日它們交鋒的戰場就是動態計算圖,誰能在這場戰爭中取得優勢,誰就把握住了未來用戶的流...
摘要:近日,與微軟聯合推出了開放式神經網絡交換格式,它是一個表征深度學習模型的標準,可實現模型在不同框架之間的遷移。例如,在中,條件句通常是對輸入張量的大小或維度上的計算。 近日,Facebook 與微軟聯合推出了開放式神經網絡交換(ONNX)格式,它是一個表征深度學習模型的標準,可實現模型在不同框架之間的遷移。ONNX 是構建開源生態環境的第一步,供人工智能開發者輕松選擇并組合較先進的工具。開發...
摘要:下圖總結了絕大多數上的開源深度學習框架項目,根據項目在的數量來評級,數據采集于年月初。然而,近期宣布將轉向作為其推薦深度學習框架因為它支持移動設備開發。該框架可以出色完成圖像識別,欺詐檢測和自然語言處理任務。 很多神經網絡框架已開源多年,支持機器學習和人工智能的專有解決方案也有很多。多年以來,開發人員在Github上發布了一系列的可以支持圖像、手寫字、視頻、語音識別、自然語言處理、物體檢測的...
摘要:日前,公司宣布推出其分布式深度學習軟件的測試版,該軟件證明了在深度學習表現出來的技術飛躍。系統加速和內存總監在一篇博文中表示更受歡迎的深度學習框架擴展到服務器中的多個,而不是擴展到具有的多個服務器。 日前,IBM 公司宣布推出其分布式深度學習軟件的測試版,該軟件證明了在深度學習表現出來的技術飛躍。深度學習是人工智能的一種形式,它依賴于人工神經網絡的應用。其重點是讓計算機能夠像人們那樣理解數字...
閱讀 992·2021-11-15 18:06
閱讀 2361·2021-10-08 10:04
閱讀 2647·2019-08-28 18:03
閱讀 891·2019-08-26 13:42
閱讀 1913·2019-08-26 11:31
閱讀 2416·2019-08-23 17:13
閱讀 915·2019-08-23 16:45
閱讀 2048·2019-08-23 14:11