2017-08-29 51 views
3

似乎有要對這個已經有幾個線程/問題,但它不會出現,我認爲這已經得到解決:如何使用TensorFlow指標在Keras

How can I use tensorflow metric function within keras models?

https://github.com/fchollet/keras/issues/6050

https://github.com/fchollet/keras/issues/3230

人們似乎遇到變量初始化或度量標準爲0的問題。

我需要計算不同的細分指標,並希望在我的Keras模型中包含tf.metric.mean_iou。這是我已經能夠拿出迄今最好的:

def mean_iou(y_true, y_pred): 
    score, up_opt = tf.metrics.mean_iou(y_true, y_pred, NUM_CLASSES) 
    K.get_session().run(tf.local_variables_initializer()) 
    return score 

model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=[mean_iou]) 

此代碼不拋出任何錯誤,但總是mean_iou返回0。我相信這是因爲up_opt未評估。我已經看到,在TF 1.之前使用的東西沿着control_flow_ops.with_dependencies([up_opt],得分)的行來實現這一點。這在TF 1.3中似乎不可能了。

總之,如何評估Keras 2.0.6中的TF 1.3度量?這似乎是一個相當重要的特徵。

+0

沒有你設法解決這個問題? –

回答

3

你仍然可以使用control_dependencies

def mean_iou(y_true, y_pred): 
    score, up_opt = tf.metrics.mean_iou(y_true, y_pred, NUM_CLASSES) 
    K.get_session().run(tf.local_variables_initializer()) 
    with tf.control_dependencies([up_opt]): 
     score = tf.identity(score) 
    return score 
+0

這會運行,但速度非常慢(與使用此附加度量不編譯模型相比,速度要慢大約10倍)。我懷疑是*分數= tf.identity(分數)*的原因。有任何想法嗎? – davhab

+1

這不是原因,'tf.identity'的複雜性是恆定的(1),它沒有任何區別。原因是計算另一個指標。 –

+0

這是否也適用於keras損失函數? – josh

相關問題