zoukankan      html  css  js  c++  java
  • 对于tensorflow中的gradient_override_map函数的理解

        # #############添加##############
        def binarize(self, x):
            """
            Clip and binarize tensor using the straight through estimator (STE) for the gradient.
            """
            g = tf.get_default_graph()
    
            with ops.name_scope("Binarized") as name:
                # x=tf.clip_by_value(x,-1,1)
                ###当网络正向传播时,返回的是tf.sign(x),当反向求梯度时,用Identity代替了Sign函数,Identity一般可以认为等于。即直接用x来求梯度。
                with g.gradient_override_map({"Cast": "Identity"}):
                    return tf.sign(x)#############结束##############

    正如我在代码中注释的一样,gradient_override_map函数主要用于解决使用自己定义的函数方式来求梯度的问题,特别是在深度学习的二值化,无法对符号函数进行求导,需要使用straight through estimator (STE)求导。 gradient_override_map函数的参数值为一个字典。其表示的意思是:字典中value表示使用该值表示的函数代替key表示的函数进行梯度运算。例如例子中,在求梯度时,使用tf.identity函数代替tf.sign函数。即使用identity处理后的值来求梯度。

  • 相关阅读:
    效能分析
    个人项目词频统计2
    PSP 进度条 柱状图 饼状图
    四人小组项目
    结对编程
    品评历届学生作品
    构建之法终于到手了
    补上周一的进度条进度条:
    燃尽图
    scrum站立会议
  • 原文地址:https://www.cnblogs.com/Jerry-home/p/10279809.html
Copyright © 2011-2022 走看看