我需要在tensorflow中定义一个自定义成本函数,它本质上是分段的,如下所示:
def f1(a,b):
pass #Will do Calculation on a and b
def f2(a,b):
pass #Will do Calculation on a and b
def customCostFunction(calculated,target):
if(target > 0): #Trivial Criteria
return f1(calculated,target)
else:
return f2(calculated,target)
我知道tf.py_func存在,但我不确定如何在上述情况下使用它。本质上,对于每个张量中的每个值(预测与目标),我需要通过我定义的函数传递预测值和目标值,这将根据传递的值返回略有不同的结果(我有两个严格不同的学习案例)。
然后训练步骤将如下定义:
train = tf.train.AdamOptimizer(learning_rate = LEARNING_RATE).minimize(tf.reduce_sum(customCostFunction(model,targets),0))
答案 0 :(得分:0)
我在这里假设您的张量calculated_values
是tf.Variable
,而target_values
是tf.placeholder
。 (两个矢量具有相同的尺寸)。而不是将成本函数包装到节点操作中,为什么不这样做:
bool_tensor = tf.greater(target, tf.zeros_as(target))
concat_both = tf.concat(1, [calculated_values, target_values])
required_cost_tensor = tf.select(bool_tensor, tf.map_fn(f1, concat_both), tf.map_fn(f2, concat_both))
tf.reduce_sum(required_cost_tensor, 0)
您可能需要稍微修改f1
和f2
个功能,以便在concat_both
解包map_fn
时获得您获得的类型
我自己刚刚开始使用tensorflow,而且之前从未使用tf.py_func
,所以这可能不是最佳解决方案。