2017-10-06 54 views
0

因此,我的網絡輸出是一個合法性列表,然後我使用tf.round()將其舍入爲0或1,這對於此項目至關重要。 然後我發現tf.round是不可區分的,所以我有點不知所以了..:/Tensorflow中的可微調圓函數?

回答

1

舍入是一個根本無法區分的函數,所以你在那裏運氣不好。這種情況的正常程序是找到一種方法來使用概率,比方說使用它們來計算預期值,或者通過獲取輸出的最大概率,並選擇那個概率作爲網絡的預測。如果你沒有使用輸出來計算你的損失函數,你可以繼續,並將其應用於結果,並且它是否可以區分並不重要。現在,如果你想要一個信息丟失函數來訓練網絡,也許你應該考慮是否保持輸出的概率格式可能實際上對你有利(它可能會使你的訓練過程更平滑) - 那樣你只需將訓練後的概率轉換爲網絡外部的實際估計值即可。

+0

我的輸出必須是1或者0的值。但是因爲訓練數據中的大部分輸出都是0,網絡只能學習輸出從0到0.0001的非常低的值,而且我真的有點迷失在這裏。所以我認爲迫使它輸出一個1或0會幫助..我想只是把一個1而不是圓的函數的派生應該是,但是我再次使用Tensorflow我不能決定衍生物 – ronsap123

0

可以使用以下事實:tf.maximum()和tf.minimum()是可微的,並且輸入是概率從0到1

# round numbers less than 0.5 to zero; 
# by making them negative and taking the maximum with 0 
differentiable_round = tf.maximum(x-0.499,0) 
# scale the remaining numbers (0 to 0.5) to greater than 1 
# the other half (zeros) is not affected by multiplication 
differentiable_round = differentiable_round * 10000 
# take the minimum with 1 
differentiable_round = tf.minimum(differentiable_round, 1) 

實施例:

[0.1,  0.5,  0.7] 
[-0.0989, 0.001, 0.20099] # x - 0.499 
[0,  0.001, 0.20099] # max(x-0.499, 0) 
[0,   10, 2009.9] # max(x-0.499, 0) * 10000 
[0,   1.0,  1.0] # min(max(x-0.499, 0) * 10000, 1)