我正在尝试将@tf.custom gradient
用于RNN中的一层,并遇到以下问题:
当我计算输出层中的损失相对于隐藏层中权重的梯度时,会得到梯度值,但是当我尝试计算隐藏层的输出相对于该层输入的梯度时或层中的状态(y=f(x)
并计算dy/dx
),我得到None
。
我正在使用tf.gradients
来计算梯度。我正在做第二部分,以查看是否正确实现了自定义渐变。
这是隐藏状态和输出的激活功能:
@tf.custom_gradient
def _calcualte_crossings(x):
"""input :x : a 2D tensor with batch x n
outputs a tensor with the same size as x
and values of 0 or 1 depending on comparison between
x and threshold"""
dtype=x.dtype
res=tf.greater_equal(x,0.0)
def grad(dy):
# calculate 1-|x|
temp=1-tf.abs(x)
dyres=tf.scalar_mul(0.3,tf.maximum(temp,0.0))
return dyres
return tf.cast(res,dtype=dtype), grad
系统信息