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