孤独症(7)

1

今天是2025.2.19,我开始今天的学习,为了提高学习效率,直到吃晚饭前我不玩手机,不看小说,每学25分钟可以玩一把炉石传说竞技场。另外我的自行车坏了,今天要尽量修好。

2

昨天我把混淆矩阵搞定了,基于混淆矩阵的概念,提出了敏感度和特异度,敏感度就是正确的样本被正确的预测概率,即为正确的样本被正确预测/(正确的样本被正确预测+错误的样本被正确预测),也就是TP(T代表预测对了,P代表结果为正),TN(T代表预测对了,N代表结果为负类),FN(F代表预测错了,N代表预测的为负类),FP(F代表预测错了,P代表预测的为正类)
那么TP/TP+FN就是敏感度,TN/TN+FP就是特异度。

3

            self.logger.info(" | ".join([
                f'Epoch[{epoch}/{self.epochs}]',
                f'Train Loss:{self.train_loss.avg: .3f}',
                f'Train Accuracy:{self.train_accuracy.avg: .3f}%',
                # f'Edges:{self.edges_num.avg: .3f}',
                # f'Test Loss:{self.test_loss.avg: .3f}',
                f'Val Accuracy:{self.val_accuracy.avg: .3f}%',
                f'Test Accuracy:{self.test_accuracy.avg: .3f}%',
                f'Val AUC:{val_result[0]:.2f}',
                f'Test AUC:{test_result[0]:.4f}',
                f'Test SEN:{SEN:.4f}',
                f'Test SPE:{SPE:.4f}'
            ]))

我说这一大串是啥啊,原来就是result里面的日志信息。logger.info就是把小括号里面的内容保存在日志里。" | "就是把这些不同的日志信息通过|分隔开。
这些日志信息从上到下依次为第几轮,损失函数,训练准确度,验证准确度,测试准确度,以及AUC,AUC其实就是判断对的结果/总结果,也是判断模型性能的一个指标。感觉AUC和SEN,SPE的功能有点重复。

4


            txt += f'Epoch[{epoch}/{self.epochs}] '+f'Train Loss:{self.train_loss.avg: .3f} '+f'Train Accuracy:{self.train_accuracy.avg: .3f}% '+f'Val Accuracy:{self.val_accuracy.avg: .3f}% '+f'Test Accuracy:{self.test_accuracy.avg: .3f}% '+f'Val AUC:{val_result[0]:.3f} '+f'Test AUC:{test_result[0]:.4f}'+f'Test SEN:{SEN:.4f}'+f'Test SPE:{SPE:.4f}'+'\n'

            training_process.append([self.train_accuracy.avg, self.train_loss.avg,
                                     self.val_loss.avg, self.test_loss.avg]
                                    + val_result + test_result)

看一下这段,txt里面保存的内容倒是挺多的,training_process本身就是列表,还存储了若干个列表,存储了训练集的平均准确率,平均损失,测试集的平均损失

5

        now = datetime.now()
        date_time = now.strftime("%m-%d-%H-%M-%S")
        self.save_path = self.save_path/Path(f"{self.best_acc: .3f}%_{date_time}")
        if self.save_learnable_graph:
            self.generate_save_learnable_matrix()
        self.save_result(training_process, txt)

我以前看不懂那个结果,
在这里插入图片描述
现在我理解了,在strfime的用法中month就是月,day就是天,hour就是小时,minute就是分钟,second就是秒。像我这个运行的结果就是1月28号14点8分8秒。下面那个/是一个拼接符,把最优准确率和时间拼一块。

6

train函数其实我看懂了,就是一些小函数我还需要再看看

    def train_per_epoch(self, optimizer):


        self.model.train()
        for data_in, pearson, label, pseudo in self.train_dataloader:

            label = label.long()

            data_in, pearson, label, pseudo = data_in.to(
                device), pearson.to(device), label.to(device), pseudo.to(device)

            inputs, nodes, targets_a, targets_b, lam = mixup_data(
                data_in, pearson, label, 1, device)

            [output, score], learnable_matrix, edge_variance = self.model(inputs, nodes, pseudo)

            loss = 2 * mixup_criterion(
                self.loss_fn, output, targets_a, targets_b, lam)

            if self.group_loss:
                loss += mixup_cluster_loss(learnable_matrix,
                                           targets_a, targets_b, lam)

            # loss += 0.001*topk_loss(score, self.pool_ratio)

            self.train_loss.update_with_weight(loss.item(), label.shape[0])
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
            top1 = accuracy(output, label)[0]
            self.train_accuracy.update_with_weight(top1, label.shape[0])
            self.edges_num.update_with_weight(edge_variance, label.shape[0])

这段代码确实有点晦涩难懂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值