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的梯度反转