2015-06-03 28 views
2

我注意到,您可以通過定義一個theano共享變量:在theano共享變量的定義中使用的'name'字段是什麼?

theano.shared(value, name=None, strict=False, allow_downcast=None, **kwargs) 

在theano文檔here,它說的名字字段是「該變量的名稱」。我發現在大多數情況下,人們只是將一個完全相同的字符串作爲Python中的共享變量名稱傳遞給名稱字段。例如:

a = theano.shared(1, "a") 

什麼是經驗法則來定義名稱字段?什麼是名稱字段用於?

回答

0

將名稱分配給Theano對象有助於調試。例如,theano.printing.debugprint將在其輸出中包含名稱(如果存在);這可以使得更容易理解複雜的計算圖。

你也可以給名稱輸入變量(例如x=theano.tensor.scalar('x'))和功能(例如,f=theano.function(inputs, outputs, name='f')

theano.printing.debugprint輸出可以通過命名節點,其內容你不需要看到和使​​用stop_on_name參數限制在同步

保持Python的名稱和Theano名可以是乏味且容易出錯在某些情況下,你可能會想用的功能,如:

def name_node(variable, variable_names): 
    for name, query_variable in variable_names.iteritems(): 
     if query_variable is variable: 
      variable.name = name 

    return variable 


def name_nodes(variables, variable_names): 
    if not isinstance(variables, (tuple, list)): 
     return name_node(variables, variable_names) 

    for variable in variables: 
     for name, query_variable in variable_names.iteritems(): 
      if query_variable is variable: 
       variable.name = name 

    return variables 

在一個象徵性的功能,您可以用這些像這樣:

def create_graph(w_filename): 
    x = T.scalar() 
    w = theano.shared(numpy.load(w_filename)) 
    y = T.tanh(theano.dot(x, w)) 
    return name_nodes([x, w, y], locals()) 

這是一個有點Python的黑客攻擊,並不會適用於所有情況。

+0

你可以給一個簡單的例子,使用名稱是非常有用的嗎?謝謝 – hunch

相關問題