美文网首页
TensorFlow求导回传,导数为nan值

TensorFlow求导回传,导数为nan值

作者: 马小李23 | 来源:发表于2019-06-16 16:50 被阅读0次

一个深度学习的框架,在训练过程中发现,前向的运算部分没问题,但是求导回传后,就出现整个网络失效的问题(整个网络权重全部更新为0),检查了很久以后,找到一个容易被忽视的问题。
就现在很多模型中所用到的loss公式中大多数都是基本初等函数,这些基本初等函数中,存在一些定义域为R,但是其导数定义域不是R的,或者是函数定义域与其导数定义域不相同的。例如,我在应用中用到的求平方根的函数,该函数定义域为非负实数,但是该函数导数的定义域为正实数,这样导致了,一旦出现变量为0,那么其导数就为不可求的状态,进而导致了回传更新参数出错。
修改解决办法很简单,比如在求平方根函数的调用中加入很小的数,保证其可导,例如:

tf.sqrt(x+1e-20)

但是这样的解决只是一个trick的解决办法,与此同时,你需要关注的是,你代码计算出来的x,是否应该本身的值域就是x>0,那么这里出现0值,一定是前面计算存在问题;第二就是如果x的值域本身就包含0,那么有多大的概率会导致计算取0。这些都是通过上述折中的办法解决问题时,应该非常谨慎注意的问题。
与此同时,需要探讨的是TensorFlow框架实现的问题,为什么在导数出现错误的情况下,还允许训练继续,更新错误的权重,而不是抛出异常,这是值得探讨的问题。

相关文章

  • TensorFlow求导回传,导数为nan值

    一个深度学习的框架,在训练过程中发现,前向的运算部分没问题,但是求导回传后,就出现整个网络失效的问题(整个网络权重...

  • 机器学习之数学

    数学基础 1.导数和梯度 导数根据高中知识可以知道,如果想求一个函数的最小值,我们可以对函数求导,导数为0的点,是...

  • 函数极值问题

    函数有极值,就求导,然后令导数=0(因为此时切线平行X轴,斜率为0,而斜率就是导数)求出X值带入原函数求Y即可 从...

  • 导数与微分 1

    求y=xlnx的n阶导数 求y=sin²x的n阶导数 隐函数求导 参数方程求导

  • 高数 第二章 导数与微分

    一、导数的概念 1.导数的定义 2.导数的几何意义 二、函数的求导法则 1.基本导数公式 1.幂指函数求导法则:①...

  • 【推导】 (详细)多变量回归的最小二乘法 Mutiple Lin

    对误差(Err) 定义如下 改函数是一个凸函数, 而且存在最小值(误差为最小点), 所以可以通过求导数为 0 的点...

  • 深度学习应用到的数学知识

    导数 导数的定义 导数的基本求导法则传送门 梯度和Hessian矩阵 一阶导数和梯度(gradient vecto...

  • 1010

    /1010 一元多项式求导 (25)(25 分)//设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为...

  • 使用matplotlib画图查看极值

    求函数y=x^x的极值,通过求解二阶导数为(1)求导数f'(x);(2)求方程f'(x)=0的根;(3)检查f'(...

  • asp.net mvc 项目后台向页面传值

    一直想整理一下这个内容,今天终于有空(kun nan)了。 传值方式 强类型传值:ViewModel 弱类型传值:...

网友评论

      本文标题:TensorFlow求导回传,导数为nan值

      本文链接:https://www.haomeiwen.com/subject/ajpgfctx.html