2017-10-11 12 views
0

F1-score, Precision, Recall 및 내 맞춤 측정 항목과 같은 측정 항목을 최소화/최대화하고 싶습니다.Tensorflow 최적화 도구의 사용자 지정 메트릭을 만드는 방법은 무엇입니까?

ValueError: No gradients provided for any variable, check your graph for ops that do not support gradients, between variables [...] and loss Tensor("Training/Sub_3:0", shape=(), dtype=float32).

난 일부 사용자 지정 메트릭 대신 손실을 사용하여 내 신경 네트워크를 양성하기 위해 어떻게해야하나요 : 내가 어떤 메트릭을 최소화하려고하면

def my_metric(logits, labels): 
    predicted = tf.argmax(logits, 1) 
    actual = tf.argmax(labels, 1) 

    NS = tf.count_nonzero(actual) 
    NR = tf.reduce_sum(tf.cast(tf.equal(actual, 0), tf.float32)) 
    TP = tf.reduce_sum(tf.cast(tf.equal(actual+predicted, 0), tf.float32)) 
    FP = tf.reduce_sum(tf.cast(tf.equal(actual*(1-predicted), 1), tf.float32)) 
    TN = tf.reduce_sum(tf.cast(tf.equal(actual+predicted, 2), tf.float32)) 
    FN = tf.reduce_sum(tf.cast(tf.equal(actual+(1-predicted), 0), tf.float32)) 
    ''' 
    Precision = TP/TP + FP 
    Recall = TP/TP + FN 
    b = 0.5 
    denom = (1.0 + b**2) * TP + FN*b**2 + FP 
    Fb = (1.0 + b**2) * TP/denom 
    ''' 
    Metric = (TP/NR) - (FP/NS) 

    return Metric 


def training(metric, learning_rate): 
    optimizer = tf.train.AdamOptimizer(learning_rate) 
    train_op = optimizer.minimize(metric) 
    return train_op 

, 난 같은 오류가 발생합니다 : 내 메트릭 및 최적화 코드가있다 기능? 그라디언트 정의를 추가 할 수 있습니까? 위의 측정 항목에 대해이를 수행하는 방법은 무엇입니까?

답변

0

메트릭은 매개 변수에 따라 달라질 수 있습니다. 텐서 흐름 방법 tf.equal은 구분할 수 없습니다.

작업이 매개 변수에 따라 차이가 나는지 확실하지 않은 경우 tf.gradients 메서드를 사용하여 찾을 수 있습니다.

import tensorflow as tf 

w = tf.Variable(1, name="w", dtype=tf.float32) # parameter to optimize for 
x = tf.placeholder(shape=(), dtype=tf.float32, name="x") # input 
op = tf.multiply(w,x) 

grads_op_wrt_w = tf.gradients(op, w) 
print(grads_op_wrt_w) 

난 동작 here의 구배 흐름을 확인하는 방법이 작은 취지를 만들고있다.