作业记录 WEEK2

本文记录了在PyTorch中实现多模态融合模型的过程,包括添加二分类的BCE Loss,构建FaceBagnet模型的res_4和res_5层,计算不同模态的res1、res2、res3,以及通过concat进行模态融合。在训练过程中,由于尺寸不匹配问题,对模型参数进行了调整,并最终使用softmax_cross_entropy_criterion解决了训练时的错误。
摘要由CSDN通过智能技术生成

1. 添加loss函数

分类问题,使用交叉熵。因为是活体和非活体二分类,所以可以使用BCE Loss。pytorch中的损失函数选择

criterion = bce_criterion

bce_criterion的话再utils.py中已经有写好了:

def bce_criterion(logit, truth, is_average=True):
    loss = F.binary_cross_entropy_with_logits(logit, truth, reduce=is_average)
    return loss

之后在循环中调用时使用的是(截取部分):

                logit,_,_ = net.forward(input)
                truth = truth.view(logit.shape[0])

                loss = criterion(logit, truth)
                precision,_ = metric(logit, truth)

2. 声明模型的res_4,res_5,填入生成res_4,res_5所需要的参数

在这里插入图片描述
上图是facebagnet中的示意图,是在resnext这个自定义的resnet结构的基础上改进的。
在这里插入图片描述
以上是resnext-50的结构示意表;
参考resnext的源码(截取部分):

class ResNeXt(nn.Module):

    def __init__(self, block, layers, num_classes=1000, num_group=32):
        self.inplanes = 64
        super(ResNeXt, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3,
                               bias=False)
        self.bn1 = nn.BatchNorm2d(64)
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
        self.layer1 = self._make_layer(block, 64, layers[0], num_group)
        self.layer2 = self._make_layer(block, 128, layers[1], num_group, stride=2)
        self.layer3 = self._make_layer(block, 256, layers[2], num_group, stride=2)
        self.layer4 = self._make_layer(block, 512, layers[3], num_group, stride=2)
        self.avgpool = nn.AvgPool2d(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值