tf1.x实现张量的梯度反转
tensorflow实现梯度反转的方法有两种:
利用@tf.custom_gradient
重写梯度函数
1 | import tensorflow as tf |
巧用stop_gradient
函数
以实现DANN为例,特征提取器记作F
,域分类器记作D
,那么F
梯度反转的实现如下:1
2feat = F(x)
loss = -D(F(x)) + 2*D(stop_gradient(F(x)))
- 在前向传播的过程中,
stop_gradient
不起作用,那么loss = D(stop_gradient(F(x)))
- 在反向传播的过程中,
stop_gradient
起作用,那么2*stop_gradient(F(x)
梯度为0,梯度计算就是2D-D-F=D-F
,就实现了F
的梯度反转