1.每日一记

1.深度学习中,偏置(bias)在什么情况下可以要,可以不要?

卷积之后,如果接BN操作,就不要设置偏置,因为不起作用还要占显卡内存。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以,卷积之后,如果接BN操作,就不要设置偏置,因为不起作用还要占显卡内存。
在这里插入图片描述

2.模型加载报错,测试时候出现

raise RuntimeError(‘Error(s) in loading state_dict for {}:\n\t{}’.format(
RuntimeError: Error(s) in loading state_dict for YOLOX:
Missing key(s) in state_dict: “backbone.cbam_1.channelattention.fc1.weight”, “backbone.cbam_1.channelattention.fc2.weight”, “backbone.cbam_1.spatialattention.conv1.weight”, “backbone.cbam_2.channelattention.fc1.weight”, “backb
one.cbam_2.channelattention.fc2.weight”, “backbone.cbam_2.spatialattention.conv1.weight”, “backbone.cbam_3.channelattention.fc1.weight”, “backbone.cbam_3.channelattention.fc2.weight”, “backbone.cbam_3.spatialattention.conv1.weight”.

在这里插入图片描述
在这里插入图片描述
小记:这里修改了Yolox的网络结构,在neck前,backbone后加了注意力机制,但是测试时候加载的参数没有和架构对应,故之后加上了strict=Flase 之后即可成功运行在这里插入图片描述

3.os.mkdir()和os.makedirs()函数创建路径

 if not os.path.exists(trainDir):#如果不存在这个路径,即创建路径文件夹
                os.makedirs(str(trainDir))

os.mkdir() 函数
语法格式:
os.mkdir(path, mode=0o777, *, dir_fd=None)

使用数字模式mode创建名为path的目录。如果目录已经存在,则抛出异常FileExistsError。
在一些系统中,可以忽略mode,在一些平台可以通过调用chmod()来指定它们。mode就是所创建目录对应的文件及文件夹的读写权限,可以参考Linux命令下的chmod命令来理解。
*,dir_fd=None为命名关键字参数,具体作用不详。

os.makedirs()函数
语法格式:
os.makedirs(name, mode=0o777, exist_ok=False)

递归目录创建函数,和mkdir()很像,但是所有中间级目录都要包含叶目录。
递归创建目录,题中应有之意即路径中哪一层不存在,则自动创建。
区别于os.mkdir(path, mode=0o777, *, dir_fd=None),只创建最后一层的目录。
name:所要创建的目录
参数mode传递给mkdir();
如果exist_ok是False(默认),当目标目录(即要创建的目录)已经存在,会抛出一个OSError。

4.num_worker的设置

一般设置为机器cpu个数或者两倍物理cpu个数,这是网上的各路说法,真实情况还要实际根据自己的硬件进行测试,看cpu个数和核数
查看物理cpu(linux)个数情况:cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看物理cpu 的ID(linux)情况:grep 'physical id' /proc/cpuinfo | sort -u
输入:watch -n 1 nvidia-smi
在这里插入图片描述
1.当batch_size=128 ——>256(加倍)之后,相当于每次搬运的图片数量多了,训练速度减慢了显存占用多了,将近一倍多(不到两倍),gpu使用率基本保持到0-100%。
总结:batch-size加大,显存占用加大
2.当num_worker=2->20时候,训练速度飞快,速度提升很大,显存和gpu使用率不变,num_worker的数量和物理cpu的核数有关,有多少核就最多开多少个线程,多线程速度会加快
在这里插入图片描述

命令:ps -eH 看开了几个线程
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这里说的是一般为cpu的个数(我的物理cpu是2),如果机械性能很强的话,可以加到几百多,我都试了一下,大概15-18(一般我设置16/18)左右是比较合适的,越高反而会降低
在这里插入图片描述

测试速度代码如下:

import time
import torch.utils.data as d
import torchvision
import torchvision.transforms as transforms
 
if __name__ == '__main__':
    BATCH_SIZE = 100
    transform = transforms.Compose([transforms.ToTensor(),
                                    transforms.Normalize((0.5,), (0.5,))])
    train_set = torchvision.datasets.MNIST('\mnist', download=False, train=True, transform=transform)
    
    # data loaders
    train_loader = d.DataLoader(train_set, batch_size=BATCH_SIZE, shuffle=True)
    label = []
    for num_workers in range(50):
        train_loader = d.DataLoader(train_set, batch_size=BATCH_SIZE, shuffle=True, num_workers=num_workers)
        # training ...
        start = time.time()
        for epoch in range(1):
            for step, (batch_x, batch_y) in enumerate(train_loader):
                pass
        end = time.time()
        take_time = end - start
        print('num_workers is {} and it took {} seconds'.format(num_workers, take_time))
        label.append(take_time)
    min_numbers=[]
    min_number = min(label)
    print("需要最少的秒数seconds:",min_number)
    i=0
    for number in label:
        
        #当遍历到最小值时
        if number==min_number:
            min_numbers.append(i)
            
#         #当遍历到最大值时
#         elif number==max_number:
#             max_numbers.append(i)
        i+=1
    print("最快的num_worker数是:",min_numbers)

num_worker太高会卡在第一个epoch不动,我当时设置一千就会开始加载就卡住

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值