Tensorflow自定义分段成本函数

时间:2016-11-04 08:19:42

标签: python tensorflow

我需要在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))

1 个答案:

答案 0 :(得分:0)

我在这里假设您的张量calculated_valuestf.Variable,而target_valuestf.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)

您可能需要稍微修改f1f2个功能,以便在concat_both解包map_fn时获得您获得的类型

我自己刚刚开始使用tensorflow,而且之前从未使用tf.py_func,所以这可能不是最佳解决方案。