如何使用 sparse_softmax_cross_entropy_with_logits 在张量流中实现加权交叉熵损失 [英] How can I implement a weighted cross entropy loss in tensorflow using sparse_softmax_cross_entropy_with_logits

查看:35
本文介绍了如何使用 sparse_softmax_cross_entropy_with_logits 在张量流中实现加权交叉熵损失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开始使用 tensorflow(来自 Caffe),并且我正在使用损失sparse_softmax_cross_entropy_with_logits.该函数接受像 0,1,...C-1 这样的标签,而不是 onehot 编码.现在,我想根据类标签使用权重;我知道如果我使用 softmax_cross_entropy_with_logits(一种热编码),这可能可以通过矩阵乘法来完成,有没有办法对 sparse_softmax_cross_entropy_with_logits 做同样的事情?

I am starting to use tensorflow (coming from Caffe), and I am using the loss sparse_softmax_cross_entropy_with_logits. The function accepts labels like 0,1,...C-1 instead of onehot encodings. Now, I want to use a weighting depending on the class label; I know that this could be done maybe with a matrix multiplication if I use softmax_cross_entropy_with_logits (one hot encoding), Is there any way to do the same with sparse_softmax_cross_entropy_with_logits?

推荐答案

import  tensorflow as tf
import numpy as np

np.random.seed(123)
sess = tf.InteractiveSession()

# let's say we have the logits and labels of a batch of size 6 with 5 classes
logits = tf.constant(np.random.randint(0, 10, 30).reshape(6, 5), dtype=tf.float32)
labels = tf.constant(np.random.randint(0, 5, 6), dtype=tf.int32)

# specify some class weightings
class_weights = tf.constant([0.3, 0.1, 0.2, 0.3, 0.1])

# specify the weights for each sample in the batch (without having to compute the onehot label matrix)
weights = tf.gather(class_weights, labels)

# compute the loss
tf.losses.sparse_softmax_cross_entropy(labels, logits, weights).eval()

这篇关于如何使用 sparse_softmax_cross_entropy_with_logits 在张量流中实现加权交叉熵损失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆