2016-01-07 64 views
3

假設我有一個Theano符號x並運行以下代碼。是否有身份識別功能?

x.name = "x" 
y = x 
y.name = "y" 

當然x.name的是那麼"y"有沒有一個身份識別功能,可以讓我做下面的事情?

x.name = "x" 
y = T.identity(x) 
y.name = "y" 

預期的行爲是y現在看到是x功能,並且它們都正確命名。當然Theano編譯器會簡單地合併這些符號,因爲y只是x

的原因,我問這個是因爲我有像以下,其中filterfeature是Theano符號和nonlinear或者是TrueFalse的情況。

activation = T.dot(feature, filter) 
activation.name = "activation" 
response = T.nnet.sigmoid(activation) if nonlinear else activation 
response.name = "response" 

的問題是,在nonlinearFalse的情況下,我activation符號將被命名爲"response"

我可以解決該問題的解決這個問題:

activation = T.dot(feature, filter) 
activation.name = "activation" 
if nonlinear: 
    response = T.nnet.sigmoid(activation) 
    response.name = "response" 
else: 
    response = activation 
    response.name = "activation&response" 

但身份的功能會更優雅:

activation = T.dot(feature, filter) 
activation.name = "activation" 
response = T.nnet.sigmoid(activation) if nonlinear else T.identity(activation) 
response.name = "response" 
+0

我不熟悉Theano,但將deepcopy的幫助? –

+1

@JayanthKoushik不,Theano符號是符號數學表達式,而不是常規的Python數據。 –

回答

3

上張量的copy(name=None) function是你想要的。

第一個例子變成這樣:

x.name = "x" 
y = x.copy("y") 

第二個例子變成這樣:

activation = T.dot(feature, filter) 
activation.name = "activation" 
response = T.nnet.sigmoid(activation) if nonlinear else activation.copy() 
response.name = "response" 
相關問題