2017-01-20 78 views
0

我使用Keras(+ TensorFlow)構建深度神經網絡模型。在模型中,我需要定義我自己的精確度函數。我們假設,模型預測完成一項工作所需的時間(以分鐘爲單位,介於0到20之間)。如果預測的輸出在+/- 2以內,我希望模型能夠打印出準確度。如果預測的輸出是x分鐘,而預期的輸出是x + 1,我想要考慮這是一個正確的預測,如果預期的輸出是x + 3,我想這是一個錯誤的預測。Keras計算精確度爲+/- 1,預測值爲

這是top_k_categorical_accuracy

+0

你建立迴歸模型的一個真實值輸出,帶20點的尺寸爲每分鐘一個分類模型。 – indraforyou

+0

@indraforyou具有20個維度的分類模型。 – Pratyush

回答

1

略有不同,您可以使用Keras後端的API輕鬆實現邏輯..這也將確保你的度量上tensorflow和theano工作兩者。

與測試

這裏:

import numpy as np 
import keras 
from keras import backend as K 

shift = 2 
def custom_metric(y_true,y_pred): 
    diff = K.abs(K.argmax(y_true, axis=-1) - K.argmax(y_pred, axis=-1)) 
    return K.mean(K.lesser_equal(diff, shift)) 


t1 = np.asarray([ [0,0,0,0,0,0,1,0,0,], 
        [0,0,0,0,0,0,1,0,0,], 
        [0,0,0,0,0,0,1,0,0,], 
        [0,0,0,0,0,0,1,0,0,], 
        [0,0,0,0,0,0,1,0,0,], 
        [0,0,0,0,0,0,1,0,0,], 
       ]) 
p1 = np.asarray([ [0,0,0,0,0,1,0,0,0,], 
        [0,0,0,0,1,0,0,0,0,], 
        [0,0,0,0,0,0,0,1,0,], 
        [0,0,0,0,0,0,0,0,1,], 
        [1,0,0,0,0,0,0,0,0,], 
        [0,0,0,0,0,0,1,0,0,], 
       ]) 


print K.eval(keras.metrics.categorical_accuracy(K.variable(t1),K.variable(p1))) 
print K.eval(custom_metric(K.variable(t1),K.variable(p1))) 

現在在你的compile語句中使用它:metrics=custom_metric