tensorflow - TF/Keras 稀疏分类交叉熵

标签 tensorflow machine-learning keras

我的数据松散地标有单一类别“重要性”。 基本上标签是 [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/

相关文章:

machine-learning - 如何将此 keras cnn 模型转换为 pytorch 版本

填充为 ='SAME' 的 Tensorflow/Keras Conv2D 层表现异常

python - 在 Tensorflow 中,最后一个维度如何使用 tf.gather()?

amazon-web-services - 如何在 AWS SageMaker 中部署自定义模型?

python - 使用 softmax 作为 tf.keras 中的连续层和使用 softmax 作为密集层的激活函数有什么区别?

python - 在 Pycaffe 中通过索引访问 blob

machine-learning - 神经网络结构

c++ - 如何在没有 ARM 处理器的 Linux 上安装 TensorflowLite C++?

tensorflow - TensorFlow 中的 RNN 模型内存不足

python - 急切执行: gradient computation