成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Theano - theano如何處理形狀信息

muddyway / 1996人閱讀

摘要:是怎么處理形狀信息在構(gòu)建圖的時候,不可能嚴格執(zhí)行變量的形狀。形狀推斷問題在圖中,將會傳播形狀的信息。以下情形是目前我們可以做到的當調(diào)用時,你可以直接把形狀信息傳遞給。例如你可以在圖的任何位置使用添加位置信息。

Theano是怎么處理形狀信息(Shape Information)

在構(gòu)建圖的時候,不可能嚴格執(zhí)行Theano變量的形狀。因為在運行的時候,傳遞給Theano函數(shù)的某一參數(shù)的值可能影響Thenao變量的形狀。目前,關(guān)于形狀信息的使用在Theano中有以下兩種方式:

在輸出形狀已知的情況下,生成在CPU和GPU上進行2d卷積的更高效的C代碼

當我們只關(guān)心變量的形狀,而不是實際值的時候,將移除圖的計算。這通過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é)果不包含任何乘法以及冪運算。Theano已經(jīng)移除了它們直接去計算輸出的形狀。

形狀推斷問題(Shape Inference Problem)

在圖中,Theano將會傳播形狀的信息。有時,這將會導(dǎo)致一些錯誤??紤]下面的例子:

import numpy
import theano
x = theano.tensor.matrix("x")
y = theano.tensor.matrix("y")
z = theano.tensor.join(0, x, y)     # 將x,y按行拼接起來,要求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)       # 并沒有報錯
# 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)    # 報錯
# Traceback (most recent call last):
#   ...
# ValueError: ...

正如你看到的,當僅僅訪問計算結(jié)果的形狀信息(z.shape)時,將會直接推斷結(jié)果的形狀,并不會執(zhí)行計算過程(即z的具體數(shù)值)。

這使得形狀的計算速度很快,但是它可能會隱藏一些錯誤。在這個例子中,輸出結(jié)果形狀的計算僅僅基于輸入的第一個Theano變量,這導(dǎo)致返回形狀信息的錯誤。

這種現(xiàn)象也可能出現(xiàn)在其他運算上,比如elemwise和dot。事實上,為了執(zhí)行一些優(yōu)化(例如,速度和穩(wěn)定性),Theano從一開始就假定計算是正確的,并且是一致的。就像上述例子中一樣。
你可以通過使用Theano標志optimizer_excluding=local_shape_to_shape_i運行代碼(將不會執(zhí)行上述提及的優(yōu)化)來檢測這種錯誤。你也可以通過在FAST_COMPILE或者DebugMode模式下執(zhí)行代碼,得到同樣的效果。

FAST_COMPILE模式將不會執(zhí)行這種優(yōu)化,以及大部分其它的優(yōu)化。

DebugMode模式將會在優(yōu)化前以及優(yōu)化后進行測試,導(dǎo)致運行速率更慢。

指定確切的形狀

目前,指定一個形狀并不像我們計劃一些更新和期望的那么容易和靈活。以下情形是目前我們可以做到的:

當調(diào)用conv2d時,你可以直接把形狀信息傳遞給ConvOp。你只需要在調(diào)用時簡單地設(shè)置一下image_shape和filter_shape參數(shù)就可以了。他們必須是包含4個元素的元組。例如:

theano.tensor.nnet.conv2d(..., image_shape=(7,3,5,5), filter_shape=(2,3,4,4))

你可以在圖的任何位置使用SpecifyShape添加位置信息。這允許執(zhí)行一些優(yōu)化。在接下來的例子中,這使得預(yù)先計算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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38659.html

相關(guān)文章

  • Theano - 廣播(broadcasting)

    摘要:廣播廣播是這樣的一個機制它允許不同維度的張量進行加法或者乘法運算。如上圖,廣播一個行矩陣。和分別表示和指明沿著哪個維度可以進行廣播。如果第二個參數(shù)是向量,它的形狀為,以及它的廣播模式為。當可用的時候,廣播信息將會以變量的類型給出。 廣播(Broadcasting) 廣播是這樣的一個機制:它允許不同維度的張量進行加法或者乘法運算。在運算時,他將會沿著維度缺失的方向復(fù)制較小的那個張量。 通...

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

    摘要:我認為對機器學(xué)習(xí)開發(fā)者來說,是一個了不起的工具集。這個帖子發(fā)出后得到了很多機器學(xué)習(xí)研究者和開發(fā)者的關(guān)注,他們紛紛跟貼談?wù)撟约旱南敕ê徒?jīng)驗不只是關(guān)于和,討論中還涉及到更多工具。 Theano、TensorFlow、Torch、MXNet 再到近日比較熱門的 PyTorch 等等,深度學(xué)習(xí)框架之間的比較一直以來都是非常受人關(guān)注的熱點話題。機器之心也曾發(fā)表過多篇相關(guān)的介紹和對比文章,如《主流深度學(xué)...

    coordinate35 評論0 收藏0
  • Deep learning:四十二(Denoise Autoencoder簡單解)

    摘要:本篇博文主要是根據(jù)的那篇文章簡單介紹下,然后通過個簡單的實驗來說明實際編程中該怎樣應(yīng)用。當然作者也從數(shù)學(xué)上給出了一定的解釋。自頂向下的生成模型觀點的解釋。信息論觀點的解釋。 前言:   當采用無監(jiān)督的方法分層預(yù)訓(xùn)練深度網(wǎng)絡(luò)的權(quán)值時,為了學(xué)習(xí)到較魯棒的特征,可以在網(wǎng)絡(luò)的可視層(即數(shù)據(jù)的輸入層)引入隨機噪聲,這種方法稱為Denoise Autoencoder(簡稱dAE),由Bengio在08年...

    gotham 評論0 收藏0
  • Theano - Numpy 新手

    摘要:機器學(xué)習(xí)中的矩陣公約水平方向為矩陣的行,豎直方向為矩陣的列,每一行為一個樣例記錄。因此輸入表示由個樣例記錄,每個樣例具有個維度屬性組成的矩陣。如果為一個神經(jīng)網(wǎng)絡(luò)的輸入,那么權(quán)重矩陣的表示形式為的矩陣。 機器學(xué)習(xí)中的矩陣公約 水平方向為矩陣的行,豎直方向為矩陣的列,每一行為一個樣例(記錄)。 因此輸入[10, 5]表示:由10個樣例(記錄),每個樣例具有5個維度(屬性)組成的矩陣。如果[...

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

    摘要:深度學(xué)習(xí)通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發(fā)現(xiàn)數(shù)據(jù)的分布式特征表示。深度學(xué)習(xí)的概念由等人于年提出。但是自年以來,機器學(xué)習(xí)領(lǐng)域,取得了突破性的進展。 深度學(xué)習(xí)是機器學(xué)習(xí)研究中的一個新的領(lǐng)域,其動機在于建立、模擬人腦進行分析學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),它模仿人腦的機制來解釋數(shù)據(jù),例如圖像,聲音和文本。深度學(xué)習(xí)是無監(jiān)督學(xué)習(xí)的一種。 深度學(xué)習(xí)的概念源于人工神經(jīng)網(wǎng)絡(luò)的研究。含多隱層的多層感知...

    Riddler 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<