第(2/3)页 楚一航点开了一个名为卷积的目录。 里面列着各种奇怪的函数名。 两人仔细看着文档的解释。 里面有一个叫卷积神经网络的封装层。 两人平时研究的都是些传统的机器学习算法,对这种结构并不算特别清楚。 直到看到文档里清清楚楚地写着:该模块通过卷积核提取局部特征,极为适用于图像识别与计算机视觉领域。 “图像识别?”郭长征敏锐地抓住了这个词。 “我们下午吃饭的时候,讨论的李飞飞教授那个ImageNet数据集,不就是图像分类吗?” 楚一航一拍桌子:“绝了!连这种专门针对图像的模块都提前封装好了。” “这简直就是给咱们量身定制的武器库啊。” 两人对着这些功能模块,越讨论越兴奋。 “一航,别光看着眼馋了,纸上得来终觉浅。”郭长征提议。 “咱们现在就动手,按这个文档,写一个简单的几层网络试试水。” “好嘞。”楚一航立刻切换到代码编辑器。 按照平时用CUDA编写底层算力代码的习惯,楚一航习惯性地准备先写一堆内存分配的语句。 在以往,用英伟达的CUDA写代码,繁琐。 程序员必须手动在主机的内存里开辟空间,再在显卡的显存里开辟空间。 然后要把数据从主机复制到显卡,接着手动设置线程块和网格的大小。 稍微设置不合理,显卡就直接罢工不干。 算完之后,还得再把数据从显卡慢吞吞地拷回主机。 但当楚一航按照TenSOrFlOW的文档指引敲击键盘时,他发现那些全都不需要了。 他只需要定义好数据格式,声明好网络层数,框架的底层执行引擎会自动接管所有的硬件资源调度。 不到二十行代码。 简洁,优雅。 “这就写完了?”楚一航自己都不敢相信。 “这几十行代码,放以前用C语言加CUDA手搓,至少得写大半天,还得调试一整天。” 郭长征凑在屏幕前,反反复复检查了三遍代码逻辑。 “没有手动分配显存,没有显式的数据拷贝,完全是业务逻辑的代码。” 郭长征感叹道:“这框架的抽象能力太强了,所有的脏活累活都在底层被TenSOrFlOW干完了。” 第(2/3)页