Python 上的 Theano 共享变量

Theano Shared Variables on Python

我现在正在学习Theano库,我只是对Theano共享变量感到困惑。通过阅读教程,我认为我没有理解它的详细含义。以下是教程中 Theano 共享变量的定义:

"Variable with Storage that is shared between functions that it appears in. These variables are meant to be created by registered shared constructors."

此外,我想知道 Theano 共享变量是否可以是 python class 数据成员。例如:

class A(object):   
    data = None
    ...

"data" 可以作为 Theano Shared 变量初始化吗?如果有人能帮助我,我真的很感激。

Theano 共享变量的行为更像普通的 Python 变量。它们具有持久的明确价值。相比之下,符号变量只有在执行编译的 Theano 函数时才被赋值。

符号变量可以被认为是表示单次执行期间的状态。另一方面,共享变量表示在 Python 引用的生命周期(通常类似于程序的生命周期)内保留在内存中的状态。

共享变量通常用于 store/represent 神经网络权重,因为我们希望这些值在 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]])

使用共享变量的代码:

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]])