我注意到您可以通过以下方式定义theano共享变量:
theano.shared(value, name=None, strict=False, allow_downcast=None, **kwargs)
在theano doc here中,它表示名称字段是"此变量的名称"。我发现在大多数情况下,人们只需将完全相同的字符串传递给名称字段作为Python中的共享变量名称。例如:
a = theano.shared(1, "a")
定义名称字段的经验法则是什么?用于什么名称字段?
答案 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黑客攻击,并不适合所有情况。