2016-11-04 4 views
0
나는 자연의 구분이 같은 것입니다 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의 존재를 알고,하지만 난 정확히 어떻게 확실하지 오전 위의 경우에 사용하십시오. 본질적으로 각 텐서 (예측 대 타겟)의 각 값에 대해 예측 된 값과 목표 값이 전달 된 값에 따라 약간 다른 결과를 반환하는 나를 정의한 함수를 통과해야합니다. 두 가지 완전히 다른 학습 사례).

은 그런 훈련 단계는 다음과 같이 정의된다 : 나는 당신이 tf.Variable 인 텐서 calculated_values이 그 여기에 가정 및 target_values있어

train = tf.train.AdamOptimizer(learning_rate = LEARNING_RATE).minimize(tf.reduce_sum(customCostFunction(model,targets),0)) 

답변

0

tf.placeholder이다. (두 벡터 모두 동일한 차원을 가짐). 대신 노드 작업으로 비용 함수를 포장에, 왜 당신은 간단하지 않습니다 concat_both 인 경우

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 기능을 조금 편집 할 수 있습니다 압축을 푼다 map_fn

나는 단지 tensorflow로 시작 했으므로, 전에는 tf.py_func을 사용하지 않았다. 그래서 이것은 가장 최적의 해결책이 아닐 수있다.

+0

예 가정은 정확합니다. 모두 같은 차원. 하나는 자리 표시 자이고 다른 하나는 변수입니다. –

+0

그래서 만약 당신이 당신의 평범한 조건을 위해 부울 텐서를 만들 수 있다면, 그것을 사용하여'tf.map_fn (f1, concat_both)'와'tf.map_fn (f1, concat_both)'에서 원소를 선택하면된다. . '(계산 된, 목표 된) 튜플이 각각'f1'과'f2'를 거치기 때문에 좀 덜 차분합니다. –

+0

작동하지 않습니다. 불평하는 f1은 두 개의 위치 논증을 필요로하지만 단 하나만 제공합니다. –