2017-12-04 7 views
0

言ってやるが、私はテンソルを持って、それは正と負の値が含まれる場合があります。テンソルでテンソルの要素的な関数をカスタマイズする方法は?

[ 1, -1, 2, -2 ] 

を今、私はログを適用したい(x)が正の値、負の値の定数-10用:

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

つまり、numpy.vectorizeのような機能が必要です。これはテンソルフローで可能ですか?

可能な方法の1つは、学習できない変数を使用することですが、正しく伝播できるかどうかはわかりません。

答えて

0

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) 
+0

おかげで、私はまた、 'tf.where'が同じ仕事をしていることが分かりました。 –

+0

はい:実際には、条件のいずれかの側の計算が安価である場合は 'tf.where()'を使用し、実行するのに十分な高価な場合は 'tf.cond()'を使用してくださいそれは必要なときだけです。この場合、おそらく 'tf.where()'が適切です。 – mrry

関連する問題