PyTorch实战:猫狗图像分类从入门到部署
1. 为什么猫狗分类是入门深度学习的“试金石”如果你刚接触深度学习想找一个既能跑通完整流程、又不会一上来就被复杂工程劝退的项目猫狗图像分类几乎是公认的最佳起点。它不像手写数字识别那样过于简单也不像目标检测或图像分割那样涉及大量标注格式和复杂损失函数。猫狗分类这个任务本质上是一个二分类问题输入是一张彩色图像输出是“猫”或“狗”的概率。但就是这么一个看似简单的任务却能把数据加载、图像预处理、卷积神经网络搭建、训练循环编写、模型评估与调优这一整套流程全部串起来。我见过不少初学者学了很多理论卷积、池化、反向传播都能说个大概但一到自己动手写代码就卡壳。问题往往出在“不知道一个完整项目长什么样”。猫狗分类实战的价值就在这里它足够小小到你可以在一台普通笔记本上跑完又足够完整完整到你能从中理解工业级图像分类项目的骨架。你在这个项目里踩过的坑比如图像尺寸不统一、数据增强过度导致训练不稳定、验证集损失震荡等在后续做更复杂的任务时几乎都会以类似的形式再次出现。这个项目适合谁如果你已经掌握了Python基础语法了解NumPy的基本操作并且对PyTorch的张量操作有初步认识那就可以直接上手。如果你连PyTorch都没装过也没关系我会在环境准备部分把关键步骤拆开讲。整个实战的核心目标不是追求极致的准确率而是让你亲手搭建一个可运行、可调试、可扩展的图像分类流水线。等你把这条流水线跑通之后再去看那些顶会论文里的模型结构你会发现它们不过是在你这个骨架上做了更精细的设计而已。2. 动手之前先把环境和数据理顺2.1 PyTorch环境搭建中的版本匹配问题很多人第一步就卡在环境安装上不是缺这个包就是版本冲突。我的建议是不要直接往系统Python里装先用conda或者venv创建一个独立环境。以conda为例创建一个名为catdog的环境指定Python版本为3.9或3.10这两个版本对PyTorch的兼容性最好。然后去PyTorch官网找到对应你操作系统的安装命令。这里有一个关键点如果你的机器有NVIDIA显卡并且你想用GPU加速一定要先确认CUDA版本再选择对应的PyTorch安装命令。如果装错了版本代码运行时会报CUDA error: no kernel image is available for execution on the device这个错误折腾起来非常浪费时间。如果你没有独立显卡直接用CPU版本就行。猫狗分类这个任务用CPU训练一个简单CNN每轮大概几分钟完全等得起。不要因为没显卡就觉得跑不了深度学习入门阶段CPU足够让你理解所有核心概念。安装完成后在终端里输入python -c import torch; print(torch.__version__)能正常输出版本号就说明基础环境没问题。再验证一下torch.cuda.is_available()如果返回False但你确实有显卡那就得回头检查CUDA和驱动了。2.2 数据集的组织方式与常见陷阱猫狗分类的数据集通常来自公开竞赛平台包含25000张带标签的图像猫和狗各占一半。下载下来之后你会得到两个文件夹Cat和Dog里面分别是猫和狗的图片。这里第一个坑就出现了图像尺寸五花八门有的几百像素宽有的几千像素宽长宽比也不一致。CNN要求输入固定尺寸所以必须统一缩放。常见做法是缩放到224x224或128x128。224x224是很多经典网络的标准输入128x128则能显著降低计算量适合快速实验。第二个坑是文件命名。有些数据集的图片文件名里带有额外信息比如cat.1234.jpg有些则是纯数字。如果你打算自己划分训练集和验证集建议先把所有图片路径和标签整理成一个列表然后用scikit-learn的train_test_split按8:2或9:1划分。注意要分层抽样保证训练集和验证集里猫狗比例一致。我见过有人直接按文件夹顺序取前80%做训练结果验证集里全是狗模型评估完全失真。第三个坑是图像损坏。公开数据集里偶尔会有几张打不开的图片如果不处理训练到一半程序崩溃。稳妥的做法是在数据加载阶段加一个try-except遇到损坏图片就跳过并记录。另外图像格式也要注意虽然大部分是JPEG但偶尔混入PNG或BMP用PIL统一读取再转换就行。2.3 自定义Dataset类的编写要点PyTorch提供了Dataset和DataLoader两个抽象把数据加载和批处理解耦。你需要继承torch.utils.data.Dataset实现__len__和__getitem__两个方法。__len__返回样本总数__getitem__根据索引返回一张图像和对应标签。在__getitem__里用PIL读取图像然后做一系列变换缩放到固定尺寸、转成Tensor、归一化。归一化时通常用ImageNet的均值和标准差即mean[0.485, 0.456, 0.406]std[0.229, 0.224, 0.225]。这是因为很多预训练模型是在ImageNet上训练的保持相同的归一化方式能让特征分布更一致。标签方面猫设为0狗设为1或者反过来只要保持一致就行。返回的标签要是torch.long类型因为后面用交叉熵损失函数时要求标签是长整型。这里有个细节如果你在__getitem__里做了数据增强比如随机翻转、随机裁剪那这些操作只在训练时启用验证和测试时要关掉。实现方式很简单给Dataset类加一个train标志在__getitem__里根据这个标志选择不同的变换组合。3. 卷积神经网络到底在“看”什么3.1 从全连接层到卷积层的思维转变如果你之前只用过全连接网络第一次接触卷积神经网络可能会觉得别扭。全连接层把图像展平成一维向量每个像素和下一层的每个神经元都有连接。对于一张224x224x3的彩色图像展平后是150528维如果下一层有1000个神经元光这一层的参数量就超过1.5亿。参数量爆炸带来两个问题一是容易过拟合二是计算量太大。卷积层解决了这个问题它的核心思想是“局部连接”和“权值共享”。局部连接的意思是每个神经元只和输入图像的一个小区域相连这个区域叫感受野。比如用3x3的卷积核每个神经元只看3x3的像素块。权值共享的意思是同一个卷积核在整张图像上滑动所有位置共用同一组权重。这样一来参数量从亿级降到几百个。更重要的是这种设计天然适合图像数据因为图像的特征边缘、纹理、形状在空间上具有平移不变性一个边缘检测器在图像左上角有效在右下角同样有效。3.2 卷积、池化、激活函数的协作流程一个典型的卷积块由三部分组成卷积层、激活函数、池化层。卷积层负责提取特征激活函数引入非线性池化层负责降维和增强平移不变性。以3x3卷积核、步长为1、填充为1为例输入224x224的特征图输出仍然是224x224但通道数可能从3变成32。填充的作用是保持空间尺寸不变否则每次卷积都会让特征图缩小几层之后就没法继续了。激活函数通常用ReLU即f(x)max(0,x)。它计算简单能有效缓解梯度消失问题。池化层常用最大池化窗口2x2步长2把特征图的长宽各缩小一半。池化层没有可学习参数它的作用是保留最显著的特征同时减少后续计算量。一个完整的CNN就是把这些卷积块堆叠起来最后接全连接层做分类。比如经典结构卷积-ReLU-池化重复四次然后展平接两个全连接层输出两个类别的分数。3.3 感受野与特征层次的直观理解随着卷积层数增加每个神经元对应的感受野越来越大。第一层卷积核只看3x3的像素第二层看第一层输出的3x3区域对应原图5x5第三层对应7x7以此类推。这意味着浅层网络捕捉局部细节比如边缘和角点深层网络捕捉全局语义比如“猫的耳朵”或“狗的鼻子”。这种层次化特征提取是CNN强大的根本原因。你可以做一个简单的实验来验证把训练好的第一层卷积核可视化你会发现它们长得像边缘检测器有的对水平边缘敏感有的对垂直边缘敏感。把最后一层全连接层的权重可视化会发现它们对应的是更抽象的模式。理解这一点你就明白为什么数据增强、归一化、网络深度这些因素会显著影响最终效果。猫狗分类任务中猫和狗的区别往往体现在耳朵形状、脸部轮廓、毛发纹理这些中高层特征上所以网络需要足够的深度来捕捉这些信息。4. 训练循环里那些没人告诉你的细节4.1 损失函数与优化器的选择逻辑二分类任务最常用的损失函数是交叉熵损失。PyTorch里用nn.CrossEntropyLoss它内部已经包含了Softmax操作所以你的模型最后一层不要加Softmax直接输出两个类别的原始分数即可。如果你不小心加了Softmax再传给CrossEntropyLoss相当于做了两次Softmax梯度会变得很小训练几乎不动。这个坑我踩过排查了半天才发现是重复激活的问题。优化器方面Adam是入门首选它自适应调整学习率对初始学习率不敏感。初始学习率设1e-3或1e-4都行。如果你追求更好的泛化性能可以试试SGD加动量但需要手动调学习率对新手不太友好。权重衰减weight decay可以加一点比如1e-4起到正则化作用防止过拟合。但注意权重衰减不要加在偏置项和BatchNorm层的参数上这些参数不需要正则化。4.2 训练循环的骨架与常见错误一个标准的训练循环包含以下步骤前向传播、计算损失、梯度清零、反向传播、更新参数。顺序很重要梯度清零必须在反向传播之前否则梯度会累加。我见过有人把optimizer.zero_grad()写在反向传播之后结果模型完全不收敛。正确的顺序是optimizer.zero_grad() outputs model(inputs) loss criterion(outputs, labels) loss.backward() optimizer.step()另外训练时要把模型设为model.train()验证时设为model.eval()。这两个模式的区别在于Dropout和BatchNorm层的行为。训练时Dropout随机丢弃神经元BatchNorm用当前批次的统计量验证时Dropout关闭BatchNorm用训练阶段累积的全局统计量。如果忘了切换验证结果会波动很大。4.3 批次大小与学习率的配合关系批次大小决定了每次参数更新时用多少样本计算梯度。批次太小梯度噪声大训练不稳定批次太大内存吃不消而且泛化性能可能下降。对于猫狗分类批次大小设32或64比较合适。如果你用GPU显存不够就减小批次同时按比例降低学习率。经验规则是批次翻倍学习率也翻倍批次减半学习率也减半。但这不是铁律Adam优化器对这个没那么敏感。还有一个细节如果最后一批样本数不足批次大小DataLoader默认会返回一个较小的批次。这本身没问题但如果你的模型里有BatchNorm层且最后一批只有一个样本BatchNorm会报错因为无法计算方差。解决办法是设置drop_lastTrue丢弃最后不足一个批次的样本。数据量大的时候丢几个样本无所谓。4.4 训练过程中的监控指标训练时不要只盯着损失值还要看准确率。损失下降但准确率不升可能是模型在优化概率分布但决策边界没变。更重要的指标是验证集上的表现。每训练完一轮在验证集上跑一遍记录验证损失和验证准确率。如果训练损失持续下降验证损失先降后升说明过拟合了需要加正则化或早停。如果训练损失和验证损失都居高不下说明欠拟合需要增加模型容量或延长训练。我习惯在训练循环里加一个简单的打印每轮输出训练损失、训练准确率、验证损失、验证准确率。这样一眼就能看出模型是在学习还是在瞎猜。另外保存验证准确率最高的模型权重而不是最后一轮的权重。因为最后一轮可能已经过拟合了验证准确率反而不如中间某轮。5. 数据增强小数据集上的救命稻草5.1 为什么数据增强能显著提升泛化能力猫狗分类数据集只有两万多张图片对于深度网络来说不算多。如果直接训练模型很容易记住训练样本的细节导致过拟合。数据增强通过对训练图像做随机变换生成“新”的样本让模型看到更多样的数据分布。比如随机水平翻转猫朝左和朝右都是猫模型不应该因为方向不同就改变判断。随机裁剪让模型关注图像的不同区域随机旋转让模型适应不同角度。数据增强的本质是一种正则化它告诉模型这些变换不改变类别标签所以模型应该学习对这些变换不变的特征。这比单纯加L2正则化更有效因为它直接作用于输入空间迫使模型学习更鲁棒的特征表示。实测下来合理的数据增强能让验证准确率提升5到10个百分点效果非常明显。5.2 常用增强手段及其适用场景水平翻转是最安全、最通用的增强几乎适用于所有自然图像分类任务。垂直翻转要慎用因为猫狗通常不会倒立垂直翻转可能产生不自然的样本。随机裁剪和随机缩放可以结合使用先缩放到稍大尺寸再随机裁剪到目标尺寸。颜色抖动包括调整亮度、对比度、饱和度、色调能提升模型对光照变化的鲁棒性。随机旋转小角度比如正负15度也可以但角度太大可能引入不自然的样本。需要注意的是验证集和测试集绝对不能做数据增强只能做和训练时相同的缩放和归一化。否则评估结果会不稳定无法反映模型的真实性能。另外数据增强的强度要适中。过度增强会让训练样本和真实分布差距太大模型反而学不到有用的特征。我一般从水平翻转加随机裁剪开始效果稳定后再逐步加入颜色抖动。5.3 用torchvision.transforms搭建增强流水线torchvision.transforms提供了现成的变换函数用Compose把它们串起来就行。训练时的变换流水线大概是随机裁剪到224x224、随机水平翻转、转Tensor、归一化。验证时的流水线是缩放到256x256、中心裁剪到224x224、转Tensor、归一化。注意顺序先做几何变换再做颜色变换最后转Tensor和归一化。如果你用的是自定义Dataset可以在__getitem__里根据train标志选择不同的Compose对象。这样代码结构清晰训练和验证的逻辑完全分开。另外transforms里的随机操作每次调用都会产生不同的结果所以同一个样本在不同轮次看到的增强版本不同这正是我们想要的。6. 模型评估与调优的实战思路6.1 混淆矩阵比准确率更能说明问题准确率是整体正确率但在类别不平衡时可能误导。猫狗分类通常比较平衡但验证集划分时可能略有偏差。混淆矩阵能告诉你模型在猫和狗上分别犯了多少错。如果模型把大部分猫都预测成狗那说明模型对猫的特征学习不足。计算精确率、召回率、F1分数能更全面地评估模型。在猫狗分类里精确率和召回率通常比较接近如果差距大说明模型偏向某一类。我习惯在验证集上跑一遍打印混淆矩阵和分类报告。scikit-learn的classification_report一行代码就能输出所有指标非常方便。如果发现某一类召回率特别低可以检查那一类的训练样本是否太少或者增强是否过度导致样本失真。6.2 学习率调整策略的实际效果固定学习率在训练初期没问题但后期可能太大导致在最优解附近震荡。学习率衰减策略能让训练更稳定。常见的有StepLR每过若干轮把学习率乘以一个因子比如0.1。还有ReduceLROnPlateau当验证损失不再下降时自动降低学习率。我一般用StepLR每10轮衰减一次衰减因子0.1。实测下来比固定学习率能提升1到2个百分点的验证准确率。注意学习率衰减的时机很重要。衰减太早模型还没充分学习衰减太晚后期震荡浪费轮次。可以观察验证损失曲线如果连续几轮不降就可以考虑衰减了。另外如果你用Adam优化器它本身有自适应学习率衰减策略的效果可能没那么明显但加上去也没坏处。6.3 早停法与模型保存的最佳实践早停法是在验证损失不再改善时提前结束训练防止过拟合。实现方式很简单记录最佳验证损失如果连续N轮没有超过最佳值就停止训练。N通常设5到10。早停能节省大量时间尤其是在你不确定该训练多少轮的时候。配合模型保存只保存验证损失最低的那一轮权重最终得到的就是泛化性能最好的模型。保存模型时推荐保存state_dict而不是整个模型对象。state_dict只包含参数张量加载时先实例化模型结构再load_state_dict。这样更灵活也避免了pickle版本兼容问题。另外保存优化器的状态也有必要如果你打算继续训练的话。但最终交付时只需要模型参数就够了。7. 从训练完成到实际推理的最后一公里7.1 加载模型进行单张图片预测训练完成后加载保存的state_dict把模型设为eval()模式。读入一张图片做和验证集相同的预处理缩放、中心裁剪、转Tensor、归一化。注意输入要加一个批次维度因为模型期望的输入是[batch, channel, height, width]。用torch.unsqueeze(0)在维度0上增加一维。然后前向传播得到两个类别的分数用torch.softmax转成概率取概率大的那个作为预测结果。这里有个容易忽略的点预处理必须和训练时完全一致。如果你训练时用了ImageNet的均值和标准差推理时也要用同样的值。如果训练时缩放到224x224推理时也要缩放到224x224。不一致的预处理会导致预测结果完全错误。我建议把预处理参数写在一个配置字典里训练和推理共用避免手误。7.2 批量推理与性能优化如果需要预测大量图片逐张推理效率太低。可以把多张图片组成一个批次一次性送入模型。DataLoader同样适用于推理只要把shuffle设为Falsebatch_size设大一点。推理时用torch.no_grad()上下文管理器关闭梯度计算能显著减少内存占用和计算时间。在GPU上批量推理比逐张推理快几倍甚至几十倍。如果部署到生产环境还可以考虑把模型转成ONNX格式或者用TorchScript做图优化。这些进阶操作能进一步提升推理速度但对于入门项目来说先把基础流程跑通更重要。等你对模型行为有了直觉再去折腾这些优化也不迟。7.3 模型预测错误的典型分析与改进方向即使验证准确率达到90%以上模型仍然会犯一些错误。分析错误样本能帮你找到改进方向。常见的错误类型包括猫狗姿态极端比如只露出半张脸、图像模糊、背景干扰严重、猫狗颜色和背景接近。针对这些问题可以尝试更有针对性的数据增强比如随机遮挡、背景替换或者收集更多类似场景的训练数据。另一个改进方向是换用更强的 backbone比如ResNet、EfficientNet。这些预训练模型在ImageNet上已经学到了丰富的特征微调一下就能在猫狗分类上达到95%以上的准确率。但注意换模型后要重新调整学习率和批次大小因为不同模型对超参数敏感度不同。我一般先用小学习率微调几轮再逐步放大。8. 一些让我少走弯路的经验之谈训练猫狗分类模型这件事我前后做过很多次每次都能发现新的细节。最开始我以为只要把网络搭起来、数据喂进去就能出结果后来才发现数据质量、预处理一致性、超参数配合这些“外围”工作才是决定成败的关键。有一次我为了追求高准确率把网络加深到二十多层结果训练损失降到很低验证准确率却卡在70%上不去。后来把网络砍到八层加了数据增强和Dropout验证准确率反而到了88%。这件事让我明白模型容量要和数据量匹配盲目加深只会过拟合。还有一次我训练完模型后兴冲冲地拿新图片测试结果预测全错。排查了半天发现是推理时的归一化参数写错了把标准差当成了方差。这种低级错误在代码量大的时候特别容易发生所以我现在习惯把预处理参数写成一个独立的配置文件训练和推理都从同一个地方读改一处就全改了。最后分享一个实用小技巧在训练循环里加一个计时器记录每轮耗时。这样你能直观感受到不同批次大小、不同模型复杂度对训练速度的影响。当你需要快速迭代实验时这个时间感知能帮你做出更合理的取舍。比如如果一轮训练要半小时那你一天只能试几个配置如果一轮只要两分钟你就能快速试错找到更好的方案。

相关新闻

AI写作工具怎么选?六大平台榜单与智能改写实操指南

AI写作工具怎么选?六大平台榜单与智能改写实操指南

1. 榜单背后的真实需求:科研写作的四个坎先说我自己的感受:做科研的人,最难受的往往不是实验设计,也不是数据分析,而是“把话说清楚”。开题报告要讲逻辑,文献综述要讲立场,正文要讲证据&#x…

2026/10/19 4:30:46 阅读更多 →
逆向Lua 5.1字节码:luadec51反编译实战与二次开发

逆向Lua 5.1字节码:luadec51反编译实战与二次开发

简介:luadec51 是一款面向 Lua 5.1.x 的 Lua 反编译器,基于 Hisham Muhammad 的 luadec(针对 Lua 5.0.x)发展而来,采用与原版相同的免费许可证。它适合需要逆向分析 Lua 字节码、研究虚拟机指令或恢复丢失源码的开发者…

2026/10/19 4:30:46 阅读更多 →
open-code-review:从形式化到高效落地的Code Review实践指南

open-code-review:从形式化到高效落地的Code Review实践指南

1. 代码审查这件事,为什么这么多团队做不好代码审查(Code Review)在国内开发团队里是个挺微妙的话题。你说它不重要,几乎所有团队都认同它重要;你说它在认真做,真正能把 Review 做出价值的团队少之又少。很…

2026/10/19 4:30:46 阅读更多 →

最新新闻

基于LSTM多时间序列特征提取的道岔故障诊断项目实战

基于LSTM多时间序列特征提取的道岔故障诊断项目实战

简介:本资源面向计算机、人工智能、自动化、通信工程等专业的在校学生与教师,以及从事轨道交通信号故障诊断的工程人员,提供一套基于LSTM多时间序列特征提取的道岔故障诊断完整实现方案。项目以Python为开发语言,围绕道岔动作电流…

2026/10/19 5:17:15 阅读更多 →
从代码补全到工作流入口:AI接管开发流程的边界与准备

从代码补全到工作流入口:AI接管开发流程的边界与准备

1. 从"补全代码"到"接管流程":这个信号为什么值得关注大多数人对代码生成工具的认知还停留在"你写注释,它补全函数"的阶段。过去两年,各类代码助手确实主要围绕单点提效做文章——补全一行、生成一个函数、解释…

2026/10/19 5:17:15 阅读更多 →
diagram-design 自研实践:图形编辑器的数据建模与渲染核心

diagram-design 自研实践:图形编辑器的数据建模与渲染核心

1. 先搞清楚 diagram-design 这类项目到底要交付什么第一次看到 “diagram-design” 这个标题,大部分人的第一反应是“做个画图工具”。这个理解没错,但不够准确。我在帮人评审过不少类似项目,也自己动手搭过几个图形编辑器的原型&#xff0c…

2026/10/19 5:17:15 阅读更多 →
AI大模型破解医疗数据困境:从数据治理到智能应用落地

AI大模型破解医疗数据困境:从数据治理到智能应用落地

做了几年医疗信息化,我最大的感触是:这个行业最不缺的是数据,最缺的也是数据。说不缺,是因为随便一家不算太大的医院,HIS、LIS、RIS、EMR这些系统里都躺着十年以上的病历、报告和检查记录,论体量完全称得上…

2026/10/19 5:17:15 阅读更多 →
业务驱动的AI Agent工程化评测体系设计

业务驱动的AI Agent工程化评测体系设计

1. 项目概述:这不是一个“智能体评测平台”,而是一套业务驱动的工程验证体系“货拉拉业务 Agent 评测平台”这个标题里,“货拉拉”是行业锚点,“业务”是核心定语,“Agent”不是泛指AI助手,而是特指在真实货…

2026/10/19 5:17:15 阅读更多 →
用UiPath自动化禁用Windows更新:批量节点策略治理与踩坑实录

用UiPath自动化禁用Windows更新:批量节点策略治理与踩坑实录

某天上午,我打开一批测试节点的事件日志,看到整齐划一的"Windows更新已完成安装,正在重启"。前一天夜里,跑批任务刚跑到一半,机器就重启了,监控平台黄了一串。值班的同事说,这已经不是…

2026/10/19 5:16:15 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →