竞价移动网站,wordpress js 添加,wordpress有手机版吗,wordpress外贸企业模板下载模型训练时CPU和GPU大幅度波动——可能是数据的加载拖后腿
问题
在进行猫狗大战分类任务时#xff0c;发现模型训练时CPU和GPU大幅度波动#xff0c;且模型训练速度很慢。
原因
初步分析可能是数据加载#xff08;包括数据的transform#xff0c;我用了Resize#…模型训练时CPU和GPU大幅度波动——可能是数据的加载拖后腿
问题
在进行猫狗大战分类任务时发现模型训练时CPU和GPU大幅度波动且模型训练速度很慢。
原因
初步分析可能是数据加载包括数据的transform我用了ResizeToTensorNormalize这三个操作的的速度太慢于是通过计算一个epoch数据加载的时间来判断最后发现数据加载的数据和一个epoch训练的时间差不太多(因为用的模型较小是ResNet18如果模型比较大训练时间比数据加载时间大得多的时候这种情况CPU和GPU的波动频率和幅度会好很多情况最好的是在训练一个完batch的数据前下一个batch的数据已经准备好了)。测量加载时间代码如下
import time
from torch.utils.data import DataLoaderdata_loader DataLoader(dataset, batch_size64)
start_time time.time()# 遍历数据加载器中的所有批次
for i, data in enumerate(data_loader):passend_time time.time()
# 计算并打印整个数据读取的时间
total_time end_time - start_time
print(fTotal data loading time: {total_time:.4f} seconds)然后再计算训练一个epoch的时间若没有比加载数据的时间大很多的话大概率就是数据加载拖后腿了。
解决方法
我使用的是方法是将所有数据一次性读入内存中避免频繁进行磁盘IO这样集中把所有数据读出来的时间要比一边训练一边读要快的多使用较小的模型一般数据量不大全部读入内存应该没什么问题如果数据量较大呢这时候用的模型一般也会较大训练的时间占据主导这时候就基本不会出现gpu等待数据的情况了。以猫狗大战这个任务来说自定义的Dataset如下关键代码后用!!!..表示
class CatDogDataset(Dataset):def __init__(self, root_dir, transformNone, testFalse):self.root_dir root_dirself.transform transformself.image_paths []self.image_data [] # !!!!!!!!!!!!!!!!!!! self.labels []self.test testfor filename in os.listdir(root_dir):if filename.endswith(.jpg):image_path os.path.join(root_dir, filename)image Image.open(image_path).convert(RGB) # 转换为RGB格式if self.transform:image self.transform(image)self.image_paths.append(image_path) self.image_data.append(image) # !!!!!!!!!!!!!!!!!!!! 将所有图片读到内存进来if not test:if cat in filename:self.labels.append(0) # cat 类别标记为 0elif dog in filename:self.labels.append(1) # dog 类别标记为 1def __len__(self):return len(self.image_data)def __getitem__(self, idx):if self.test:return self.image_data[idx], self.image_paths[idx] # 测试集返回图像及其路径else:return self.image_data[idx], self.labels[idx]