作者: mojunovo

  • 我的第一次完整开发安卓APK

    背景
    项目“基于联邦学习的恶意软件检测”,我带领项目组开会以后,为了增加拿奖机会,决定想办法让项目在安卓端运行。

    最终成果

    成功在手机端正常使用系统(虽然并不是部署在手机上)

    设计过程
    一、方案探索:三次决策中的理性取舍

    我们首先尝试将网站整体封装为桌面软件再移植安卓,但三天内反复调试端口通信与资源路径均无进展,果断叫停;

    接着聚焦技术迁移路径,计划将Python模型嵌入安卓,但组员坦言“短期无法掌握JNI与模型转换”,我也评估自身能力边界后确认:强行攻坚将导致双线崩溃。

    深夜复盘时,我刷B站时灵光一现——B站APP本质是WebView加载网页!立刻验证:我们的网站已部署公网,完全可复用此思路。次日晨会,我向组员演示草图:“只需开发轻量‘壳’应用,用WebView嵌入网站链接,零改动保留所有功能。”他当即认可:“这既守住模型创新,又不增加你的负担,全力推进!”

    二、快速落地:基础能力+精准学习破局

    凭借Java基础,我当天在Android Studio新建项目:主Activity仅三步——申请网络权限、初始化WebView、加载网站URL。为提升体验,增加加载进度条与操作提示文案。

    开发完成后,我通过B站教程自学APK打包全流程:生成签名密钥、配置Release模式、导出安装包。用三台不同品牌旧手机反复测试,确保从点击图标到网站加载全程流畅。最终,这个仅200行代码的APK在比赛现场稳定运行。

    APK代码部分1
    APK代码部分2

    个人收获:第一次独立交付的工程闭环

    这是我人生中第一个从零到一独立完成的安卓APK——从设计思路萌芽(B站APP启发)、方案可行性论证、200行Java代码编写,到APK签名打包与多机型测试,全程无外部协助。当深夜在Android Studio点击“Build APK”,手机成功安装并流畅加载平台页面时,那种“一个人闭环交付”的成就感远超技术本身。它让我真切体会到:工程师的价值不在于技术多炫酷,而在于能否在约束中独立扛起责任、把问题真正解决掉

    这次经历沉淀为三点核心认知:第一,独立决策力——面对方案分歧,能基于时间、能力、目标快速判断“做什么比怎么做更重要”;第二,自主学习力——用1天啃下APK打包全流程,验证了“基础能力+精准搜索”足以突破新领域门槛;第三,务实工程观——放弃“重写模型”的执念,选择WebView轻量方案,恰恰是对项目目标的深度尊重。

  • 基于深度学习的猫猫图片检测系统——我第一次用人工模型实践

    背景

    学校的一个实践作业,要求自主建立模型,运用人工智能跟深度学习,根据训练集训练,最后输入一张猫猫图片,让模型判断是否含有猫猫。

    1.完成学校的任务

    这个项目属于人工智能范畴下的深度学习实践,具体聚焦计算机视觉中的图像分类任务。学校提供了200张标注猫猫数据集(猫/非猫各100张,含宿舍实拍、网络图片),独立实现二分类检测系统。除此以外,禁止调用ResNet等预训练模型或高级封装API,需手写核心逻辑。

    核心材料是,学校提供了一个深度学习的简单py文件。代码量不少,但是函数不多,结构很清晰。当时我已经有一定的深度学习基础(我之前有跟导师聊过,导师说我迟早会接触深度学习,叫我预先自学了),不过这是我第一次接触深度学习的实际应用。

    人工智能与深度学习的起点——自学西瓜书

    看过代码以后,我选择将代码一段一段标上注释分段去上网使用ai来搞清楚什么意思,同时补充这部分结构在人工智能应用里的基础知识

    最后结果如下:

    示例代码流程:数据加载→模型定义→训练循环→准确率输出→单图预测。

    用AI根据细节还原的当年学校示例代码的结构
    我按照学校目标对示例代码进行的修改

    2.自发的进一步探索

    我并没有满足于完成学校的任务。通过这次机会,我切实获得了使用人工智能跟深度学习进行实践的经验。我抱着“既然搞清楚了一整个项目的流程和结构,不如自己从头做一个”的想法,尝试自己做一个模型来超越之前的那一个。

    完成学校要求的基线模型后(一个严格按作业规范实现的单层感知机),我发现它的识别效果仅略高于随机猜测水平(约50%出头)——输入一张清晰的猫图,模型依然频繁误判。我产生强烈好奇:“为什么深度学习能解决图像问题?它到底‘深’在哪里?”


    第一步:尝试CNN(TensorFlow)
    我首先尝试了卷积神经网络。当时查阅资料时看到“CNN专为图像设计”,便用TensorFlow/Keras动手搭建了一个轻量结构:包含两个卷积层搭配池化层,后接全连接层。训练过程中,我特意用Matplotlib可视化中间层输出,第一次清晰看到特征从边缘轮廓逐渐演化为猫耳朵、毛发纹理的完整路径。模型效果显著优于学校基线,对模糊或侧脸猫图的判断也明显更可靠,这让我直观理解了“层次化特征提取”的价值。


    第二步:尝试MLP(TensorFlow)
    接着,我想验证“单纯增加隐藏层能否提升效果”。于是用TensorFlow实现了一个两层多层感知机(MLP),在输入和输出间增加了一个隐藏层,其他训练条件与之前保持一致。结果模型效果确实比学校单层模型有提升,但与CNN相比仍有明显差距。这让我切实体会到:图像数据具有空间结构特性,卷积操作对局部特征的捕捉能力,远胜于全连接层的简单堆叠。


    第三步:用PyTorch复现CNN
    后来,出于对PyTorch框架的好奇(久闻其动态图调试友好),我用PyTorch完整复现了相同的CNN结构。过程中重点对比了两种框架的体验:PyTorch修改网络后能即时查看张量变化,调试过程更直观流畅;而TensorFlow在流程封装上更简洁。最终两个版本的效果基本一致,微小波动属于正常实验误差。这次尝试让我明白:框架本质是工具,选择应服务于开发效率与具体场景,而非技术偏好。

    3.我的收获

    这段探索带给我的成长远超代码本身。当特征图清晰呈现猫耳朵轮廓时,书本理论瞬间有了温度;当MLP与CNN效果差异摆在眼前时,“结构决定能力”不再是一句空话。它教会我三件事:技术方案必须匹配问题本质,亲手验证胜过道听途说,保持对工具的开放心态比掌握单一技术更重要。也正是从这次“听说CNN好用→动手验证→理解原理”的完整闭环开始,我真正建立了对人工智能领域的兴趣与信心,也养成了此后面对任何技术问题时“先问本质,再选工具”的思维习惯。

  • 3天落地!一个保留“!!!”的情感分析系统:从噪声文本到需求达标的实战复盘

    背景

    文本信息处理工程实践的结课作业。要求运用NLTK在提供的材料中挑选一样,最后完成一个能解决实际问题的系统。

    我向老师咨询“NLTK在文本处理领域有哪些应用方向”,在老师回答后,我选择了运用NLTK来处理文本的情感倾向。

    NLTK在文本处理中的主要应用方向

    重要决策

    1 为什么保留情感符号

    数据预处理时,我偶然发现一些类似“用户说太赞了!!!”被系统判为中性,但明显是强烈好评!咨询老师后,发现这是一种误判。跟老师深入探讨后,我们认为应该是数据预处理时,没有考虑符号的情感表达,按标准滤除规律进行了去除。

    于是,我设计了保留‘!!!’的清洗规则,让模型真正‘听懂’用户情绪。

    用AI分析当时的数据,决策是否要滤除情感符号

    2 为何选用逻辑回归

    理由有三:一是应用场景。结项当天有一份全新的测试集,要求到场后现场进行输入和演示。如果模型训练时间很长,可能交不了差,更别提后期这个项目的进一步开发。二,后期项目进一步开发工作,有类似“客服主管问:“为什么‘服务太差了???’被判负面?”这样需要解释和人为判定的方向。模型最好方便人为进行调整,以及可解释性强。三是条件。当天设备为我的旧笔记本,没有GPU。训练数据也只有那一张xlsx表。

    选用逻辑回归,是看中它训练/部署极快、无需GPU、可解释性强,同时性能足够完成任务。SVM调参复杂、 决策边界难解释,随机森林数据集太小易过拟合、神经网络/BERT需GPU+大量数据。

    最后结果

    结项当天,我提前十分钟到场演示,最终花费15分钟左右第一个完成现场演示,以新数据集高于70%的准确率以及最快速度顺利交付项目,获得老师的大受好评。后来的进一步开发,我因为个人安排没有去,而是把项目交接给老师和她的学生完成。据说,这个系统后面用于社交媒体评论,因为速度很快同时准确率足够,3 天内部署上线,分析效率提升 30%+并获业务采纳。

    反思:AI落地的真谛

    从项目中提炼认知:
    “如果重做,我会:

    1. train_data.xlsx中的负向样本做类别平衡(当前负向样本少)
    2. result.txt的预测结果做AB测试(对比BERT)
    3. 加入LIME解释(‘!!!’如何影响预测)

    但最核心的收获:
    AI不是追求模型复杂度,而是解决业务问题。就像这一次,虽然逻辑回归大体上性能不如其他模型。但是在当时要解决的问题中是最适合的。如果当时选用其他模型,准确率可能更高,但恐怕不会有后面的发展与写这篇文章的缘由了。

  • 世界,您好!

    欢迎使用 WordPress。这是您的第一篇文章。编辑或删除它,然后开始写作吧!