RuntimeError: CUDA error: an illegal memory access was encountered

使用pytorch进行文字识别时出现标题上的错误。

 

1、在训练前添加如下语句:

torch.backends.cudnn.benchmark = True

没用

 

2、将 batch_size 从 64 改为 32。

没用

 

3、在训练前添加如下语句:

torch.cuda.set_device(id)

我只有一个显卡,所以id=0,解析查看:https://discuss.pytorch.org/t/runtime-error-77/9392/9

没用

 

4、这个方法解决了

参考:https://discuss.pytorch.org/t/weird-cuda-illegal-memory-access-error/8848/9

出错原因:我自己有4000个常用字的字典,所以最后网络输出层的维度为4000。在训练过程中如果训练集图片中包含字典里没有的汉字,则添加到该字典中,所以字典长度就不为4000了,所以就会出现报错。

解决方法:可以提前把训练集中新的汉字加到字典中,或者在训练过程中不把新的汉字加到字典中。

 

 

2019.07.01 更新。。。

 

最近又出现这个问题了,检查了很久,才发现是对python的一个用法不熟悉导致的。

 

文本识别的数据是非常庞大的,所以我就先将它们制作成 lmdb 数据库,这有一篇比较好的教程:https://zhuanlan.zhihu.com/p/70359311

 

标签文件中的每一行如下:

'0019365.jpg 进击的巨人\n'

因为是从txt文件中读取的,所以最后有一个换行符。

 

现在我需要将图片名和文本标签分别读取出来,

line = '0019365.jpg 进击的巨人\n'
print(line.split())

输出结果为:['0019365.jpg', '进击的巨人'],是的没错,换行符自动被去除了。

 

然后文本标签中有空格的话,上面的方法就不行了,

line = '0019365.jpg 进击的巨人 兵长\n'
print(line.split())

输出结果为:['0019365.jpg', '进击的巨人', '兵长'],这被分成三份了。

 

所以我改用了如下方法:

line = '0019365.jpg 进击的巨人 兵长\n'
print(line.split(' ', 1))

输出结果为:['0019365.jpg', '进击的巨人 兵长\n'],这里只分为了两份,但是!!!它没有去除换行符!!!这是我之前没有发现的,所以加上换行符一起被当做了文本标签。

 

然后就出现标题上的那个错误了。。。

 

 

你可能感兴趣的:(错误警告,pytorch)