问题描述
下面的代码,我在pycharm点run是可以正常运行的,但是加了断点调试后就出现了在DataLoader处卡住的问题
import torch
import numpy as np
# 定义GetLoader类,继承Dataset方法,并重写__getitem__()和__len__()方法
class GetLoader(torch.utils.data.Dataset):
# 初始化函数,得到数据
def __init__(self, data_root, data_label):
self.data = data_root
self.label = data_label
# index是根据batchsize划分数据后得到的索引,最后将data和对应的labels进行一起返回
def __getitem__(self, index):
data = self.data[index]
labels = self.label[index]
return data, labels
# 该函数返回数据大小长度,目的是DataLoader方便划分,如果不知道大小,DataLoader会一脸懵逼
def __len__(self):
return len(self.data)
a = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9],
[1, 2, 3], [4, 5, 6], [7, 8, 9],
[1, 2, 3], [4, 5, 6], [7, 8, 9],
[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = torch.tensor([44, 55, 66,
44, 55, 66,
44, 55, 66,
44, 55, 66])
torch_data = GetLoader(a, b)
torch_data[0:2]
# (tensor([[1, 2, 3],
# [4, 5, 6]]),
# tensor([44, 55]))
from torch.utils.data import DataLoader
# 读取数据
datas = DataLoader(torch_data, batch_size=5, shuffle=True, drop_last=False, num_workers=2)
for i, data in enumerate(datas):
# i表示第几个batch, data表示该batch对应的数据,包含data和对应的labels
print("第 {} 个Batch \n{}".format(i, data))
Debug模式
第一次进入到这个位置是可以的,但是继续Step Over,进行for循环时,会卡住,程序一直在运行状态!


解决方法
把DataLoader中的参数num_workers 设为 0即可
2122

被折叠的 条评论
为什么被折叠?



