2017-08-11 31 views
1

我嘗試添加將R在eval_metric_ops平方,我估計是這樣的:定製eval_metric_ops在估算中Tensorflow

def model_fn(features, labels, mode, params): 
    predict = prediction(features, params, mode) 
    loss = my_loss_fn 
    eval_metric_ops = { 
     'rsquared': tf.subtract(1.0, tf.div(tf.reduce_sum(tf.squared_difference(label, tf.reduce_sum(tf.squared_difference(labels, tf.reduce_mean(labels)))), 
            name = 'rsquared') 
     } 

    train_op = tf.contrib.layers.optimize_loss(
     loss = loss, 
     global_step = global_step, 
     learning_rate = 0.1, 
     optimizer = "Adam" 
    ) 

    predictions = {"predictions": predict} 

    return tf.estimator.EstimatorSpec(
     mode = mode, 
     predictions = predictions, 
     loss = loss, 
     train_op = train_op, 
     eval_metric_ops = eval_metric_ops 
    ) 

,但我有以下錯誤:

TypeError: Values of eval_metric_ops must be (metric_value, update_op) tuples, given: Tensor("rsquared:0", shape=(), dtype=float32) for key: rsquared

我嘗試沒有名稱參數也不會改變任何內容。你知道如何創建這個eval_metric_ops?

回答

1

eval_metric_ops需要一個按名稱鍵入的度量結果字典。字典的值是調用度量函數的結果。您的情況下的公制功能可以使用tf.metrics執行:

def metric_fn(labels, predict): 
    SST, update_op1 = tf.metrics.mean_squared_error(labels, tf.reduce_mean(labels)) 
    SSE, update_op2 = tf.metrics.mean_squared_error(labels, predictions) 
    return tf.subtract(1.0, tf.div(SSE, SST)), tf.group(update_op1, update_op2)) 
+0

完美的是我正在尋找的。謝謝! –