Tensorflow:可区分的基元

时间:2018-08-14 18:22:00

标签: tensorflow automatic-differentiation

我的印象是所有张量流原语都是可区分的。在这种“幻觉”下,我编写了此函数,希望张量流能够自动区分它,并且我可以通过它反向传播错误。

权重函数:

def ranked(a):
     lens     = tf.convert_to_tensor(tf.range(1, (tf.size(a) + 1)))
     rankw01  = tf.cast(tf.convert_to_tensor(tf.contrib.framework.argsort(tf.contrib.framework.argsort(a)) + 1),
                 tf.float64)
     rankw02  = tf.convert_to_tensor(rankw01 - ((tf.size(a) + 1)/2))
     rankw03  = tf.divide(rankw02, tf.reduce_sum(tf.gather(rankw02, tf.where(tf.greater(rankw02, 0)))))
     rankw04  = tf.cast(rankw03, tf.float32)

     return rankw04

不幸的是,该函数在正向传递中按预期工作,但在反向传递中不起作用,因为导数不存在(由于我不断得到的错误)。

该功能在随附的图片中进行了解释:

enter image description here

我有以下问题:

1:为什么我不能采用上面函数的导数。

2:如果这是一个实现问题,您能建议我如何重写它,以便可以解决它的派生和反向传播错误吗?

3:所有张量流操作是否可区分?

1 个答案:

答案 0 :(得分:1)

因此,我遵循@DomJack的建议,删除了tf.convert_to_tensor调用,并进行了一些小小的打扫。 现在功能是可微的。

y