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'],这里只分为了两份,但是!!!它没有去除换行符!!!这是我之前没有发现的,所以加上换行符一起被当做了文本标签。

 

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

 

作者简介

我是阿德,一名五年工作经验的软件开发工程师,985高校非科班程序员,热爱编程与开源,

此公众号【程序员阿德】专注于分享各种计算机干货,包括但不限于计算机组成原理、数据结构与算法、计算机网络、操作系统、数据库、Linux等。

相信你能够在这里有所收获,精进为一名优秀程序员,我们一起加油~

更多硬核技术和编程干货,可以关注公众号 [程序员阿德] 获取

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值