AttributeError: 'torch.dtype' object has no attribute 'type'

最近试一下环境配置,然后重新跑了SiamFC代码,代码链接如下:SiamFC-PyTorch
在这里插入图片描述

配置要求是:python2.7 python-opencv PyTorch0.4

首先处理imageNet数据集,由于没有写多线程处理,整整花了两天的时间才跑完,服务器累我心更累,由此可见多线程的重要性。处理完数据后就开始训练模型了,把batchsize 调到了64,因为128出现了GPU内存不足的报错,跑到输出train loss和validation loss时报如下错,在使用np.mean()这块报错,查了一下,把np.mean()改为np.mean().item(),依然报错,最后改成torch.mean(torch.stack(my_list)),才正确。
np.mean()输入list可以,array也可以
torch.mean()必须输入tensor,最后得到的结果也是tensor
torch.stack()沿着某个维度进行堆叠数据,参考
AttributeError: 'torch.dtype' object has no attribute 'type'_第1张图片
后续debug了一下,
train_loss.append(loss.data)
train_loss是一个list,而loss是一个tensor,所以np.mean()会报错
AttributeError: 'torch.dtype' object has no attribute 'type'_第2张图片
那torch.stack()堆叠以后是什么效果呢?
AttributeError: 'torch.dtype' object has no attribute 'type'_第3张图片
变成了tensor,这样就可以torch.mean(),得到了一个tensor
AttributeError: 'torch.dtype' object has no attribute 'type'_第4张图片

顺便再补一下多线程的知识:
首先导入:
from multiprocessing import Pool
#总共4417个视频

all_videos=glob(os.path.join(video_dir,'train/ILSVRC2015_VID_train_0000/*'))+
                  glob(os.path.join(video_dir,'train/ILSVRC2015_VID_train_0001/*'))+
                  glob(os.path.join(video_dir,'train/ILSVRC2015_VID_train_0002'*'))+
                  glob(os.path.join(video_dir,'train/ILSVRC2015_VID_train_0003'*'))+
                  glob(os.path.join(video_dir,'val/*'))
with Pool (processes=num_threads)  as pool:
   for ret in tqdm(pool.imap_unordered(functools.partial(worker,output_dir),all_videos),total=len(all_videos));
 worker()是一个读取数据的函数

Python中,multiprocessing库中Pool类代表进程池,其对象有imap()和imap_unordered()方法。
imap返回结果顺序和输入相同,imap_unordered则为不保证顺序。

参考如下:博客

你可能感兴趣的:(代码报错)