请写一篇关于【TensorFlow 2.0入门教程:基础概念解析】的技术文章。写作风格要求:项目案例剖析。

深度学习小白
2025-12-26 01:38
阅读 1073

老广程序员的深夜茶餐厅:从Keras到公务员考试之间的那杯冻柠茶

去年十月的一个周五晚上,11点47分,我坐在越秀区人民北路那家开了二十多年的老式茶餐厅角落,面前摆着一杯已经化掉一半冰的冻柠茶。电脑屏幕还亮着,Jupyter Notebook 里一行 model.fit() 死活跑不通。手机震动了一下,是我老婆发来的微信:“今晚回不回来?晾衣服等你搭把手。”

那一刻,我真的有点崩溃。

我不是什么大厂P8,也不是AI方向的博士,只是一个在天河软件园写了八年Java的普通后端工程师。月薪从15k涨到22k花了整整五年,房租3500(老城区祖屋省了大头),孩子明年上小学,房贷还有18年。去年开始,我悄悄报名了省考——不是因为讨厌写代码,而是觉得这行太卷了,35岁之后怎么办?但又放不下技术,毕竟干了这么多年,总想把TensorFlow 2.0这套东西搞明白,万一以后做点副业呢?

于是就有了这个“图像分类小项目”:用TF 2.0训练一个能识别广东早茶点心的小模型——虾饺、叉烧包、肠粉、蛋挞。听起来很土?但对我这个老广来说,比MNIST手写数字亲切多了。


一、从“Hello World”到“虾饺识别”:我的第一个TF 2.0项目

说实话,一开始我连TensorFlow和PyTorch的区别都说不清。只知道公司里新来的算法岗小年轻张嘴就是“transformer”、“attention”,而我还在调Spring Boot的事务隔离级别。

但TF 2.0不一样。它把Keras直接整合进来了,API友好得不像话。我翻出B站上李沐老师的旧视频,又啃了官方文档,花了一个周末,终于搭起了第一个模型:

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([
    keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(64, 64, 3)),
    keras.layers.MaxPooling2D(2,2),
    keras.layers.Conv2D(64, (3,3), activation='relu'),
    keras.layers.MaxPooling2D(2,2),
    keras.layers.Flatten(),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(4, activation='softmax')  # 四种点心
])

看起来是不是特别像当年学Java时写的HelloWorld?简洁、清晰、有结构。这正是TF 2.0最大的“开发心得”:它把深度学习从“黑魔法”变成了可工程化的流程

但问题马上来了——数据从哪来?


二、资源困境:没有GPU,只有MacBook Air

我用的是2019款MacBook Air,M1还没出,显卡是Intel UHD Graphics 617。跑个model.fit(),风扇狂转,键盘烫得能煎蛋。更惨的是,我根本没有标注好的“广式点心数据集”。

于是,我干了一件很“野生程序员”的事:周末带老婆孩子去陶陶居吃饭,趁服务员不注意,偷偷拍了三十多张虾饺照片(后来被老婆骂“丢人”)。又在淘宝买了50张点心高清图(花了28块钱),自己用LabelImg手动打标签。

数据增强?当然有!TF 2.0的ImageDataGenerator简直是救星:

datagen = tf.keras.preprocessing.image.ImageDataGenerator(
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True,
    zoom_range=0.2
)

一套操作下来,300张原始图硬生生扩到了2000多张。虽然精度不高,但至少能跑了。

这里我想说句掏心窝的话:别迷信“大数据”,小样本+合理的数据增强+合适的模型,一样能做出可用的东西。尤其是在资源有限的情况下——比如我这种既要准备行测申论,又想搞点技术副业的“夹心层”。


三、工具链:VS Code + Colab = 打工人福音

白天上班写CRUD,晚上9点后才能碰自己的项目。公司不让用外部GPU,本地又跑不动。怎么办?

我发现了Google Colab——免费送Tesla T4,还能挂Google Drive。我把数据传到Drive,Colab挂载后直接训练,一小时搞定本地要跑一天的任务。

配合VS Code的Remote - SSH插件,我在家里用Mac写代码,一键推到Colab跑。整个工具链跑通那天,我激动得差点在客厅跳起来——原来不用买3080,也能玩转深度学习

不过吐槽一句:Colab的会话经常断,保存模型要手动下载。有次我忘了存权重,重跑两小时,气得我对着屏幕喊“顶你个肺!”(老婆以为我跟谁吵架)。


四、算法不是玄学:理解背后的逻辑

很多人(包括我)一开始觉得深度学习就是调参、堆层数、换优化器。但真正动手后才发现,算法的核心是“问题建模”

比如我的点心分类任务,其实是个典型的多分类图像识别问题。关键不是网络多深,而是:

  • 输入尺寸是否统一(我统一resize到64x64)
  • 类别是否平衡(蛋挞照片太少,后来人工复制了几倍)
  • 损失函数选什么(sparse_categorical_crossentropy最合适)

我还试过用迁移学习——加载预训练的MobileNetV2,只训练最后几层。结果准确率从72%直接飙到89%。那一刻我才明白:站在巨人肩膀上,比自己从零造轮子高效得多

这也让我联想到考公:行测的资料分析题,不也是“迁移学习”吗?把数学思维迁移到实际场景,而不是死记公式。


五、开发心得:工程思维比算法更重要

作为一个老后端,我最大的优势不是懂多少数学,而是知道怎么把东西做出来、跑起来、维护住

比如我给模型加了日志记录:

callbacks = [
    tf.keras.callbacks.ModelCheckpoint('best_model.h5', save_best_only=True),
    tf.keras callbacks.TensorBoard(log_dir='./logs')
]

又写了简单的Flask接口,用Postman一调就能上传图片返回分类结果。虽然粗糙,但完整闭环了。

这才是程序员真正的价值——不是炫技,而是交付可用的解决方案


六、转折点:从“玩技术”到“为生活”

上个月,省考笔试成绩出来了,我行测78,申论69,进了面试。同时,我的点心分类模型也部署到了树莓派上(用TensorFlow Lite),接了个小摄像头,放在茶楼门口“自动识别今日点心”。

老婆看到后笑着说:“你啊,考公归考公,技术还是放不下。”

其实她说对了。我不打算放弃编程,只是想换个更稳定的赛道。但这段TF 2.0的学习经历让我明白:技术不是青春饭,而是思维方式。无论做公务员还是继续写代码,解决问题的能力才是核心。


结语:在不确定的时代,保持“可迁移”的能力

写这篇文章时,已经是凌晨1点。窗外广州的夜依然喧嚣,不远处有外卖小哥骑着电动车呼啸而过。我合上电脑,心里很平静。

如果你也和我一样:

  • 30+,在职,想转型
  • 技术焦虑,又不敢裸辞
  • 既想考公求稳,又舍不得代码

我想说:别把路走窄了。TensorFlow 2.0教会我的,不只是怎么训练模型,而是如何用有限资源解决真实问题。这种能力,在体制内同样珍贵——写材料要逻辑,做调研要数据分析,甚至组织活动也要“用户画像”。

技术是工具,生活才是目的。
而我们这些老广程序员,既要喝得下凉茶,也要写得了代码,更要扛得住生活的重压。

最后送大家一句我常对自己说的:

“唔使惊,慢慢嚟。”(不用怕,慢慢来。)

共勉。


作者:阿强,广州越秀人,8年Java后端,现备战广东省考。业余时间研究TensorFlow,梦想是开一家智能茶餐厅。

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝