检查张量(标量)是否为0,如果是,则更改其值

时间:2017-06-12 13:28:49

标签: python tensorflow

我定义了张量,然后变成标量并用作分子。我想事先捕获错误,即分析器得到0。

到目前为止,这是我的代码:

#Some stuff hapens before that gives the numbers for denumerator and numerator
#Set denumerator to 1 for example
def check(): return denumerator= tf.constant([1]) 
tf.cond(tf.equal(denumerator,tf.zeros([1]),check)

res = tf.divide(numerator,denumerator)

我查看了这里的文档:https://www.tensorflow.org/api_docs/python/tf/cond。但这只解释了如何执行基于条件的图形,而不是如何在满足特定条件时为图形设置特定值。

1 个答案:

答案 0 :(得分:1)

您的问题的答案

denumerator = tf.cond(tf.equal(denumerator, 0), lambda: tf.ones(()), lambda: denumerator)
res = tf.divide(numerator, denumerator)

您应该使用的答案

不要将你的除数与零进行比较 - 它不稳健(你可能仍然会遇到微小值的问题)并且结果不是denumerator的函数的连续性,这在优化设置中通常效果不佳

使用更成熟的技术。例如,如果你知道它是积极的,你可以用1:

来最大化它
res = tf.divide(numerator, tf.maximum(denumerator, 1))