学习记录#Datawhale AI 夏令营#DeepFake攻防

实验记录:

1、Resnet18

数据1000,epoch 2,bachsize 40,score 0.57

2、Efficientnet_b0

数据1000,epoch 2,bachsize 40平均acc 61   score 0.51

数据1000,epoch 15,bachsize 40平均acc 64.7   score 0.707

3、Efficientnet_b1

数据1000,epoch 15,bachsize 32平均acc 68   score ?

数据10000,epoch 2,bachsize 32平均acc 78 

数据all epoch 5,bachsize 64平均acc 81 socer  0.961

4、Efficientnet_b4

数据1000,epoch 15,bachsize 40平均acc 73   score 0.824

数据1000,epoch 15,bachsize 32平均acc 75   score ?

数据100000 ,epoch 2 ,bachsize50,平均acc77 score 0.939

数据100000 ,epoch 2 ,bachsize32,平均acc79 score

说明bs32的结果优于bs50

数据all epoch 2,bachsize50,平均acc 83.494  score 0.969

best数据all epoch 5,bachsize32,平均acc86.046  score0.978 跑了9h 太久了

遇到的问题:

1、代码中出现top1,什么是top1准确率?

首先准确率acc:就是(真阳+真阴)/样本总数

top1----- 就是你预测的label取最后概率向量里面最大的那一个作为预测结果,如过你的预测结果中概率最大的那个分类正确,则预测正确。否则预测错误
top5----- 就是最后概率向量最大的前五名中,只要出现了正确概率即为预测正确。否则预测错误。

2、Timm是否支持transformer?

       支持,有vit模型

3、出现内存溢出错误

用了efficientnet_b4,模型太大,更换为b1就可以跑了

3、output一直转圈圈

kaggle中训练得到的output太大该怎么下载? - Xmasker^_^ - 博客园 (cnblogs.com)

4、怎么把本地的模型放到kaggle上运行?

Kaggle上传自己训练的模型进行比赛提交_kaggle上传模型-CSDN博客

5、怎么加载自己的模型

load_state_dict函数

import timm

model = timm.create_model('efficientnet_b4', pretrained=False, num_classes=2)

save_dir = '/kaggle/input/model-efb4-all-89-26/model_89.26.pt'

model.load_state_dict(torch.load(save_dir))#加载模型参数

model = model.cuda()

6、数据增强会产生新数据吗?

数据增强本身不会永久性地生成新的数据样本,而是动态地对现有数据进行变换。例如,每次从数据集中加载一个图像时,数据增强变换会随机应用到该图像上。这意味着在每个训练迭代中,同一个图像可能会以不同的变换形式出现,从而提高数据的多样性。

代码解析:

def train(train_loader, model, criterion, optimizer, epoch):
    batch_time = AverageMeter('Time', ':6.3f')
    losses = AverageMeter('Loss', ':.4e')
    top1 = AverageMeter('Acc@1', ':6.2f')
    progress = ProgressMeter(len(train_loader), batch_time, losses, top1)#len(train_loader)就是train总的批次数

    # switch to train mode
    model.train()

    end = time.time()
    for i, (input, target) in enumerate(train_loader): #input和target都是一个批次里的所有数据
        input = input.cuda(non_blocking=True)#non_blocking=True表示异步加载数据,加快训练速度
        target = target.cuda(non_blocking=True)

        # compute output
        output = model(input)
        loss = criterion(output, target)

        # measure accuracy and record loss
        losses.update(loss.item(), input.size(0))#input.size(0)表示batch_size
        '''acc的计算方法:
            output.argmax(1)表示每个样本的预测类别。view(-1)表示将张量展平。
            output.argmax(1).view(-1) == target.float().view(-1) 结果例如是 [True, True, True],表示所有预测都正确。
            .float() 将布尔张量转换为浮点数 [1.0, 1.0, 1.0]。
            .mean() 是求均值 结果是 1.0
            乘以 100 后,准确率是 100.0%。
       '''
        acc = (output.argmax(1).view(-1) == target.float().view(-1)).float().mean() * 100 
        top1.update(acc, input.size(0))

        # compute gradient and do SGD step
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        # measure elapsed time
        batch_time.update(time.time() - end)
        end = time.time()

        if i % 100 == 0:
            progress.pr2int(i)
class ProgressMeter(object):#进度条,用于显示训练到哪一个batch了
    def __init__(self, num_batches, *meters):#num_batches是int类型,*meters是可变参数列表
        self.batch_fmtstr = self._get_batch_fmtstr(num_batches)
        self.meters = meters
        self.prefix = "Batch"

    def _get_batch_fmtstr(self, num_batches):
        num_digits = len(str(num_batches // 1))#num_batches//1是整数除法,取整
        fmt = '{:' + str(num_digits) + 'd}'#fmt = '{:2d}'
        return '[' + fmt + '/' + fmt.format(num_batches) + ']'# [{:2d}/num_batches]

    def pr2int(self, batch):
        entries = [self.prefix + self.batch_fmtstr.format(batch)] #entries列表[[batch/num_batches]]
        entries += [str(meter) for meter in self.meters]#将meter添加到列表中,entries = ["Batch(5/100)", "Loss: 0.1234", "Accuracy: 95.67%"],调用类方法__str__   
        print('\t'.join(entries))#'\t'.join(entries) 会将 entries 列表中的所有字符串以制表符 '\t'(空格) 连接在一起,生成一个新的字符串。
        # 输出: "Batch (5/100)    Loss: 0.1234    Accuracy: 95.67%"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值