我的数据松散地标有单一类别“重要性”。 基本上标签是 [0..5] 并具有相同的含义 - 它们表示相同的事件,只是具有不同的重要性。 想象一个阳光明媚的海滩 🙂 并且您的数据是海浪滚到沙滩上的力量(或另一种解释 - 每个海浪传播到海滩边缘的距离并分为 5 个容器/类别)..
我的问题 - 如果我使用稀疏分类交叉熵来预测波浪类别,TF/Keras 模型是否会“理解”5 比 4 更大(更好/信息更丰富),4 比 3 更大等等。
是否可以推断出标签值之间存在关联?标签序列 1 2 3 4 5 与 5 4 3 2 1 不一样?
数据支持上述事实,但模型能解决这个问题吗?我该怎么做才能让模型变得更容易?
或者换句话说 - 从解释分类标签值的意义上来说,稀疏分类交叉熵的内在实现是什么?
最佳答案
这是一个非常好的问题。这是我对你的问题的直觉。稀疏类别交叉熵威胁每个类别都是一个独特的类别。因此,1
(即[0,1,0,0,0,0]
)和3
(即)之间没有任何联系>[0,0,1,0,0,0]
假设您的标签是 [0,1,2,3,4,5]
。另一方面,您的标签指示单个事件的强度,其中 5
是最大值,0
是最小值。因此,我会将您的标签标准化为:
labels = labels / max(labels)
然后计算单个事件的 sigmoid 交叉熵,其中 1.0
表示最高概率,0.0
表示最低概率。从这个意义上说,您的标签将在以下范围内:[0.0, 0.2, 0.4, 0.6, 0.8, 1.0]
。您可以通过以下方式做到这一点:
# Random labels
labels = np.array([0, 1, 4, 2, 1, 3, 4, 0, 5])
# Normalized labels
labels = labels / np.amax(labels)
# Random logits
logits = np.array([1.0, 0.5, 0.4, 0.1, 0.3, 0.6, 0.1, 0.9, 0.2])
loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=labels, logits=logits)
with tf.Session() as sess:
sess.run(loss)
关于tensorflow - TF/Keras 稀疏分类交叉熵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57450105/