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处理后的值来求梯度。

  • 相关阅读:
    centos7安装nginx和php7启动脚本
    centos7 安装nginx遇到的坑
    php7.2 编译遇到的坑
    yum源更新
    redis
    nginx日志分割
    Docker部署LNMP完整教程
    浅谈JavaScript词法分析步骤
    PHP面向对象中的重要知识点(一)
    Mysql精华版(命令大全)
  • 原文地址:https://www.cnblogs.com/Jerry-home/p/10279809.html
Copyright © 2011-2022 走看看