摘要:是怎么處理形狀信息在構(gòu)建圖的時(shí)候,不可能嚴(yán)格執(zhí)行變量的形狀。形狀推斷問(wèn)題在圖中,將會(huì)傳播形狀的信息。以下情形是目前我們可以做到的當(dāng)調(diào)用時(shí),你可以直接把形狀信息傳遞給。例如你可以在圖的任何位置使用添加位置信息。
Theano是怎么處理形狀信息(Shape Information)
在構(gòu)建圖的時(shí)候,不可能嚴(yán)格執(zhí)行Theano變量的形狀。因?yàn)樵谶\(yùn)行的時(shí)候,傳遞給Theano函數(shù)的某一參數(shù)的值可能影響Thenao變量的形狀。目前,關(guān)于形狀信息的使用在Theano中有以下兩種方式:
在輸出形狀已知的情況下,生成在CPU和GPU上進(jìn)行2d卷積的更高效的C代碼
當(dāng)我們只關(guān)心變量的形狀,而不是實(shí)際值的時(shí)候,將移除圖的計(jì)算。這通過(guò)Op.infer_shape完成。
例子:
import theano import theano.tensor as T x = T.matrix("x") f = theano.function([x], (x ** 2).shape) theano.printing.debugprint(f) # MakeVector{dtype="int64"} [id A] "" 2 # |Shape_i{0} [id B] "" 1 # | |x [id C] # |Shape_i{1} [id D] "" 0 # |x [id C]
輸出結(jié)果不包含任何乘法以及冪運(yùn)算。Theano已經(jīng)移除了它們直接去計(jì)算輸出的形狀。
形狀推斷問(wèn)題(Shape Inference Problem)在圖中,Theano將會(huì)傳播形狀的信息。有時(shí),這將會(huì)導(dǎo)致一些錯(cuò)誤。考慮下面的例子:
import numpy import theano x = theano.tensor.matrix("x") y = theano.tensor.matrix("y") z = theano.tensor.join(0, x, y) # 將x,y按行拼接起來(lái),要求x,y的列數(shù)一致 xv = numpy.random.rand(5, 4) yv = numpy.random.rand(3, 3) f = theano.function([x, y], z.shape) theano.printing.debugprint(f) # MakeVector{dtype="int64"} [id A] "" 4 # |Elemwise{Add}[(0, 0)] [id B] "" 3 # | |Shape_i{0} [id C] "" 1 # | | |x [id D] # | |Shape_i{0} [id E] "" 2 # | |y [id F] # |Shape_i{1} [id G] "" 0 # |x [id D] f(xv, yv) # 并沒(méi)有報(bào)錯(cuò) # array([8, 4]) f = theano.function([x,y], z) # 直接返回z theano.printing.debugprint(f) # Join [id A] "" 0 # |TensorConstant{0} [id B] # |x [id C] # |y [id D] f(xv, yv) # 報(bào)錯(cuò) # Traceback (most recent call last): # ... # ValueError: ...
正如你看到的,當(dāng)僅僅訪問(wèn)計(jì)算結(jié)果的形狀信息(z.shape)時(shí),將會(huì)直接推斷結(jié)果的形狀,并不會(huì)執(zhí)行計(jì)算過(guò)程(即z的具體數(shù)值)。
這使得形狀的計(jì)算速度很快,但是它可能會(huì)隱藏一些錯(cuò)誤。在這個(gè)例子中,輸出結(jié)果形狀的計(jì)算僅僅基于輸入的第一個(gè)Theano變量,這導(dǎo)致返回形狀信息的錯(cuò)誤。
這種現(xiàn)象也可能出現(xiàn)在其他運(yùn)算上,比如elemwise和dot。事實(shí)上,為了執(zhí)行一些優(yōu)化(例如,速度和穩(wěn)定性),Theano從一開始就假定計(jì)算是正確的,并且是一致的。就像上述例子中一樣。
你可以通過(guò)使用Theano標(biāo)志optimizer_excluding=local_shape_to_shape_i運(yùn)行代碼(將不會(huì)執(zhí)行上述提及的優(yōu)化)來(lái)檢測(cè)這種錯(cuò)誤。你也可以通過(guò)在FAST_COMPILE或者DebugMode模式下執(zhí)行代碼,得到同樣的效果。
FAST_COMPILE模式將不會(huì)執(zhí)行這種優(yōu)化,以及大部分其它的優(yōu)化。
DebugMode模式將會(huì)在優(yōu)化前以及優(yōu)化后進(jìn)行測(cè)試,導(dǎo)致運(yùn)行速率更慢。
指定確切的形狀目前,指定一個(gè)形狀并不像我們計(jì)劃一些更新和期望的那么容易和靈活。以下情形是目前我們可以做到的:
當(dāng)調(diào)用conv2d時(shí),你可以直接把形狀信息傳遞給ConvOp。你只需要在調(diào)用時(shí)簡(jiǎn)單地設(shè)置一下image_shape和filter_shape參數(shù)就可以了。他們必須是包含4個(gè)元素的元組。例如:
theano.tensor.nnet.conv2d(..., image_shape=(7,3,5,5), filter_shape=(2,3,4,4))
你可以在圖的任何位置使用SpecifyShape添加位置信息。這允許執(zhí)行一些優(yōu)化。在接下來(lái)的例子中,這使得預(yù)先計(jì)算Theano函數(shù)為常數(shù)成為可能。
import theano x = theano.tensor.matrix() x_specify_shape = theano.tensor.specify_shape(x, (2,2)) f = theano.function([x], (x_specify_shape ** 2).shape) theano.printing.debugprint(f)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/38659.html
摘要:廣播廣播是這樣的一個(gè)機(jī)制它允許不同維度的張量進(jìn)行加法或者乘法運(yùn)算。如上圖,廣播一個(gè)行矩陣。和分別表示和指明沿著哪個(gè)維度可以進(jìn)行廣播。如果第二個(gè)參數(shù)是向量,它的形狀為,以及它的廣播模式為。當(dāng)可用的時(shí)候,廣播信息將會(huì)以變量的類型給出。 廣播(Broadcasting) 廣播是這樣的一個(gè)機(jī)制:它允許不同維度的張量進(jìn)行加法或者乘法運(yùn)算。在運(yùn)算時(shí),他將會(huì)沿著維度缺失的方向復(fù)制較小的那個(gè)張量。 通...
摘要:我認(rèn)為對(duì)機(jī)器學(xué)習(xí)開發(fā)者來(lái)說(shuō),是一個(gè)了不起的工具集。這個(gè)帖子發(fā)出后得到了很多機(jī)器學(xué)習(xí)研究者和開發(fā)者的關(guān)注,他們紛紛跟貼談?wù)撟约旱南敕ê徒?jīng)驗(yàn)不只是關(guān)于和,討論中還涉及到更多工具。 Theano、TensorFlow、Torch、MXNet 再到近日比較熱門的 PyTorch 等等,深度學(xué)習(xí)框架之間的比較一直以來(lái)都是非常受人關(guān)注的熱點(diǎn)話題。機(jī)器之心也曾發(fā)表過(guò)多篇相關(guān)的介紹和對(duì)比文章,如《主流深度學(xué)...
摘要:本篇博文主要是根據(jù)的那篇文章簡(jiǎn)單介紹下,然后通過(guò)個(gè)簡(jiǎn)單的實(shí)驗(yàn)來(lái)說(shuō)明實(shí)際編程中該怎樣應(yīng)用。當(dāng)然作者也從數(shù)學(xué)上給出了一定的解釋。自頂向下的生成模型觀點(diǎn)的解釋。信息論觀點(diǎn)的解釋。 前言: 當(dāng)采用無(wú)監(jiān)督的方法分層預(yù)訓(xùn)練深度網(wǎng)絡(luò)的權(quán)值時(shí),為了學(xué)習(xí)到較魯棒的特征,可以在網(wǎng)絡(luò)的可視層(即數(shù)據(jù)的輸入層)引入隨機(jī)噪聲,這種方法稱為Denoise Autoencoder(簡(jiǎn)稱dAE),由Bengio在08年...
摘要:機(jī)器學(xué)習(xí)中的矩陣公約水平方向?yàn)榫仃嚨男?,豎直方向?yàn)榫仃嚨牧校恳恍袨橐粋€(gè)樣例記錄。因此輸入表示由個(gè)樣例記錄,每個(gè)樣例具有個(gè)維度屬性組成的矩陣。如果為一個(gè)神經(jīng)網(wǎng)絡(luò)的輸入,那么權(quán)重矩陣的表示形式為的矩陣。 機(jī)器學(xué)習(xí)中的矩陣公約 水平方向?yàn)榫仃嚨男?,豎直方向?yàn)榫仃嚨牧?,每一行為一個(gè)樣例(記錄)。 因此輸入[10, 5]表示:由10個(gè)樣例(記錄),每個(gè)樣例具有5個(gè)維度(屬性)組成的矩陣。如果[...
摘要:深度學(xué)習(xí)通過(guò)組合低層特征形成更加抽象的高層表示屬性類別或特征,以發(fā)現(xiàn)數(shù)據(jù)的分布式特征表示。深度學(xué)習(xí)的概念由等人于年提出。但是自年以來(lái),機(jī)器學(xué)習(xí)領(lǐng)域,取得了突破性的進(jìn)展。 深度學(xué)習(xí)是機(jī)器學(xué)習(xí)研究中的一個(gè)新的領(lǐng)域,其動(dòng)機(jī)在于建立、模擬人腦進(jìn)行分析學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),它模仿人腦的機(jī)制來(lái)解釋數(shù)據(jù),例如圖像,聲音和文本。深度學(xué)習(xí)是無(wú)監(jiān)督學(xué)習(xí)的一種。 深度學(xué)習(xí)的概念源于人工神經(jīng)網(wǎng)絡(luò)的研究。含多隱層的多層感知...
閱讀 2443·2021-11-18 10:07
閱讀 2390·2021-09-22 15:59
閱讀 3149·2021-08-23 09:42
閱讀 2361·2019-08-30 15:44
閱讀 1251·2019-08-29 15:06
閱讀 2420·2019-08-29 13:27
閱讀 1289·2019-08-29 13:21
閱讀 1510·2019-08-29 13:13