域对抗学习中的梯度反转tensorflow实现

本文介绍了如何在TensorFlow中通过两种不同的方法实现域对抗学习中的梯度反转技术。实验结果显示,加入梯度反转后,模型权重的更新方向发生了显著变化。并提供了相关参考文献链接。
摘要由CSDN通过智能技术生成

在参考了百度上的两篇博客后, 一共用这两种方式实现了梯度反转

1. 版本一:

import tensorflow as tf
from tensorflow import keras as K

# 梯度反转:版本1, 通过手动计算个部分的梯度, 然后手动修改实现

# x = tf.placeholder(dtype=tf.float32, shape=(1, 1))  # 不知道为什么, 报错了, 说没有喂入一个shape=[1, 1], dtype=float的值
x = tf.constant([[1.]], dtype=tf.float32)
df = K.layers.Dense(1, use_bias=False, kernel_initializer=K.initializers.constant([[1.]]))
f = df(x)

dl = K.layers.Dense(1, use_bias=False, kernel_initializer=K.initializers.constant([[10.]]))
l = dl(f)

dy = K.layers.Dense(1, use_bias=False, kernel_initializer=K.initializers.constant([[2.]]))
y = dy(f)

opt = tf.train.GradientDescentOptimizer(0.1)

loss1 = y
loss2 = l

# 计算标签分类器loss1对df(特征dense层参数)和dy(标签分类器desne层参数)的梯度
y_g = opt.compute_gradients(loss1, [df.trainable_variables, dy.trainable_variables], gate_gradients=2)
# 计算域分类器loss2对dl(与分类器dense层参数)的梯度
l_dl_g = opt.compute_gradients(loss2, [dl
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值