2017-01-22 4 views
0

У меня есть три функции в файле 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 

Я хочу просто применить условие, если у> thershold выполнения rms_freq (х) или еще peak_value (х) и вернуть это значение. 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) вы вызова функция rms_freq и peak_value соответственно, передавая x в качестве аргумента.

Вместо этого вы должны передать вызываемую или, другими словами, функцию, которую может выполнить tf.cond.

Поскольку вы хотите x в качестве параметра для ваших функций, вы можете обернуть их в lambda, который определяет вызываемый объект, который фиксирует вне сферы и таким образом видит параметр x.

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

это дает мне ошибку снова 'TypeError: před не должна быть Python BOOL' – RDK

+0

'у> Thersh' является питоном булевым, это означает, что и' 'y' и Thersh' является питон переменным, поэтому tf.cond бесполезен в этом случае, вы можете просто использовать оператор python 'if'. Кстати, 'cond' должен быть логическим методом tensorflow, вы должны использовать tf-операции, такие как' tf.greater (y, Thersh, name = None) ' – nessuno

+0

большое вам спасибо! – RDK

Смежные вопросы