2017-01-12 75 views
0

我有兩個具體的類,說A和C.我想用一個神經網絡把它們分爲類A,B,C,使得樣本過於接近自信的分類只是歸類爲B 。成本函數應該如下:錯誤分類(A分類爲C,反之亦然)將會有非常大的成本。正確的分類將具有零成本。將項目分類爲B將具有非常低的成本。結果是我們只區分樣本,我們很適合他們各自的類。Tensorflow自定義成本函數

我只有通過TensorFlow簡單的教程的工作,但它並沒有涉及如何定義更具體的成本函數,如這一點。誰能解釋如何能在TensorFlow

完成這裏是我的相關代碼,在這裏我只使用2類分類目前。它是直接從TensorFlow教程:

cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(y, y_)) 
train_step = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost) 

y是NN的輸出(將看起來像[[1,0,0],[0,1,0]用於兩個樣品與3設置類),y_是樣本的正確類別,可能是[[1,0,0],[0,0,1]]。在這個例子中,我們會歸入第二樣品B,因爲我們是不確定的,但真正的類是C.

+0

哪裏是你的代碼?請參閱[問]。你甚至不用花費2分鐘的時間[參觀]。 –

回答

1

我認爲你有怎樣NN分類工作的一些基本誤解。如果您要深入編碼它們,您應該仔細閱讀。我強烈推薦Michael Nielsen的在線書籍Neural Networks and Deep Learning

這就是說,你是在創造一個特殊的成本函數找也不是個辦法,但你怎麼解釋你NN得到的結果。你沒有3門課,你有2門課。「我不知道這是什麼」本身不是一門課,而是衡量神經網絡對其答案的信心。所以,你的網絡應該有兩個輸出,每個類一個,就像在TendorFlow指南中一樣。你應該像在導遊一樣訓練它。一旦你的網絡被訓練了,當你給它一個樣本進行分類時,你會得到2個數字,我們稱它們爲A'和C'。這些數字表明神經網絡對樣本所屬的類別有信心。例如,如果你得到A'== 0.999和C'== 0.00001,網絡非常可靠,你的樣本是A類。如果你得到A'== 0.6和C'== 0.59,你的網絡沒有如果樣本是A或C,但是略微支持它是A類的理論,現在由你來決定你的置信區間是什麼。爲了使這更容易,您應該使用softmax作爲輸出層非線性(TensorFlow MNIST指南所採用的方式)。 softmax的一個有用功能是,所有類的總和總是1,並且可以根據A'和C'之間的差異輕鬆做出決定。

+0

感謝您的回覆。我面臨的具體問題是優化分類,以便特定類型的錯誤具有非常具體的成本。我希望能夠完成網絡內特定真/假正/負率的優化。你是否說沒有辦法創建一個自定義成本函數來完成這個功能?我知道還有其他方法可以實現這一點。我意識到這不是一個傳統的應用程序,但是如果要正確選擇最小化成本函數,那麼數學應該可以正常工作 –

+0

不,您不能僅用一個不同的成本函數來解決此問題。想想看。當你開始訓練你的網絡時,你的權重被設置爲從標準或統一分佈中獲得的一些隨機值。你的網絡不確定任何事情,它是通過比較標籤和預測來更新權重以做出更好更好的預測。所以,按照你自己的規則「如果你不知道這是A還是C,這是B」,那麼一切都將被分類爲B,並且網絡將永遠不會實際訓練以識別A和C.這是一種原油說明。 –

+0

當然,如果你正在尋找一些非常具體的錯誤,你可以將你的訓練數據語料庫中的錯誤標記爲B類,你可以訓練網絡以識別這些......可能......如果你正在尋找的錯誤是與常規的A和C不同,但你對A和C的識別準確性可能會受到影響。 –