第623章 这框架简直是神器!

    两人凑近了屏幕,开始从基础模块往下看。

    因为有着非常明确的目标——搭建一个用于图像分类的神经网络,他们直接跳过了闲篇,直奔核心API。

    鼠标滚轮不断向下滑动,安静的客厅里只有“咔哒咔哒”的声音。

    几分钟后,郭长征突然倒吸了一口凉气。

    “等会儿!一航,你把页面往上拉一点。”郭长征指着屏幕。

    楚一航照做,页面停在了一个名为“自动微分”的章节。

    “卧槽,这也可以?”楚一航脱口而出,声音都提高了八度。

    郭长征死死盯着那几行示例代码,脸上的表情极为震撼。

    “一航,这文档上写的,是真的吗?”郭长征指着屏幕的手指甚至有点发颤。

    “它说,我们只需要定义好前向传播的计算过程,框架就能自动帮我们求导?”

    楚一航也是一脸没见过世面的样子,逐字逐句地又看了一遍。

    “郭老师,文档上确实是这么写的。它甚至包装好了一个叫梯度下降优化器的东西。”

    郭长征猛地拍了一下大腿,发出一声脆响。

    要知道,在2009年这个时间节点,要在底层从零开始手写一个神经网络,简直是所有科研人员的噩梦。

    噩梦的根源,不在于怎么把数据乘起来,而在于怎么把误差传回去。

    这就是反向传播算法。

    科研人员需要拿着纸和笔,运用高等数学里的链式法则,对着错综复杂的网络层,一层一层地去推导偏导数公式。

    稍微多加一层网络,或者换一个非线性激活函数,几十页的数学草稿纸就白写了,必须全部推倒重来。

    哪怕公式推导对了,把它转化成C语言或者C++代码时,稍有一个变量写错,模型就会原地爆炸,梯度直接消失或者数值溢出。

    “这等于是把最折磨人的数学推导过程,全给省略了?”郭长征觉得嗓子有点干。

    “只要告诉它怎么算出来的结果,它自己就能算出怎么调整参数?”

    楚一航看着文档上的示例,只要调用一个简单的函数,所有的梯度就全部计算完毕。

    “郭老师,如果这文档没吹牛逼,那我们以后搭模型,就跟搭乐高积木一样简单了。”

    两人对视了一眼,兴奋之情溢于言表,在客厅里高兴得连连搓手。

    这种把复杂的数学过程完全黑盒化、工程化的设计,对于苦逼的算法研究员来说,简直就是久旱逢甘霖。

    他们觉得之前只知道盛夏科技批了算力,居然没静下心来仔细研究这个框架,简直是暴殄天物。

    “继续往下看,看看还有什么惊喜。”郭长征现在完全没有了困意。

    楚一航滑动鼠标,他们来到了另一个模块区。

    “郭老师,你看这个,这里封装了好多高级模块。”

    楚一航点开了一个名为卷积的目录。

    里面列着各种奇怪的函数名。

    两人仔细看着文档的解释。

    里面有一个叫卷积神经网络的封装层。

    两人平时研究的都是些传统的机器学习算法,对这种结构并不算特别清楚。

    直到看到文档里清清楚楚地写着:该模块通过卷积核提取局部特征,极为适用于图像识别与计算机视觉领域。

    “图像识别?”郭长征敏锐地抓住了这个词。

    “我们下午吃饭的时候,讨论的李飞飞教授那个ImageNet数据集,不就是图像分类吗?”

    楚一航一拍桌子:“绝了!连这种专门针对图像的模块都提前封装好了。”

    “这简直就是给咱们量身定制的武器库啊。”

    两人对着这些功能模块,越讨论越兴奋。

    “一航,别光看着眼馋了,纸上得来终觉浅。”郭长征提议。

    “咱们现在就动手,按这个文档,写一个简单的几层网络试试水。”

    “好嘞。”楚一航立刻切换到代码编辑器。

    按照平时用CUDA编写底层算力代码的习惯,楚一航习惯性地准备先写一堆内存分配的语句。

    在以往,用英伟达的CUDA写代码,繁琐。

    程序员必须手动在主机的内存里开辟空间,再在显卡的显存里开辟空间。

    然后要把数据从主机复制到显卡,接着手动设置线程块和网格的大小。

    稍微设置不合理,显卡就直接罢工不干。

    算完之后,还得再把数据从显卡慢吞吞地拷回主机。

    但当楚一航按照TenSOrFlOW的文档指引敲击键盘时,他发现那些全都不需要了。

    他只需要定义好数据格式,声明好网络层数,框架的底层执行引擎会自动接管所有的硬件资源调度。

    不到二十行代码。

    简洁,优雅。

    “这就写完了?”楚一航自己都不敢相信。

    “这几十行代码,放以前用C语言加CUDA手搓,至少得写大半天,还得调试一整天。”

    郭长征凑在屏幕前,反反复复检查了三遍代码逻辑。

    “没有手动分配显存,没有显式的数据拷贝,完全是业务逻辑的代码。”

    郭长征感叹道:“这框架的抽象能力太强了,所有的脏活累活都在底层被TenSOrFlOW干完了。”

    两人开始尝试运行这段代码。

    虽然只是输入了一些随机生成的测试数据,但终端里立刻打印出了每一层数据维度的变化,以及最终输出的结果。

    完全没有报错。

    顺滑。

    “这开发效率,太可怕了。”楚一航看着顺利跑通的终端界面。

    “有了这个,咱们今晚完全可以把吃饭时构思的那个真正的网络架构给搭出来。”郭长征提议。

    “干!”楚一航干劲十足。

    两人彻底进入了忘我的状态。

    楚一航负责敲代码,郭长征负责在旁边提供理论指导和架构设计。

    “这里加一层池化层,文档上说这能降低数据维度,防止过拟合。”郭长征指挥着。

    “好,步长设为2,卷积核大小设为3。”楚一航手指翻飞。

    “这一层的激活函数换一下,别用原来的了,文档里推荐了一个叫ReLU的函数。”

    “ReLU?我找找……有了,一行代码搞定。”

    在搭建的过程中,他们也不是一帆风顺。

    时不时会遇到一些报错。

    比如“张量维度不匹配”这种经典的错误。

    但得益于框架清晰的报错提示,他们总能迅速定位到是哪一层的矩阵乘法出了问题。

    两个人为了算清楚上一层的输出怎么和下一层的输入对齐,甚至找了张A4纸在桌子上画起了矩阵图。

    不知不觉中,时间过得飞快。

    楚一航敲击回车,最后一行代码编写完毕。

    他们把整个神经网络的模型类封装好了,并且配置好了损失函数和优化器。

    楚一航伸了个大大的懒腰,只觉得脖子和后背一阵酸痛。

    郭长征也揉了揉酸涩的眼睛。

    窗外传来了鸟叫声。

    楚一航听到后愣了一下,瞥了一眼屏幕右下角的时间,整个人愣住了。

    “郭老师……五点半了。”(记住本站网址,Www.WX52.info,方便下次阅读,或且百度输入“ xs52 ”,就能进入本站)
这篇小说不错 推荐
先看到这里 书签
找个写完的看看 全本
(快捷键:←) 上一章   回目录   下一章 (快捷键:→)
如果您认为带着手机重生,目标科技教父不错,请把《带着手机重生,目标科技教父》加入书架,以方便以后跟进带着手机重生,目标科技教父最新章节的连载更新