原文链接:https://github.com/d-li14/mobilenetv2.pytorch/blob/1733532bd43743442077326e1efc556d7cfd025d/imagenet.py#L374.
一、for in if 的使用
用处:过滤掉那些不满足条件的结果项 示例:
>>> L = [1, 2, 3, 4, 5, 6]
>>> L = [x for x in L if x % 2 != 0]
>>> L
[1, 3, 5]
二、argparse.ArgumentParser()用法
相关文章链接:https://blog.csdn.net/lizhiyuanbest/article/details/104975848. 和http://blog.chinaunix.net/uid-21633169-id-4387657.html. 用处:高效地接受并解析命令行参数 三个步骤:
1.创建 ArgumentParser() 对象
parser = argparse.ArgumentParser(description='Process some integers.')
2.调用 add_argument() 方法添加参数
parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator')
3.使用 parse_args() 解析添加的参数
>>> parser.parse_args(['--sum', '7', '-1', '42'])
Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42])
三、设置随机种子
相关文章链接:https://www.zhihu.com/question/288350769/answer/1344058217. 用处:在神经网络中,参数默认是进行随机初始化的。如果不设置的话每次训练时的初始化都是随机的,导致结果不确定。如果设置初始化,则每次初始化都是固定的。
四、Logger日志函数
//待补充
五、OrderedDict有序字典
相关文章链接:https://www.cnblogs.com/notzy/p/9312049.html. 用处:记住元素插入顺序并按顺序输出
六、评价指标的记录
原代码中运用AverageMeter()类实现。
class AverageMeter(object):
def __init__(self):
self.reset()
def reset(self):
self.val = 0
self.avg = 0
self.sum = 0
self.count = 0
def update(self, val, n=1):
self.val = val
self.sum += val * n
self.count += n
self.avg = self.sum / self.count
一些常用的指标: batch_time(衡量训练一个batch的时间)、data_time(衡量一个batch加载数据的时间)、losses 、top1 、top5
七、CNN中几个固定常用模板
(1)DataLoader中collate_fn()函数
def fast_collate(batch):
imgs = [img[0] for img in batch]
targets = torch.tensor([target[1] for target in batch], dtype=torch.int64)
w = imgs[0].size[0]
h = imgs[0].size[1]
tensor = torch.zeros( (len(imgs), 3, h, w), dtype=torch.uint8 )
for i, img in enumerate(imgs):
nump_array = np.asarray(img, dtype=np.uint8)
tens = torch.from_numpy(nump_array)
if(nump_array.ndim < 3):
nump_array = np.expand_dims(nump_array, axis=-1)
nump_array = np.rollaxis(nump_array, 2)
tensor[i] += torch.from_numpy(nump_array)
return tensor, targets
(2)正确率accuracy()函数
def accuracy(output, target, topk=(1,)):
"""Computes the precision@k for the specified values of k"""
with torch.no_grad():
maxk = max(topk)
batch_size = target.size(0)
_, pred = output.topk(maxk, 1, True, True)
pred = pred.t()
correct = pred.eq(target.view(1, -1).expand_as(pred))
res = []
for k in topk:
correct_k = correct[:k].view(-1).float().sum(0)
res.append(correct_k.mul_(100.0 / batch_size))
return res
其中,topk表示选择的模式,topk=(1,)即Top1,top=(1,5)即Top1和Top5。
八、Bar柱状图的使用
//待补充
九、可视化SummaryWriter
相关链接:https://www.jianshu.com/p/46eb3004beca.和https://blog.csdn.net/weixin_47873308/article/details/111313102.
|