我在文件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>我想简单地应用一个条件thershold执行rms_freq(x)或者peak_value(x)并返回该值。 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必须是可调用的。
答案 0 :(得分: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))
中,该{{1}}定义一个可调用对象,该对象捕获外部作用域,从而查看参数{{1}}。
{{1}}