tensorflow中的梯度反转

博客介绍了自定义梯度运算的方法,如用@ops.RegisterGradient修饰函数实现梯度取反,gradient_override_map函数可解决自定义函数求梯度问题,其参数为字典,用value函数替代key函数进行梯度运算,最后得出Pytorch使用更方便的结论。
部署运行你感兴趣的模型镜像

原文地址:https://codeleading.com/article/27004717987/

import tensorflow as tf
from tensorflow.python.framework import ops
 
 
class FlipGradientBuilder(object):
    def __init__(self):
        self.num_calls = 0
 
 
 
    def __call__(self, x, l=1.0):
        grad_name = "FlipGradient%d" % self.num_calls
        @ops.RegisterGradient(grad_name)
        def _flip_gradients(op, grad):
            return [tf.negative(grad) * l]
 
        g = tf.get_default_graph()
        with g.gradient_override_map({"Identity": grad_name}):
            y = tf.identity(x)
        self.num_calls += 1
 
        return y
    
flip_gradient = FlipGradientBuilder()

其中
(1)@ops.RegisterGradient(grad_name)修饰 _flip_gradients(op, grad)函数,即自定义该层的梯度取反

(2)gradient_override_map函数主要用于解决使用自己定义的函数方式来求梯度的问题,gradient_override_map函数的参数值为一个字典。其表示的意思是:字典中value表示使用该值表示的函数代替key表示的函数进行梯度运算。

结论
还是pytorch使用方便

附,红色字体使用方法:
<font color=red size=4>还是pytorch使用方便</font>

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值