Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 张量流:累积张量的梯度_Tensorflow_Machine Learning_Neural Network_Deep Learning - Fatal编程技术网

Tensorflow 张量流:累积张量的梯度

Tensorflow 张量流:累积张量的梯度,tensorflow,machine-learning,neural-network,deep-learning,Tensorflow,Machine Learning,Neural Network,Deep Learning,TL;DR:您可以直接跳到下面黄色框中的问题 假设我有一个编码器-解码器神经网络,分别具有编码器和解码器的权重W_1和W_2。让我们将Z表示为编码器的输出。使用批次大小n对网络进行训练,并根据批次的平均损失值计算所有梯度(如下图所示,L_hat是每个样本损失的总和L) 我试图实现的是,在向后传递中,在进一步传递到编码器的权重之前,操纵Z的梯度。假设是一个经过某种修改的渐变操作符,对于该操作符,以下内容适用: 在同步过程的情况下(首先计算Z的修改梯度,然后向下传播到W_1),上述操作非常容易实

TL;DR:您可以直接跳到下面黄色框中的问题

假设我有一个编码器-解码器神经网络,分别具有编码器和解码器的权重
W_1
W_2
。让我们将
Z
表示为编码器的输出。使用批次大小
n
对网络进行训练,并根据批次的平均损失值计算所有梯度(如下图所示,
L_hat
是每个样本损失的总和
L

我试图实现的是,在向后传递中,在进一步传递到编码器的权重之前,操纵
Z
的梯度。假设是一个经过某种修改的渐变操作符,对于该操作符,以下内容适用:

在同步过程的情况下(首先计算
Z
的修改梯度,然后向下传播到
W_1
),上述操作非常容易实现(乘法使用的是
grad_ys
):

def modify_grad(grad_z):
#做一些修改
梯度z=tf.梯度(L_hat,z)
mod_grad_z=修改_grad(grad_z)
mod_grad_w1=tf.梯度(Z,W_1,mod_grad_Z)
问题是,我需要在几个批次中累积张量
z
的梯度。由于它的形状是动态的(如上图所示,其中一个维度中的
None
),因此我无法定义存储它的方法。此外,批次大小
n
可能在培训期间发生变化。如何在多个批次中存储
grad_z
的平均值

PS:我只想将的pareto最优训练、的异步网络训练和的批量调度结合起来