我想训练神经网络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? –