我想訓練神經網絡tensorflow使用每個陽性樣品一個負樣品最大利潤損失函數:Tensorflow最大利潤損失培訓?
max(0,1 -pos_score +neg_score)
什麼我目前做的是這樣的: 網絡需要三個輸入:輸入1,然後一個正例input2_pos和一個反例input2_neg。 (這些是詞嵌入層的索引。)網絡應該計算一個分數,表示兩個例子的相關程度。 這裏是我的代碼的簡化版本:
input1 = tf.placeholder(dtype=tf.int32, shape=[batch_size])
input2_pos = tf.placeholder(dtype=tf.int32, shape=[batch_size])
input2_neg = tf.placeholder(dtype=tf.int32, shape=[batch_size])
# f is a neural network outputting a score
pos_score = f(input1,input2_pos)
neg_score = f(input1,input2_neg)
cost = tf.maximum(0., 1. -pos_score +neg_score)
optimizer= tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
我看到了什麼,當我運行這一點,是這樣的網絡只是瞭解哪些輸入持有積極的榜樣 - 它總是預測線沿線的一個類似的分數:
pos_score = 0.9965983
neg_score = 0.00341663
我怎麼能結構中的變量/培訓,使網絡學習任務呢?
我只想要一個網絡,需要兩個輸入並計算表示它們之間相關性的分數,並以最大利潤率損失對其進行訓練。
分別計算正面和負面的分數似乎不是我的選擇,因爲它不會正確地反向傳播。另一個選擇似乎是隨機化輸入 - 但是對於損失函數,我需要知道哪個示例是正確的 - 輸入另一個參數會再次提供解決方案?
任何想法?
你的代碼似乎很好。如果網絡預測1對積極對和0對於消極者,它似乎已經完全瞭解你的任務!損失是否趨於0? –