Tensorflow 张量流:累积张量的梯度
TL;DR:您可以直接跳到下面黄色框中的问题 假设我有一个编码器-解码器神经网络,分别具有编码器和解码器的权重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),上述操作非常容易实
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最优训练、的异步网络训练和的批量调度结合起来