什么是'名称'用于定义theano共享变量的字段?

时间:2015-06-03 22:52:52

标签: python theano

我注意到您可以通过以下方式定义theano共享变量:

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

在theano doc here中,它表示名称字段是"此变量的名称"。我发现在大多数情况下,人们只需将完全相同的字符串传递给名称字段作为Python中的共享变量名称。例如:

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

定义名称字段的经验法则是什么?用于什么名称字段?

1 个答案:

答案 0 :(得分: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黑客攻击,并不适合所有情况。