亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Theano - theano如何處理形狀信息

muddyway / 2037人閱讀

摘要:是怎么處理形狀信息在構(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

相關(guān)文章

  • Theano - 廣播(broadcasting)

    摘要:廣播廣播是這樣的一個(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è)張量。 通...

    whjin 評(píng)論0 收藏0
  • PyTorch和TensorFlow到底哪個(gè)更好?看看一線開發(fā)者怎么說(shuō)

    摘要:我認(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é)...

    coordinate35 評(píng)論0 收藏0
  • Deep learning:四十二(Denoise Autoencoder簡(jiǎn)單解)

    摘要:本篇博文主要是根據(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年...

    gotham 評(píng)論0 收藏0
  • Theano - Numpy 新手

    摘要:機(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è)維度(屬性)組成的矩陣。如果[...

    wangxinarhat 評(píng)論0 收藏0
  • Deep Learning深度學(xué)習(xí)相關(guān)入門文章匯摘

    摘要:深度學(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ò)的研究。含多隱層的多層感知...

    Riddler 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<