Python 如何使用多个类的逻辑计算tf.nn.weighted\u cross\u entropy\u的pos\u权重变量?

Python 如何使用多个类的逻辑计算tf.nn.weighted\u cross\u entropy\u的pos\u权重变量?,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,我想使用tf.nn.weighted\u cross\u entropy\u和\u logits 数据集有三类。A类中的图像数量为5500,B类中的图像数量为2000,C类中的图像数量为20000 如何计算和使用tf.nn.weighted\u cross\u entropy\u with\u logits中的pos\u weight变量?函数tf.nn.weighted\u cross\u entropy\u with\u logits正在实现二进制交叉熵损失。你正在寻找的损失是“分类”交叉熵

我想使用
tf.nn.weighted\u cross\u entropy\u和\u logits

数据集有三类。
A类中的图像数量为5500
B类中的图像数量为2000
C类中的图像数量为20000


如何计算和使用
tf.nn.weighted\u cross\u entropy\u with\u logits
中的
pos\u weight
变量?

函数
tf.nn.weighted\u cross\u entropy\u with\u logits
正在实现二进制交叉熵损失。你正在寻找的损失是“分类”交叉熵。如果您正在寻找一种具体的行为,我建议您从头开始实施它。 这是你想要的:

>>> import tensorflow as tf
>>> from sklearn.utils.class_weight import compute_class_weight
>>> # Weighted categorical cross entropy
>>> def ce(y_pred, y_true, weights):
...   y_pred = tf.clip_by_value(y_pred, 1e-6, 1 - 1e-6)
...   loss = -tf.math.log(y_pred)
...   loss = y_true * loss
...   loss = weights * loss
...   return tf.reduce_mean(tf.reduce_sum(loss, axis=1))
>>>
# A B C just refers to your classes
>>> weights = compute_class_weight('balanced', [A, B, C], y_true)
>>> y_true = tf.one_hot(y_true, NUM_CLASSES)
>>> y_pred = tf.random.uniform((3, 3)) # Mock predictions (Should be activated by a softmax)
>>> print(y_true.shape, y_pred.shape)
(3, 3) (3, 3)
>>> ce(y_pred, y_true, weights)
<tf.Tensor: id=23, shape=(), dtype=float32, numpy=2.8649616>
>>将tensorflow作为tf导入
>>>从sklearn.utils.class\u权重导入计算\u class\u权重
>>>#加权分类交叉熵
>>>def ce(y_pred,y_true,权重):
...   y_pred=tf.按值剪裁(y_pred,1e-6,1-1e-6)
...   损耗=-tf.math.log(y_pred)
...   损失=y_真*损失
...   损耗=重量*损耗
...   返回tf.reduce_平均值(tf.reduce_和(损失,轴=1))
>>>
#A B C只是指你的班级
>>>权重=计算类权重('balanced',[A,B,C],y\u true)
>>>y_true=tf.one_hot(y_true,NUM_类)
>>>y_pred=tf.random.uniform((3,3))35;模拟预测(应通过softmax激活)
>>>打印(y_true.shape,y_pred.shape)
(3, 3) (3, 3)
>>>ce(y_pred,y_true,权重)