Function theano函数的更新顺序';更新列表

Function theano函数的更新顺序';更新列表,function,updates,theano,Function,Updates,Theano,Theano函数的参数更新采用一个pair列表,其中每个pair在计算函数输出后指定一个共享符号变量及其新表达式。 我想知道是否有更新程序的命令。 如果两个符号变量的新表达式相互依赖,则顺序很重要,更新过程将使用更新的符号变量更新依赖它的其他符号变量。 例如,此列表可能如下所示 [(a,b+a),(b,b+1)] 我已经编写了一些函数来测试这一点。结果似乎表明,它总是使用表达式中的旧值(对中的第二项)来更新第一项中的符号变量,即 a_new=b_old+a_old b_新=b_旧+1 这是一

Theano函数的参数更新采用一个pair列表,其中每个pair在计算函数输出后指定一个共享符号变量及其新表达式。 我想知道是否有更新程序的命令。 如果两个符号变量的新表达式相互依赖,则顺序很重要,更新过程将使用更新的符号变量更新依赖它的其他符号变量。 例如,此列表可能如下所示

[(a,b+a),(b,b+1)]
我已经编写了一些函数来测试这一点。结果似乎表明,它总是使用表达式中的旧值(对中的第二项)来更新第一项中的符号变量,即

a_new=b_old+a_old
b_新=b_旧+1
这是一种明确的行为吗

但是我发现执行的势头,, 以下是生成更新列表和参数更新符号变量的代码

param_update=theano.shared(param.get_value()*0.,broadcastable=param.broadcastable)
更新+=[(参数,参数-学习率*参数更新),
(参数更新,动量*参数更新+(1.-动量)*T.grad(成本,参数))

然后在第一次迭代中,参数将不会被更新,因为参数更新都是零。据我所知,参数更新应该首先更新,然后用它来更新参数。

对于更新,它总是使用以前的值(Theano函数调用之前的值)。所以你找到了正确的方法


对于动量,我认为存在延迟是正常的。

我对延迟感到困惑。对于内斯特罗夫动量,我认为应该使用当前的力矩速度来更新权重:v(t)=mu x v(t-1)-eta x梯度(t-1),然后w(t)=w(t-1)+mu x vt-eta x梯度(t-1)。所以我假设更新应该应用一个顺序操作?您可以假设所有操作都分3步完成。首先读取所有共享变量。然后完成所有计算。然后完成所有写入。共享变量是否保留以前的值,您计算共享变量X的当前值,并需要共享变量的当前值对于其他计算,应使用表示当前x的非共享变量。