六、肺癌检测-训练指标和数据增强

上一篇文章讲了训练过程和tensorboard可视化,这一篇文章记录下训练指标和数据增强的东西。

五、肺癌检测-数据集训练 training.py model.py_wxyczhyza的博客-CSDN博客

一、目标

1. 记录精度、召回率、F1分数

2. 样本均衡和样本随机化

3. 数据增强

二、要点

1. 精度、召回率、F1分数

精度、召回率、F1分数概念可参考文章:

召回率,精确度,准确率,F1分数的区别_wxyczhyza的博客-CSDN博客

 2. 样本均衡化和样本随机化

由于数据中肿瘤只占所有结节的极少数,直接训练时会导致模型被训练成偏向将结果预测为正常结节,所以要对样本进行平衡和随机化,避免某个batch中出现所有样本只有正常结节没有肿瘤。

具体步骤:将正样本放在pos_list中,负样本放在neg_list中,当调用dataset的getiem(index)时,计算这个index是正样本还是负样本,并从对应的pos_list或neg_list中索引对应的样本返回。

假设希望正常结节和肿瘤数量的比例ratio=2,当使用dataset的getitem通过下标索引样本时,希望得到的样本为:

数据集

索引

Index

0123456789转换公式

肿瘤+

正常-

+--+--+--+

pos_list索引

Index_P

0123Index_P = Index // (ratio+1)

neg_list索引

Index_N

012345Index_N = Index -1- Index_P

举例:当ratio_int=2, 输入dataset的index为101,则:

① 101/ (2+1) = 33.6...,不能被3整除,证明是一个负样本,它对应的正样本的索引Index_P=33

② 负样本的索引Index_N = 101 -1 - 33 = 67

书中部分代码如下:

# dsets.py __init__函数代码
# 正常结节
self.negative_list = [
    nt for nt in self.candidateInfo_list if not nt.isNodule_bool
]
# 肿瘤
self.pos_list = [
    nt for nt in self.candidateInfo_list if nt.isNodule_bool
]
# dsets.py def getitem()
if self.ratio_int:
    pos_ndx = ndx // (self.ratio_int + 1)

    if ndx % (self.ratio_int + 1):  # 负样本
        neg_ndx = ndx - 1 - pos_ndx
        neg_ndx %= len(self.negative_list)  # 求余数防止下标溢出
        candidateInfo_tup = self.negative_list[neg_ndx]
    else:
        pos_ndx %= len(self.pos_list)  # 求余数防止下标溢出
        candidateInfo_tup = self.negative_list[pos_ndx]
else:
    candidateInfo_tup = self.candidateInfo_list[ndx]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值