簡體   English   中英

Tensorflow自定義成本函數

[英]Tensorflow Custom Cost Function

我有2個具體的類,例如A和C。我想使用NN將它們分類為A,B,C類,以便將過於自信地分類的樣本僅分類為B。成本函數應為如下:錯誤分類(將A歸類為C,反之亦然)將產生非常大的成本。 正確的分類將使成本為零。 將項目分類為B將具有非常低的成本。 結果是我們只區分非常確定適合其各自類別的樣本。

我只研究過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的輸出(對於具有3個類別的兩個樣本集,其外觀類似於[[1,0,0],[0,1,0]],而y_是樣本的正確類別,可能是[[1,0,0],[0,0,1]]。 在此示例中,由於不確定,我們將第二個樣本歸類為B,但真實類別為C。

我認為您對NN分類器的工作原理有一些根本性的誤解。 如果您要對它們進行編碼,您可能應該閱讀一下。 我強烈推薦Michael Nielsen 神經網絡和深度學習的在線書籍。

就是說,您正在尋找的解決方案不是創建特殊的成本函數,而是如何解釋從NN獲得的結果。 您沒有3個班級,而只有2個班級。“我不知道這是什么”本身不是一個班級,而是衡量NN對其答案的信心的一種度量。 因此,您的網絡應該有2個輸出,每個類一個輸出,就像TendorFlow指南中一樣。 而且您應該像在指南中一樣對其進行培訓。 訓練好網絡后,將其輸入樣本進行分類時,您將獲得2個數字,分別稱為A'和C'。 這些數字表明NN對樣本屬於哪個類別的信心。 例如,如果獲得A'== 0.999和C'== 0.00001,則該網絡非常確定您的樣本為A類。如果獲得A'== 0.6和C'== 0.59,則您的網絡沒有確定樣本是A還是C,但稍微偏愛該樣本為A類的理論。現在由您來決定您的置信區間是多少。 為了簡化操作,您可能應該對輸出層非線性使用softmax(TensorFlow MNIST指南的方法)。 softmax的有用功能之一是所有類的總和始終為1,並且您可以輕松地基於A'和C'之間的差來做出決策。

暫無
暫無

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

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