【发布时间】:2018-03-12 00:04:33
【问题描述】:
我正在训练一个以 softmax 层结束的分类问题。我想将损失计算为每个示例的 softmax 输出与真值标签的预测概率和平方距离的乘积的平均值。
在伪代码中:average(probability*distance_from_label**2)
现在我正在使用以下代码,该代码运行,但收敛到为每个实例输出“0”。它的实现有问题:
bs = batch_size
l = labels
X = K.constant([[0,1,...,l-1] for y in range(bs)], shape=((bs,l))
X = tf.add(-y_true, X)
X = tf.abs(X)
X = tf.multiply(y_pred, X)
X = tf.multiply(X, X)
return K.mean(X)
有没有办法实现这个平方差损失函数并保留一个 softmax 层?并且仍然要测量预测标签和真实标签之间的实际欧几里得距离,而不仅仅是单热向量中的元素差异?
为清楚起见,我提供了以下示例:
示例 1:
标签1 = [0, 0, 1, 0],预测1 = [1, 0, 0, 0]
损失1 = 4 = (4 + 0 + 0 + 0) = (1*2^2 + 0*1^2 + 0*0^2 + 0*1^2)
示例 2:
label2 = [0, 1, 0, 0],prediction2 = [0.3, 0.1, 0.3, 0.3]
损失2 = 1.8 = (0.3 + 0 + 0.3 + 1.2) = (0.3*1^2 + 0.1*0^2 + 0.3*1^2 + 0.3*2^2)
【问题讨论】:
标签: python tensorflow machine-learning neural-network keras