2017-01-22 8 views
0

私は、Y> thershold(x)はrms_freq(x)のか、他peak_valueを実行し、その値を返す場合は、単純に条件を適用するファイルfe_extraction.py内の三つの機能テンソルフローで条件文を定義する方法は?

def rms_value(x): 
    return tf.sqrt(tf.reduce_mean(tf.square(x))) 
def meanabs(x): 
    return tf.reduce_mean(tf.abs(x)) 

def req_value(x,y,Thersh): 
    z = tf.cond(y>Thersh,rms_freq(x),peak_value(x)) 
return z 

を持っています。 yは別の関数から得られた値です。

# given values 
# Thershold = 10.69 
# x is defined as tf.Variable , dtype tf.float64 
# y = 45.34 obtained from function 
.... 
z = fe_extraction.req_value(x,y,Thershold) 

TypeErrorとしてエラーが発生します.fn1は呼び出し可能でなければなりません。

答えて

1
rms_freq(x)

peak_value(x)あなたはを引数としてxを渡し、それぞれの機能rms_freqpeak_valueを呼んでいます。

代わりに、呼び出し可能な、つまり換言すれば、tf.condが実行できる関数を渡す必要があります。

あなたの関数のパラメータとしてxをしたいので、あなたは外のスコープを取り込み、したがって、パラメータxを見て呼び出し可能オブジェクトを定義lambdaでそれらをラップすることができます。それは再び 私にエラーを与える

z = tf.cond(y>Thersh,lambda: rms_freq(x) ,lambda: peak_value(x)) 
+0

'例外TypeError:predはは、Pythonブール値でなければなりません' – RDK

+0

'をy> Thersh'はPythonのブールである、これは' y'と 'Thersh'両方がPythonの変数であることを意味し、この場合、tf.condは役に立たないので、Pythonの 'if'文を使うことができます。ところで、 'cond'はテンソルフローでなければなりません。' tf.greater(y、Thersh、name = None) 'のようなtf演算を使わなければなりません。 – nessuno

+0

ありがとう! – RDK

関連する問題