交叉熵损失函数权重计算

交叉熵损失函数

torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-
100, reduce=None, reduction='elementwise_mean')

weight为每个类别的loss设置权重,常用于类别不均衡的问题,weight的数据类型必须是float的tensor,其个数要与分类的类别个数一致(其他参数不介绍)

weight的计算方法经常使用median frequency balancing,假设有五个类别的分类。那么每个类别都要计算一个频率,以第一类别为例,其计算公式为freq(1)=\frac{a}{b} 

上面式子中的a表示第一个类别的像素个数,b代表所有包含第一类的照片中的像素个数

(例如100张图片中有80张包含第一类,那么a就是这80张里面属于第一个类别的像素总数,b就是80张图片的像素总数)

按照上面的说法五个类别可以计算出五个数字,然后排成一列,找到这5个数字的中值median_freq,然后使用这个中值依次除以上述五个数,得到的新的五个数字就是五个权重。

### 计算二元交叉熵损失函数 在机器学习中,尤其是针对分类问题时,交叉熵损失函数被广泛应用。对于二分类问题(Binary Classification),该损失函数定义如下: \[ L(y, p) = -[y \log(p) + (1 - y) \log(1 - p)] \] 这里, - \( y \) 表示真实标签,其值为0或1; - \( p \) 则表示模型预测样本属于正类别的概率,通常通过激活函数如Sigmoid获得。 具体来说,在神经网络训练过程中,当输出层采用Sigmoid作为激活函数时,如果选择了基于交叉熵驱动的反向传播法,则会按照上述公式计算每个样例对应的损失,并据此调整权重以减少整体误差[^3]。 为了更直观理解这一过程,下面给出一段Python代码实现了一个简单的例子来展示如何手动计算二元交叉熵损失: ```python import numpy as np def binary_cross_entropy_loss(y_true, y_pred): epsilon = 1e-15 # 防止log(0) y_pred_clipped = np.clip(y_pred, epsilon, 1 - epsilon) loss = -(y_true * np.log(y_pred_clipped) + (1 - y_true) * np.log(1 - y_pred_clipped)) return np.mean(loss) # 测试数据 true_labels = np.array([1, 0]) predicted_probabilities = np.array([0.9, 0.2]) loss_value = binary_cross_entropy_loss(true_labels, predicted_probabilities) print(f'Binary Cross Entropy Loss: {loss_value}') ``` 这段程序首先导入必要的库并定义了`binary_cross_entropy_loss()` 函数用于接收真实的类别标签 `y_true` 和由模型产生的预测概率 `y_pred` 。接着利用NumPy中的操作实现了前述公式的运逻辑,最后返回平均后的损失值。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值