首页 » Python » 【问题】【KERAS】【Tensorflow】关于tensorflow中的梯度为None的问

【问题】【KERAS】【Tensorflow】关于tensorflow中的梯度为None的问

原文 http://blog.csdn.net/Laox1ao/article/details/79053808

2018-01-14 02:00:39阅读(250)

错误
ValueError: None values not supported.
错误原因

往前追溯Traceback

/Users/laox1ao/anaconda/lib/python2.7/site-packages/KERAS/engine/training.pyc in _make_train_function(self)
    988                     training_updates = self.optimizer.get_updates(
    989                         params=self._collected_trainable_weights,
--> 990                         loss=self.total_loss)
    991                 updates = self.updates + training_updates
    992                 # Gets loss and metrics. Updates weights at each call.

是由于网络存在ops的梯度为None,导致图的梯度流断裂(disconnected),检查发现是keras.backend.switch操作在以tensorflow为backend的情况下无法计算梯度,tf.gradients()返回结果为None。

解决方法

由于switch的操作无法进行梯度回传,便寻求能替代的函数:

tf.where  ##尝试了,同样无法解决,但是google得到where函数是有梯度的,不解
tf.clip(x-y,min,max)  ##从逻辑上该用clip函数来代替,解决,说明clip函数实现了梯度

还查阅到,关于tf中操作是否具有或者是否实现了梯度,可从math_grad.py原文件中查看,或者使用tf.gradients()验证

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹