2015-06-30 36 views
3

我現在正在學習Theano庫,我只是對Theano共享變量感到困惑。通過閱讀教程,我想我不明白它的具體含義。以下是本教程中Theano共享變量的定義:Python上的Theano共享變量

「存儲變量,它在顯示的函數之間共享。這些變量是由註冊的共享構造函數創建的。」

此外,我想知道如果Theano共享變量可以是一個Python類數據成員。例如:

class A(object): 
    data = None 
    ... 

能「數據」被或初始化爲Theano共享變量?如果有人能幫助我,我真的很感激。

回答

13

Theano共享變量的行爲更像普通的Python變量。他們有一個持久的明確價值。相比之下,只有在執行編譯的Theano函數時才賦予符號變量明確的值。

符號變量可以被認爲是單次執行期間的代表狀態。另一方面,共享變量表示在Python參考的生命週期中保留在內存中的狀態(通常類似於程序的生命週期)。

共享變量通常用於存儲/表示神經網絡權重,因爲我們希望這些值在許多執行Theano訓練或測試功能時保持不變。通常,Theano訓練功能的目的是更新存儲在共享變量中的權重。測試功能需要當前權重才能執行網絡的正向傳遞。

就Python而言,Theano變量(共享或符號)只是對象 - 在Theano庫中定義的類的實例。所以,是的,對共享變量的引用可以存儲在自己的類中,就像任何其他Python對象一樣。

+0

這是非常有幫助!謝謝!!! –

+0

@Daniel,這是否意味着theano共享變量相當於tensorflow變量,theano變量相當於tensorflow佔位符? – Sangram

+0

@Sangram是的,Theano TensorVariable等價於TensorFlow佔位符和Theano SharedVariable等價於TensorFlow變量。 –

3

共享變量有助於簡化對預定義變量的操作。以@ danien-renshaw的答案爲例,假設我們要添加兩個矩陣,比如說a和b,其中b矩陣的值在程序的整個生命週期中保持不變,我們可以將b矩陣作爲共享變量並執行所需的操作。

代碼,而無需使用共享變量:

a = theano.tensor.matrix('a') 
b = theano.tensor.matrix('b') 
c = a + b 
f = theano.function(inputs = [a, b], outputs = [c]) 
output = f([[1, 2, 3, 4]], [[5, 5, 6, 7]]) 

代碼中使用共享變量:

a = theano.tensor.matrix('a') 
b = theano.tensor.shared(numpy.array([[5, 6, 7, 8]])) 
c = a + b 
f = theano.function(inputs = [a], outputs = [c]) 
output = f([[1, 2, 3, 4]])