激活函数总结(四十五):激活函数补充(Smooth Step、LinComb)

本文继续深入探讨激活函数,重点关注Smooth Step和LinComb两种不常见激活函数。Smooth Step激活函数具有稳定性,速度优于ReLU,但需特定训练策略。LinComb是可训练的激活函数组合,结合多种函数优点,但有效性未经充分验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

激活函数总结(四十五):激活函数补充

1 引言

前面的文章中已经介绍了介绍了一系列激活函数 (SigmoidTanhReLULeaky ReLUPReLUSwishELUSELUGELUSoftmaxSoftplusMishMaxoutHardSigmoidHardTanhHardswishHardShrinkSoftShrinkTanhShrinkRReLUCELUReLU6ThresholdSincGLUSwiGLUGTUBilinearReGLUGEGLUSoftminSoftmax2d

### UNet 模型中损失函数的使用示例及实现方式 UNet 是一种广泛应用于图像分割任务的深度学习架构,尤其在医学图像处理领域表现优异[^4]。为了优化 UNet 的性能,合理选择并配置损失函数是非常重要的一步。以下是关于 UNet 中常用损失函数的选择及其具体实现方式。 #### 常见的损失函数类型 在图像分割任务中,常用的损失函数包括交叉熵损失(Cross-Entropy Loss)、Dice 系数损失以及它们的组合形式。这些损失函数各有优劣,适用于不同的场景和数据集特性[^1]。 ##### 1. 二元交叉熵损失 (Binary Cross Entropy, BCE) BCE 是一种经典的分类损失函数,适合用于像素级的二分类问题。它计算预测值与真实标签之间的差异,并通过负对数似然的方式放大错误预测的影响。 ```python import torch.nn as nn criterion = nn.BCEWithLogitsLoss() # 自动应用 Sigmoid 函数 ``` ##### 2. Dice 系数损失 Dice 系数是一种评估重叠区域相似性的度量标准,常被转化为损失函数用于优化模型参数。相比 BCE,Dice 损失更关注于正类样本的表现,因此更适合解决类别不平衡的问题。 ```python def dice_loss(preds, targets, smooth=1e-6): preds_flat = preds.view(-1) targets_flat = targets.view(-1) intersection = (preds_flat * targets_flat).sum() union = preds_flat.sum() + targets_flat.sum() loss = 1 - ((2.0 * intersection + smooth) / (union + smooth)) return loss ``` ##### 3. 组合损失 有时单一的损失函数可能无法充分捕捉复杂的数据分布特点,此时可以考虑将多种损失结合起来使用。例如,联合 BCE 和 Dice 损失可以在一定程度上平衡全局误差与局部结构一致性。 ```python alpha = 0.5 # 权衡系数 loss = alpha * criterion_bce(output, target) + (1 - alpha) * dice_loss(output, target) ``` #### 完整代码示例 以下是一个完整的 PyTorch 实现片段,展示了如何定义 UNet 并设置相应的损失函数: ```python class UNet(nn.Module): def __init__(self, in_channels, num_classes): super(UNet, self).__init__() # Encoder layers self.encoder1 = self.contracting_block(in_channels=in_channels, out_channels=64) self.encoder2 = self.contracting_block(in_channels=64, out_channels=128) # Decoder layers and other components omitted for brevity def contracting_block(self, in_channels, out_channels, kernel_size=3): block = nn.Sequential( nn.Conv2d(kernel_size=kernel_size, in_channels=in_channels, out_channels=out_channels, padding=1), nn.ReLU(), nn.BatchNorm2d(out_channels), nn.Conv2d(kernel_size=kernel_size, in_channels=out_channels, out_channels=out_channels, padding=1), nn.ReLU(), nn.BatchNorm2d(out_channels) ) return block def forward(self, x): # Forward pass logic here... return output # 初始化模型、损失函数和优化器 model = UNet(in_channels=1, num_classes=2) optimizer = torch.optim.Adam(model.parameters(), lr=0.001) criterion_dice = dice_loss criterion_bce = nn.BCEWithLogitsLoss() for epoch in range(num_epochs): model.train() for images, masks in dataloader: optimizer.zero_grad() outputs = model(images) bce_loss = criterion_bce(outputs, masks.float()) dice_lss = criterion_dice(torch.sigmoid(outputs), masks.float()) # Apply sigmoid before computing Dice total_loss = 0.5 * bce_loss + 0.5 * dice_lss total_loss.backward() optimizer.step() ``` 上述代码实现了基于 BCE 和 Dice 损失的联合训练过程,其中 `dice_loss` 被手动定义以便更好地控制细节[^3]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sjx_alo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值