簡體   English   中英

神經網絡:設計成本函數“不可微” / Tensorflow

[英]Neural Networks : designing Cost function “not differentiable” / Tensorflow

我正在測試帶有回歸問題的Tensorflow框架。 我的輸入有很多功能,而我的輸出只有一個。 目前,它正在運行,但是我認為我的Cost函數不能滿足我的要求,因此准確性很低。

我的目標是在實際輸出的10%范圍內預測輸出,也就是說,對每個輸出:

if (y_actual - y_predicted) < 0.1 * y_actual :
    cost = 0
else :
    cost = 1

因此,對於預測輸出向量: [130, 35, 65, 43]與實際輸出向量[125, 10, 75, 40] ,我應該得到2的成本。(130和40在10% ,而不是35和65)

現在,我使用平方差。

cost = tf.reduce_sum(tf.squared_difference(y_predicted,y_)/(2*nb_batches))

因此,實際上,我對輸出的總和獲得了很好的預測,但是如果我認為預測在實際輸出的10%內是准確的,則我只有60%的准確度。 我的准確性是這樣寫的:

with tf.name_scope('accuracy'):
    with tf.name_scope('correct_prediction'):
        correct_prediction = tf.less_equal(tf.abs((y_predicted-y_)), 0.1*tf.abs((y_))) # True if y_diff <= 10% * y_actual
    with tf.name_scope('accuracy'): 
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # count 1 if correct prediction is True ; else False ; Do the sum on all the data tested
    tf.scalar_summary('accuracy', accuracy)

我嘗試編寫其他成本函數,例如:

cost = tf.reduce_sum(tf.cast((tf.greater_equal(tf.abs((y_predicted-y_)), 0.1*tf.abs(y_))),tf.float32)

但是我得到一個錯誤: No gradients provided for any variable 我認為這是因為我們無法獲得tf.cast的派生tf.cast

是否有編寫適合我需求的損失函數的正確方法? 我知道我想要的損失函數不是“可導數”。 您是否認為將其轉換為可派生函數將是一種解決方案?

我不確定我是否很清楚...

謝謝你的幫助 !

保羅

除了使用比較運算符,您還可以使用
tf.nn.relu(tf.abs(y_predicted-y_)-tf.abs(y_))
得到一個可微分的成本函數

relu操作計算max(0,x),因此將提供您正在做的連續版本。 主要區別在於,由於您距離更遠,您將受到更大的懲罰,因此您沒有二進制屬性(但這通常是回歸目標)。
這將產生比平方損失更好的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM