第26章 计划大变(1/2)
之后的几天,陈一然继续窝在公寓里写代码。
就是当茉莉的人肉键盘,每天推个一两小时。deepflow的自动微分引擎已经搭了个架子,但反向传播那块始终没跑通,茉莉昨天改了激活函数的实现,今天又要接著调。
【第十二行,把那个sigoid换成tanh,括號里改成hidden_output。】
陈一然照著打,textate的代码补全倒是能弹出来,但弹的都是不相关的东西,他得一个字母一个字母敲。
【然后dden_output的转置。】
“等等——转置怎么写来著”
【t,加在变量后面。】
他打完了,运行,teral里蹦出来一行报错。维度不匹配。
【hidden_output的shape应该是64乘1,你前面加一个reshape。】
“哪一行”
【第四十七行。】
他翻上去找到第四十七行,果然,少了个reshape。加了,再跑,还是报。这回是learng_rate的问题,太大了,梯度爆炸。
陈一然靠在椅背上嘆了口气,这种调参的活最烦,不是逻辑错,就是数值不对,改一个地方牵一串。
茉莉理论都懂,但也得靠他一次次运行、看报错、改、再跑。
折腾了一个多小时,总算跑通了。
但loss掉得太慢了,一条几乎水平的线,两百个epoch才降了零点零几,照这个速度得跑到明年。
【可能是权重初始化的问题。目前用的是全零初始化,这会导致所有隱层神经元输出相同,反向传播时梯度也完全一样。】
“说人话。”
【把第二十三行和第二十五行的np.zeros改成np.rando.randn,除以sqrtofhidden_size。】
“sqrt就这么直接打吗”
【np.sqrt,括號里写hidden_size。】
两处都改完,试著运行了下。这回loss曲线明显陡了不少,但跑到第五十个epoch突然一个nan蹦出来,整个训练废了。
“又炸了。”
【learng_rate还是太大。0.1对隨机初始化来说偏高,先降到0.01试试。】
“刚才不是说0.1太大吗,怎么又大了”
【之前是零初始化,梯度小,0.1勉强能跑。现在换成隨机初始化,初始梯度大了,0.1就过了。】
“你能不能一步到位行了,今天先到这吧,我脑子都快炸了。话说,你就不能想好了,再让我打吗。”
【你的意思是,我可以对你的大脑进行更深度的调用,不用保持低状態运行了如果可以,我可以完全推演大部分运行情况。请提前准备好补给品和冰块。】
“没!我说说的,这样挺好。”
不再理天天说真话很烦人的茉莉,陈一然打电话叫了个披萨。
刚要放下电话,徐力的简讯就来了:“提单到了!货代刚发我邮箱了!我给你也发了一份,这个要给国內看吧。”
陈一然去电脑上开gail,果然有一封徐力转发的globalautoshippg邮件,標题“billofdg-2xianj”。提单附件打开扫了一眼——船名sdevelopnt,航次0042w,两辆ne的v號都对上了。etdnewarkfeb17,也就是今天周三开的船,eta天津港大概四周后。
陈一然赶紧转发给了王经理,然后给徐力说了一声。
徐力回了个搓手的表情。
他放下手机,有一搭没一搭地刷著人人网。
披萨到得很快,他一边吃一边继续高强度在人人上衝浪。
最近他已经成为了eli传奇,新生3周就去考托福考了个满分。天天不用上课,在家睡觉刷人人,到处回復閒得要死。
很多前世很熟悉的朋友,这辈子虽然不太熟了,但是在网上建立了联繫。
一个披萨吃完,还有点饿的陈一然乾脆开车去ae进行了一番採购。
茉莉的存在,让陈一然可以安心地暴饮暴食,反正大不了头枕冰块让茉莉疯狂运转一段时间。
本章未完,点击下一页继续阅读。