版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Laox1ao/article/details/79053808
错误
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()验证