如何在张量流中的张量上自定义元素方式的函数?

时间:2017-12-04 22:07:14

标签: python tensorflow

说,我有一个张量,它可能包含正值和负值:

[ 1, -1, 2, -2 ]

现在,我想对正值应用log(x),对负值应用常量-10:

[ log(1), -10, log(2), -10 ]

换句话说,我想拥有像numpy.vectorize这样的功能。这在张量流中是否可行?

一种可能的方法是使用不可学习的变量,但我不知道它是否可以正确地进行反向传播。

2 个答案:

答案 0 :(得分:3)

tf.map_fn()使您能够跨矢量元素(或更高维张量的切片)映射任意TensorFlow子计算。例如:

a = tf.constant([1.0, -1.0, 2.0, -2.0])

def f(elem):
  return tf.where(elem > 0, tf.log(elem), -10.0)

  # Alternatively, if the computation is more expensive than `tf.log()`, use
  # `tf.cond()` to ensure that only one branch is executed:
  # return tf.where(elem > 0, lambda: tf.log(elem), lambda: -10.0)

result = tf.map_fn(f, a)

答案 1 :(得分:0)

我找到了,tf.where完成了这种工作:https://www.tensorflow.org/api_docs/python/tf/where