Ruo*_*ong 5 python class theano
我现在正在学习Theano库,我对Theano共享变量感到困惑.通过阅读教程,我想我不明白它的详细含义.以下是教程中Theano共享变量的定义:
"变量与存储在它出现的函数之间共享.这些变量是由注册的共享构造函数创建的."
另外,我想知道Theano共享变量是否可以是python类数据成员.例如:
class A(object):
data = None
...
Run Code Online (Sandbox Code Playgroud)
"数据"可以作为Theano共享变量进行初始化吗?如果有人能帮助我,我真的很感激.
Dan*_*haw 17
Theano共享变量的行为更像普通的Python变量.它们具有持久的显式值.相反,在执行编译的Theano函数之前,为符号变量赋予一个显式值.
符号变量可以被认为是表示单次执行持续时间的状态.另一方面,共享变量表示在Python引用的生命周期内保留在内存中的状态(通常类似于程序的生命周期).
共享变量通常用于存储/表示神经网络权重,因为我们希望这些值在Theano训练或测试函数的多次执行中保持不变.通常,Theano训练功能的目的是更新存储在共享变量中的权重.并且测试功能需要当前权重来执行网络的正向传递.
就Python而言,Theano变量(共享或符号)只是对象 - 在Theano库中定义的类的实例.所以,是的,对共享变量的引用可以存储在您自己的类中,就像任何其他Python对象一样.
共享变量有助于简化对预定义变量的操作。@ danien-renshaw的答案的示例,假设我们要添加两个矩阵,假设a和b,其中b矩阵的值在程序的整个生命周期内保持恒定,我们可以将b矩阵作为共享变量并执行所需的操作。
不使用共享变量的代码:
a = theano.tensor.matrix('a')
b = theano.tensor.matrix('b')
c = a + b
f = theano.function(inputs = [a, b], outputs = [c])
output = f([[1, 2, 3, 4]], [[5, 5, 6, 7]])
Run Code Online (Sandbox Code Playgroud)
使用共享变量的代码:
a = theano.tensor.matrix('a')
b = theano.tensor.shared( numpy.array([[5, 6, 7, 8]]))
c = a + b
f = theano.function(inputs = [a], outputs = [c])
output = f([[1, 2, 3, 4]])
Run Code Online (Sandbox Code Playgroud)