当对通过Dataloader得到的数据进行enumerate()索引运算时,出现““_pickle.UnpicklingError: pickle data was truncated”错误
当运行代码如下:
for i, (images, labels) in enumerate(train_data_loader,0):
出现了上述的错误
在程序中并没有直接用到pickle库,出现上面错误不明就里。有一次我将电脑重启后,发现可以运行,我怀疑是因为在运行过程中某些变量没有清理完整,再次运行会与之前存储的数据发生冲突。也有可能是因为用Dataloader生成的train_data_loader的数量过大造成了溢出或者是直接截断(truncate)产生错误。我试着Dataloader中的batch_size的大小。
train_data_loader = DataLoader(dataset=train_data,
num_workers=1,
batch_size=16, #目标将batch_size=64改为16,解决了enumerate过程出错的问题,同时也防止通过CUDA利用GPU运算时内存不够的问题
shuffle=True,
pin_memory=True)
目标将batch_size=64改为16,解决了enumerate过程出错的问题,同时也防止通过CUDA利用GPU运算时内存不够的问题。
成功运行,解除错误
330
331
Epoch [1], Iter[332], Time:385.329348326, learning rate : 0.000199897, Train Loss: 0.461626321 Test Loss: 0.031681120