跳到正文
SpruceNovel
封面加载中…
小说

静流之上

共 68 章

《静流之上》小说。查看作品信息、章节目录和阅读内容。

正在阅读 · 第十六章 卷积启,暖意生

第十六章 卷积启,暖意生

2020年11月中旬,清溪镇的寒风愈发凛冽,清晨的校园笼罩在一层薄薄的雾气中。香樟树的枝干早已褪去了繁茂的枝叶,光秃秃地伸向灰蒙蒙的天空,只剩下几片顽固的枯叶在风中打着旋,最终轻飘飘地落在地上,被来往的学生踩碎。气温一夜之间跌破了五摄氏度,寒意顺着衣领往脖子里钻,学生们都裹上了厚厚的羽绒服和棉袄,帽子、围巾、手套一应俱全,步履匆匆地穿梭在教学楼与食堂之间,嘴里呼出的白气刚飘出嘴边,就瞬间消散在冷空气中。

李长生依旧保持着晨跑的习惯,只是将薄卫衣换成了福利院阿姨亲手织的灰色毛衣,外面套着那件洗得发白的旧外套。十圈下来,额头上的汗水浸湿了刘海,冷风一吹,冻得他打了个寒颤,指尖也变得冰凉。他却只是抬手抹了把汗,搓了搓冻僵的手,眼神依旧坚定如初。小木屋里那项未完成的商品图像分类项目,像一团炽热的火焰,在他心里燃烧着,驱散了周身的寒意,也让他的脚步变得更加急切。

高一(3)班的课堂上,李长生的「中等生」伪装依旧无懈可击。

第六次周测成绩公布,红底黑字的排名表贴在教室后墙的公告栏上,他的名字稳稳停在班级第二十五名,比上次前进一名,依旧游离在老师和同学的关注之外,不偏不倚,恰到好处。这次控分,他做得愈发得心应手,甚至不用再刻意计算扣分点,仅凭感觉就能将分数卡在预期范围:数学卷的最后一道压轴题,他用老师教的常规方法一步步解答,虽然步骤繁琐,耗费时间,却故意避开了自己想到的更简洁的最优解法,避免被老师点名表扬;物理卷的实验探究题,他在数据处理环节刻意保留了一个微小的误差,刚好扣掉一分,让分数从满分变成99分,既不刺眼,又符合「偶尔粗心」的中等生形象;英语和语文依旧是中规中矩,阅读题刻意错一道,作文按模板写作,分数稳稳停在班级中游,没有丝毫波动。

班主任刘老师在班会上点评成绩时,依旧是从第一名开始,重点表扬了成绩靠前的同学,又点名批评了几名成绩下滑严重的学生,轮到中间排名时,只是随口一句「大部分同学保持稳定,继续努力」,便匆匆掠过,丝毫没有留意到这个沉默的少年,在草稿纸上写下的那些看似杂乱的符号,竟是卷积神经网络的层结构示意图。同学们更是不会对他多加关注,在他们眼里,李长生就是那个「不爱说话、成绩一般、独来独往」的同学,甚至有人在讨论排名时,翻了半天才找到他的名字,随口说了句「哦,他也在这儿啊」,便再也没有下文。

课堂上,他依旧是那个「标准听众」,坐得笔直,低头看着课本,手里的笔看似在认真记录老师讲的知识点,实则笔尖在纸上快速勾勒着CNN模型的结构——卷积层、池化层、全连接层的排列顺序,卷积核的大小选择,步长的设置,这些问题在他的脑海里反复盘旋,占据了他所有的思绪。

数学课上,老师讲着「立体几何的空间投影」,他却立刻联想到了图像识别中的「特征提取」——卷积核在图像上的滑动,不就像是将三维物体投影到二维平面上吗?通过滑动,提取图像的局部特征,再通过池化层降维,保留关键信息,这与立体几何的投影原理有着异曲同工之妙。他悄悄在课本空白处画下卷积核滑动的示意图,将老师讲的投影知识与卷积层的工作原理联系起来,思路瞬间清晰了不少。

物理课上,老师讲着「光的折射与反射」,又让他想到了图像预处理中的「滤波操作」——通过高斯滤波去除图像中的噪声,就像光的反射一样,保留有用的信息,过滤掉无用的干扰。他在心里默默对比着不同滤波方法的优劣,思考着如何将其运用到这次的图像分类项目中,提高模型的识别准确率。

这种跨学科的知识联动,已经成为了他的一种习惯。在他的脑海里,高中的文化课知识与编程、AI技术不再是割裂的两个部分,而是相互关联、相互印证的整体。文化课的学习不仅没有耽误他的编程进度,反而为他理解复杂的算法原理提供了新的思路,让他能更快地掌握新的知识。

课间,他依旧独来独往,只是不再像以往那样只是趴在桌上或站在走廊尽头,偶尔会拿出手机,快速翻看一下TensorFlow的官方文档,或是在脑海里模拟卷积神经网络的训练过程。走廊里的喧闹依旧与他无关,有同学围在一起讨论最新的手游皮肤,有女生分享着周末的逛街经历,还有男生在打闹嬉戏,他却沉浸在自己的世界里,专注而坚定。

偶尔,王浩会凑过来,拍着他的肩膀说:「长生,你天天这么学,不累吗?周末跟我们去镇上的网吧放松一下呗?」他只是淡淡摇了摇头,吐出两个字:「不用。」王浩早已习惯了他的拒绝,耸耸肩,转身就加入了其他同学的队伍,不再多说。对李长生而言,所谓的「放松」,就是在小木屋里敲代码,解决一个技术难题,或是看到模型准确率提升的那一刻,那种成就感,远比打游戏带来的快乐更持久,也更让他满足。

而他与王帆的相处,在这份凛冽的寒意里,却悄然滋生出一丝淡淡的暖意,比以往更加自然,也更加默契。

天气越来越冷,教室的窗户总是关得严严实实,空气里弥漫着一股淡淡的油墨味和暖气的味道。王帆依旧每天带着那个粉色的保温杯,只是不再像以往那样只是悄悄推到桌中间,而是会在课间主动说一句:「水还是热的,你喝点吧。」他会点点头,接过杯子,喝上一口,温热的水流过喉咙,驱散了喉咙的干涩,也带来一丝暖意。

他依旧不会主动搭话,却会用自己的方式回应她的善意。她的数学成绩很好,但物理偶尔会遇到瓶颈,尤其是在电磁学部分,常常对着题目皱眉。每当这时,他会在草稿纸上写下一个关键的解题思路,或是画一个清晰的受力分析图,轻轻推到她的面前,然后继续低头做自己的事。她看到后,会抬头看他一眼,眼里带着感激的笑意,轻声说一句「谢谢」,他则会微微颔首,算是回应。

两人之间的交流依旧不多,却不再像以往那样只有寥寥数语的礼貌用语,偶尔会有一些简短的对话。比如,王帆会问他:「这道数学题,除了老师讲的方法,还有别的解法吗?」他会用最简洁的语言,告诉她另一种思路;他偶尔会忘记带橡皮,她会默默把自己的推过来,说一句「用我的吧」。

这些对话很简短,很平淡,却像冬日里的一缕阳光,悄悄温暖着彼此的心房。

他们依旧是坐在教室角落的最安静的同桌,各自沉浸在自己的学习中,却又在细微处彼此关照。她会在他熬夜后脸色不好时,悄悄在他的桌角放一颗薄荷糖;他会在她不小心碰掉书本时,第一时间帮她捡起来,整理好。

没有人注意到他们之间这些细微的变化,在其他人眼里,他们只是普通的同桌,甚至连话都很少说。但只有他们自己知道,在这份沉默的相处中,一种无形的默契,正在慢慢滋生,越来越浓。

上周的一个晚自习,突然停电了,教室里瞬间陷入一片黑暗。同学们发出一阵惊呼,随后便开始叽叽喳喳地讨论起来,教室里一片喧闹。只有李长生和王帆,依旧坐在座位上,没有说话。黑暗中,他能清晰地听到她的呼吸声,就在离他不远的地方。

过了一会儿,她轻声说:「我有手电筒,在书包里。」说着,便摸索着打开书包,拿出一个小小的手电筒,按亮了。微弱的光线照亮了两人面前的一小块桌面,在漆黑的教室里,显得格外温馨。

「谢谢。」他轻声说。

「不用。」她笑了笑,将手电筒往中间挪了挪,让光线能同时照到两人的桌面。

那十几分钟的停电时间里,两人都没有说话,只是在微弱的光线下,安静地做着题。教室里的喧闹仿佛与他们隔了一个世界,只剩下笔尖划过纸张的沙沙声,和彼此均匀的呼吸声。那一刻,李长生的心里,第一次涌起一种莫名的感觉,不是专注,不是坚定,而是一种淡淡的平静,仿佛有她在身边,连黑暗都变得不再可怕。

来电的那一刻,教室里恢复了明亮,同学们的喧闹声再次响起,两人又迅速恢复了以往的状态,低头做着自己的事,仿佛刚才那短暂的温馨从未发生过。但李长生知道,有些东西,已经悄悄改变了。

郊外的小木屋里,依旧是他的主战场,也是他实现梦想的地方。

新电脑的屏幕每天都会亮到深夜,冷白色的光芒照亮了整个木屋,也照亮了他专注的脸庞。此刻,他的所有精力,都投入到了「商品图像分类」项目的开发中。这是他第一次接触计算机视觉领域的项目,也是他学习深度学习以来,遇到的最大挑战。

与之前的「客户购买意向预测」项目不同,这次的图像分类项目,难度更大,技术要求也更高。不仅需要掌握TensorFlow框架的使用,还需要理解卷积神经网络(CNN)的工作原理,掌握图像预处理、数据增强、模型搭建、参数调优等一系列技术。客户提供的数据集是一千张服装图像,分为上衣、裤子、裙子、鞋子四个类别,要求模型的识别准确率不低于88%。

拿到数据集的第一眼,李长生就意识到,这次的项目,最大的难点不在于模型的搭建,而在于图像预处理。客户提供的原始图像质量参差不齐,有的光线过亮,有的光线过暗,有的角度歪斜,还有的带有水印和噪声,这些问题都会严重影响模型的识别准确率。如果直接用原始图像训练模型,准确率肯定达不到要求。

于是,他将项目的第一步,定为图像预处理,并制定了详细的处理流程:

1. 统一尺寸:将所有图像的尺寸统一为28×28像素,符合模型的输入要求;

2. 灰度化:将彩色图像转换为灰度图像,减少计算量,同时避免颜色对识别结果的干扰;

3. 归一化:将图像的像素值从0-255转换为0-1,加快模型的收敛速度;

4. 去噪处理:通过高斯滤波去除图像中的噪声,保留有用的特征信息;

5. 数据增强:通过随机旋转、平移、翻转等方式,扩充数据集的数量,避免模型过拟合。

这一步,他花费了整整一天的时间。他用Python的OpenCV库编写了图像预处理的代码,对一千张图像进行批量处理。过程中,他遇到了不少问题:比如,部分图像的角度歪斜严重,旋转后会出现黑边;比如,高斯滤波的核大小设置不当,会导致图像模糊,丢失关键特征。他反复调试代码,调整参数,最终找到了最优的处理方案。

处理后的图像,质量得到了显著提升,尺寸统一,光线均匀,没有噪声,为后续的模型训练打下了坚实的基础。

解决了图像预处理的问题,接下来就是模型的搭建。这是整个项目的核心,也是他这次学习的重点。他选择用卷积神经网络(CNN)来实现,因为CNN在处理图像数据时,具有独特的优势——它能通过卷积层自动提取图像的局部特征,通过池化层降维,保留关键信息,比普通的神经网络更适合图像识别任务。

根据自己的学习和查阅的资料,他在笔记本上设计了一个基础的CNN模型结构:

-输入层:接收28×28×1的灰度图像;

-卷积层1:使用32个3×3的卷积核,激活函数为ReLU,步长为1,填充方式为same;

-池化层1:使用2×2的最大池化核,步长为2,提取关键特征,减少参数数量;

-卷积层2:使用64个3×3的卷积核,激活函数为ReLU,步长为1,填充方式为same;

-池化层2:使用2×2的最大池化核,步长为2,进一步降维;

-展平层:将多维特征图转换为一维向量,输入到全连接层;

-全连接层1:设置128个神经元,激活函数为ReLU;

-输出层:设置4个神经元,对应四个服装类别,激活函数为Softmax,输出每个类别的概率。

模型结构设计完成后,他开始在TensorFlow中编写代码,搭建模型。这是他第一次完整地搭建卷积神经网络,过程并不顺利。他遇到了很多技术问题:比如,卷积层和池化层的参数设置错误,导致模型的输入输出维度不匹配;比如,激活函数选择不当,导致模型收敛缓慢;比如,全连接层的神经元数量设置过多,导致模型过拟合。

每一个问题,都需要他花费大量的时间去解决。他反复翻看TensorFlow的官方文档,查阅相关的教程和案例,在网上的技术论坛里提问,一点点地调试代码,修改参数。深夜的小木屋里,只有键盘的清脆敲击声,和屏幕上不断跳动的代码与报错信息。

他时而皱眉思考,盯着屏幕上的报错信息,一动不动;时而拿出纸笔,在纸上画下模型的结构,一步步排查问题;时而眼神一亮,快速修改代码,按下运行键,期待着模型能成功运行。

当他第一次成功搭建好模型,没有出现任何报错信息时,他忍不住长长地舒了一口气,心里涌起一丝喜悦。但这份喜悦并没有持续太久,因为模型的训练结果,并不理想。

第一次训练,他设置了50个epochs,批次大小为32,优化器为Adam,学习率为0.001。训练完成后,模型在训练集上的准确率只有80%,在测试集上的准确率更是只有78%,远远低于客户要求的88%。而且,从损失曲线可以看出,模型出现了明显的过拟合现象——训练集的损失不断下降,而测试集的损失却在不断上升。

他知道,自己还有很多工作要做。

接下来的几天,他将所有的精力都投入到了模型的优化中。这是整个项目中最耗时,也最考验能力的环节。他从多个方面入手,对模型进行全面的优化:

首先,解决过拟合问题。他在模型中加入了Dropout层,在训练过程中随机丢弃一部分神经元,减少模型的复杂度,提高泛化能力;同时,他调整了全连接层的神经元数量,从128个减少到64个,避免模型过于复杂。

其次,调整超参数。他通过反复实验,调整了学习率、批次大小、epochs等超参数。将学习率从0.001调整为0.0005,让模型的收敛更加平稳;将批次大小从32调整为64,加快训练速度;将epochs从50增加到100,让模型有足够的时间学习特征。

再次,优化图像预处理。他在数据增强环节加入了更多的操作,比如随机裁剪、亮度调整等,进一步扩充数据集,提高模型的鲁棒性。

最后,调整模型结构。他在卷积层中增加了批归一化(BatchNormalization)层,加快模型的收敛速度,提高模型的稳定性;同时,调整了卷积核的数量,将第一层的32个增加到64个,第二层的64个增加到128个,让模型能提取更多的特征。

每一次优化,他都要重新训练模型,观察准确率和损失曲线的变化,分析优化的效果。这个过程极其繁琐,也极其枯燥,往往一次训练就要花费十几分钟,而一次优化效果不佳,就需要重新调整参数,再次训练。

但他没有丝毫急躁,也没有丝毫退缩。对他而言,这个过程,也是一个学习和提升的过程。每解决一个问题,每一次优化让准确率提升,他都能学到新的知识,对卷积神经网络的理解也更加深刻。

新电脑的算力,在这个过程中发挥了至关重要的作用。卷积神经网络的训练需要大量的计算资源,尤其是在增加了卷积核数量和epochs后,训练时间会大幅增加。如果是在旧电脑上,一次训练可能需要一个多小时,而在新电脑上,仅仅需要十几分钟,这让他能更快地看到优化效果,调整参数,大大提高了效率。

深夜的郊外,万籁俱寂,只有小木屋里的灯光,在漆黑的夜色中格外耀眼。李长生坐在电脑前,手指在键盘上快速敲击,眼睛紧紧盯着屏幕上的训练进度条和准确率数据,眼神里充满了专注与执着。窗外的寒风呼啸着,穿过木屋的缝隙,发出呜呜的声响,却丝毫没有影响到他。他忘记了时间,忘记了疲惫,忘记了外界的一切,全身心地投入到了模型的优化中。

饿了,就拿出提前准备好的面包和矿泉水,快速吃几口;累了,就靠在椅背上,闭上眼睛,休息几分钟,然后立刻继续工作。

就这样,经过三天三夜的高强度优化,他的努力终于有了回报。

当他最后一次按下运行键,模型开始训练。屏幕上的进度条一点点前进,训练集和测试集的准确率不断上升,损失不断下降。当训练完成时,屏幕上显示的结果,让他的眼睛瞬间亮了起来。

训练集准确率:92.5%

测试集准确率:89.2%

不仅达到了客户要求的88%,还超出了预期!

而且,从损失曲线可以看出,模型的过拟合问题得到了很好的解决,训练集和测试集的损失都平稳下降,最终趋于一致。

那一刻,李长生再也抑制不住心中的喜悦,他靠在椅背上,长长地舒了一口气,嘴角扬起了一抹灿烂的笑容。这抹笑容,比以往任何一次都更加真切,更加灿烂,带着难以掩饰的兴奋和成就感。

三天三夜的努力,无数次的调试,无数次的失败,终于换来了成功。

他没有立刻休息,而是立刻对模型进行了全面的测试。他随机挑选了几十张未参与训练的图像,输入到模型中,模型都准确地识别出了对应的类别。看着屏幕上一张张清晰的图像,和旁边准确的分类结果,他的心里充满了自豪。

这是他第一次在计算机视觉领域取得突破,也是他深度学习学习路上的一个重要里程碑。他不仅掌握了卷积神经网络的搭建和优化方法,还学会了图像预处理、数据增强等关键技术,这些知识,将为他未来学习更复杂的深度学习模型,如ResNet、VGG等,打下坚实的基础。

他稍微休息了一下,喝了一口水,然后开始撰写项目报告。他将模型的结构、图像预处理的流程、模型优化的过程、训练结果等内容,详细地写进报告里,还附上了训练集和测试集的准确率曲线、混淆矩阵等可视化图表,让客户能清晰地看到模型的性能。

做完这一切,已经是清晨五点多。天刚蒙蒙亮,窗外的雾气还没有散去,天边泛起了一丝淡淡的鱼肚白。他看了一眼时间,知道自己该去学校了。

他快速收拾好东西,将训练好的模型文件、预处理后的图像、项目报告一起打包,发送给了买家。然后,他锁上小木屋的门,朝着学校的方向,快步走去。

虽然连续三天三夜没有好好休息,他的身体已经极度疲惫,眼睛里布满了血丝,脚步也有些虚浮,但他的眼神,却依旧坚定,充满了光芒。

走到半路,手机震动了一下,是外包平台的消息提醒。他点开一看,是买家的回复,还有一条报酬到账的通知。

买家的消息很激动:「太厉害了!模型的准确率竟然达到了89.2%,超出了我的预期!报告也写得非常详细,可视化图表很清晰,你真的太专业了!五星好评!以后有计算机视觉相关的项目,我一定第一个找你!」

紧接着,报酬到账的提醒弹了出来:500元。

他点开余额界面,屏幕上的数字清晰地显示着:11610元。

又一次突破了新的记录。

他的心里,涌起一股难以言喻的情绪。有喜悦,有成就感,还有一丝淡淡的释然。这不仅仅是500元的报酬,更是对他能力的又一次肯定。他用自己的努力,证明了自己不仅能做数据分析项目,还能做更复杂的计算机视觉项目,证明了自己在AI领域的学习方向是正确的。

走到学校门口,早自习的铃声刚好响起。他深吸一口气,压下心中的情绪,整理了一下衣服,然后迈步走进了校园。

教室里,已经有不少同学在早读了,朗朗的读书声回荡在教室里。王帆已经坐在了座位上,正在认真地背诵英语单词。看到他走进来,她抬起头,看了他一眼,眼神里闪过一丝担忧,轻声说:「你看起来很累,要不要休息一下?」

他愣了一下,随即摇了摇头,轻声说:「没事。」

她没有再多说,只是默默将自己的保温杯推到他的面前,说:「水是热的,你喝点吧,提提神。」

他接过杯子,喝了一口,温热的水流过喉咙,带来一丝暖意,也让他疲惫的身体稍微舒服了一些。他抬起头,对上她担忧的眼神,第一次主动说了一句:「谢谢你。」

她笑了笑,摇了摇头,说:「不用客气,快早读吧。」

说完,她便低下头,继续背诵单词,耳根却悄悄泛红了。

李长生坐在自己的座位上,靠在椅背上,闭上眼睛,休息了两分钟。仅仅两分钟,他就睁开了眼睛,拿出英语课本,开始认真地早读。

虽然身体极度疲惫,但他知道,自己不能倒下,也不能表现出丝毫的异常。他的「中等生」人设,必须继续维持下去。

教室里的读书声依旧朗朗,阳光透过窗户洒进来,落在他的身上,带来一丝温暖。他看着课本上的英语单词,脑海里却在默默规划着下一步的学习计划。

这次的图像分类项目,让他意识到了自己在深度学习领域的不足,也让他明确了接下来的学习方向:接下来,他要系统学习更复杂的卷积神经网络模型,如ResNet、VGG等;还要学习更多的图像预处理技术,提高自己的图像处理能力;同时,他还要在平台上接更多的计算机视觉项目,积累实战经验。

他的AI之路,还很长,还有很多的知识需要学习,还有很多的挑战需要面对。但他不再迷茫,也不再畏惧。

因为他知道,只要自己坚持不懈,一步一个脚印地走下去,就一定能实现自己的目标。

早自习结束后,他的手机又震动了一下,是外包平台的消息。他点开一看,是之前那个做销售数据管理系统的买家,发来的一条消息:「我这边有一个新的项目,是关于门店客流预测的,需要用到AI模型,报酬1500元,你有没有兴趣接?」

看到这条消息,李长生的眼神瞬间亮了起来。

1500元的报酬,这是他迄今为止接到的报酬最高的项目!

而且,这个项目是关于客流预测的,属于时间序列预测,正好是他接下来想要学习的内容。

他没有丝毫犹豫,立刻回复了买家:「有兴趣,麻烦发一下详细的需求文档。」

买家很快就发送了需求文档,他快速浏览了一遍,心里已经有了初步的思路。

这个项目,将是他接下来的新挑战。

也是他在AI领域,迈出的又一步。

窗外的寒风依旧凛冽,但小木屋里的那团火焰,却燃烧得愈发炽热。

高一的时光,还在继续。

他的双轨生活,依旧稳定而坚定。

学校里,他是沉默的中等生,在凛冽的寒风中,感受着一丝淡淡的暖意。

小木屋里,他是专注的AI学习者,在卷积神经网络的世界里,探索着新的边界。

他的脚步,从未停下。

他的梦想,正在一点点实现。

窗外的天色,渐渐明亮起来,雾气散去,阳光穿透云层,洒在清溪镇的大地上,也洒在青溪中学的校园里。

新的一天,开始了。

新的挑战,也即将到来。