这毕竟是怎么一回事?
事变的因由是一位网友发现,在PyTorch中用NumPy来天生随机数时,受到数据预处置惩罚的限定,会多历程并行加载数据,但末了每个历程返回的随机数却是雷同的。
他还举出例子证明了本身的说法。
如下是一个示例数据集,它会返回三个元素的随机向量。这里接纳的批量巨细分别为2,工作历程为4个。
然后神奇的事变发生了: 每个历程返回的随机数都是一样的。
这个效果会着实让人有点一头雾水,就似乎数学应用题求小明走一段旅程必要耗费多少时间,而你却算出来了负数。
发现了题目后,这位网友还在GitHub上下载了凌驾10万个PyTorch库,用同样的方法产生随机数。
效果更加令人震动:居然有 凌驾95%的库都受到这个题目的困扰!
这此中不乏PyTorch的官方教程和OpenAI的代码,连特斯拉AI总监Karpathy也认可本身“被坑过”!
但有一说一,这个bug想要办理也不难:只必要在 每个epoch都重新设置seed,大概用 python内置的随机数天生器就可以制止这个题目。
到底是不是bug?
假如这个题目已经可以办理,为什么还会引起云云大的讨论呢?
由于网友们的重点已经上升到了“哲学”层面:
这到底是不是一个bug?
在Reddit上有人以为:这不是一个bug。
固然这个题目非经常见,但它并不算是一个bug,而是一个在调试时不可以忽略的点。
固然这个题目非经常见,但它并不算是一个bug,而是一个在调试时不可以忽略的点。
就是这个观点,激起了千层浪花,很多人都以为他忽略了题目的关键地点。
这不是产生伪随机数的题目,也不是numpy的题目,题目的焦点是在于 PyTorch中的DataLoader的实现
这不是产生伪随机数的题目,也不是numpy的题目,题目的焦点是在于 PyTorch中的DataLoader的实现
对于包罗随机转换的数据加载pipeline,这意味着每个worker都将选择“雷同”的转换。
而如今NN中的很多数据加载pipeline,都利用某种范例的随机转换来举行数据加强,以是不重新初始化大概是一个预设。
对于包罗随机转换的数据加载pipeline,这意味着每个worker都将选择“雷同”的转换。
而如今NN中的很多数据加载pipeline,都利用某种范例的随机转换来举行数据加强,以是不重新初始化大概是一个预设。
另一位网友也表现这个bug实在是 在预设步伐下运行才出现的,应该向更多用户指出来。
而且95%以上的Pytorch库受此困扰,也绝不是骇人听闻。
有人就分享出了本身此前的凄惨履历:
我熟悉到这一点是之前跑了很多历程来创建数据集时,然而发现此中一半的数据是重复的,之后花了很长的时间才发现那里出了题目。
我熟悉到这一点是之前跑了很多历程来创建数据集时,然而发现此中一半的数据是重复的,之后花了很长的时间才发现那里出了题目。
也有效户增补说,假如 95% 以上的用户利用时出现错误,那么代码就是错的。
趁便一提,这提供了Karpathy定律的另一个例子:纵然你搞砸了一些非常根本代码,“neural nets want to work”。
趁便一提,这提供了Karpathy定律的另一个例子:纵然你搞砸了一些非常根本代码,“neural nets want to work”。
如上的bug并不是偶尔,随着用PyTorch的人越来越多,被发现的bug也就越来越多,某乎上另有PyTorch的坑之总结,被欣赏量高达49w。
此中从向量、函数到model.train,无论是真bug照旧本身出了bug,各人的血泪史还真的是各有千秋。
以是,关于PyTorch你可以分享的履历 血泪史吗?
接待批评区留言讨论~
— 完—
本文系网易消息•网易号特色内容鼓励筹划签约账号【量子位】原创内容,未经账号授权,克制随意转载。
参加AI社群,拓展你的AI行业人脉
量子位「AI社群」招募中!接待AI从业者、关注AI行业的小同伴们扫码参加,与 50000+名挚友共同关注人工智能 行业发展&技能希望:
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技能和产物新动态
一键三连「分享」、「点赞」和「在看」
科技前沿希望日日相见~返回搜狐,检察更多