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