2015-06-03 90 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

相关问题