0%

记一次调试神经网络

一个本来很简单的任务,把一个神经网络跑起来看看效果,愣是给我整了快一周,过程可谓是一步一坑,而且遇到的问题得到解决后看起来都好蠢。

首先拿到一个网络,当然第一步是安装环境,看了一下用的pytorch,电脑里没有,于是安装之
pip install https://download.pytorch.org/whl/cu80/torch-1.0.1.post2-cp27-cp27mu-linux_x86_64.whl
此时第一个问题出现了,它告诉我找不到pytorch的whl包,仔细确认了各种版本都没写错,那么问题就是我的pip版本用错了,因为同时装了python2和python3的缘故吧,pip改成pip2,成了
内心疯狂吐槽自己,你是沙雕吗,别人都是pip默认表示pip2,pip3才是pip3,哪有你这反过来的pip默认pip3
十几k的小水管啊缓缓地流,一天过去了。。。
然后把网络输入输出改好,看起来似乎没什么问题了,跑起,报错,嗯,意料之中,哪有一蹴而就的事
看一下,报pytorch的size不对,估摸着就是网络输入数据这一块没搞好了,print大法debug之,定位到出错的地方,原来是一个超参数忘了改,到这里看似轻描淡写,实际又过去了一天
改好之后,再跑起来,成了,开始训练了,epoch1,epoch2,epoch3,epoch4,epoch5,cuda out of memory…WHAT!?搞啥子哦,四张泰坦的服务器你给我讲out of memory?
funny马的屁.jpg
啊不对不对,一定是哪里搞错了,既然能跑5个epoch了说明代码ok的,再跑一遍试试,万一玄学嘛
保险起见,跑之前来一发
torch.cuda.empty_cache()
再跑,得,干脆一个epoch都跑不来了直接报错,还是out of memory,【讲粗话】
冷静,想一下,我用的数据是长序列,会不会是这个原因?于是把数据下采样,再来一遍。
还是报错,不过这次错误不太一样,查了一下,是因为网络源代码使用的是0.3.0版本的pytorch,而我用的是最新的1.0.1,于是有些接口比如data.loss[0]不支持了,怎么办呢,该不会要我卸载重装吧,有り得ない!
手动一处处把报错的地方改为最新的接口,又一天过去了
改完,再跑,out of memory…你搞我吗?
挠头.jpg
大概又尝试了那么三四五六七八次,无果,最终决定,妥协,下载0.3.0版的pytorch,这一下,就是一天
终于,崭新的(并不)pytorch下好了,跑起,out of mem…两眼一黑

1
2
import torch
print(torch.__version__)

看一下pytorch,版本1.0.1,你在耍我吗?
终端往上翻一下安装信息,没错啊安装,成功了啊,torchvision也还ok啊,嗯?torchvision?嗯?你怎么还装了一大堆东西?怎么还有torch?卧槽torchvision还自带帮你升级pytorch版本的服务这么丧心病狂的吗?
Fine,再次卸载1.0.1,这次学乖了,先装torchvision,再装pytorch
Finally,模型顺顺利利地跑起来了,你以为悲惨的故事结束了吗?Naive!
当训练了一大半的时候,我想看一下显卡的状态怎么样,占用了多少,于是控制台`nvidia-smi,得,这一下,网络训练到一半直接宕了,报了不知道在讲啥的错误,还好一边训练一边有保存模型,不然哭都不知道去哪哭。

总结一下,这一番折腾收获还是有的,让我明白了一个道理:

辣鸡机器学习
人生重来算了.jpg