Matlab手写逻辑回归:自定义数据格式与训练集个数实现
之前做用户流失预测和信用评分时我第一版模型经常直接用逻辑回归原因很直接可解释性强、训练快、而且能输出概率。这两年Matlab用得比较多发现网上很多“逻辑回归分类预测”的教程代码要么只跑自带数据集要么把数据格式写死换到自己的Excel或者CSV就得从头改。后来我干脆写了一套可自定义训练集个数与数据格式的Matlab逻辑回归代码核心函数全部手写不依赖专门工具箱替换数据文件就能跑。这篇文章就把这套实现完整拆开从原理到代码到避坑一步步说清楚。1. 这个项目解决了什么问题1.1 为什么是逻辑回归 Matlab逻辑回归虽然名字里带“回归”但本质是二分类模型在工业界用得非常多。用户流失预测、信用评分、医疗诊断很多业务第一版模型就是逻辑回归。原因很简单模型透明、可解释性强、训练快、对硬件要求低。它还能输出概率而不是只给一个生硬的类别这对下游风控规则、营销决策特别友好。Matlab做这个任务最大的优势是矩阵运算方便写代码不用像C那样手撸循环调试和可视化也省心。训练完直接画损失曲线、画决策边界适合做算法验证和教学演示。有些人喜欢用Python调sklearn这当然没问题但如果你的数据需要和Simulink、既有Matlab工具箱打通或者团队协作环境就是Matlab那么直接用Matlab实现会省去很多工程对接成本。有人会问Matlab不是自带fitglm或fitclinear吗为什么还要手写因为自带函数封装得太黑盒你想看损失曲线、想改迭代逻辑、想加入自定义预处理步骤都很被动。而且自带函数对输入格式有严格要求数据里一旦有缺失值或者文本标签处理起来很麻烦。自己写的代码虽然看起来“笨”但每一步在算什么一清二楚对学习和调优都更有帮助。1.2 “自定义训练集个数与数据格式”到底指什么网上很多教程的代码是这样的load(data.mat)然后固定用前70%训练、后30%测试。一旦换自己的数据文件就得从头改一遍。这套代码想解决两个痛点训练集个数可变。数据总样本可能几百到几万代码里trainNum就是一个参数。设成80就是取前80条做训练剩余做测试设成总样本数就是只训练不评估。这样调参和对比不同训练集规模对模型的影响非常方便。数据格式自适应。支持.csv、.xlsx、.txt也支持带表头或不带表头默认认为标签在最后一列但如果你习惯把标签放在第一列也可以通过labelCol参数改。也就是说换数据文件时基本不用动核心训练函数只需要改主程序开头的配置参数。这套能力的价值在于把“写代码”和“调数据”解耦实际工作中能省掉大量重复劳动。注意代码默认要求数据全部是数值型。如果数据里有文本标签比如“是/否”或“正常/异常”需要先转换成0/1数字再喂给模型。这一步在后面的实际运行部分会详细说。2. 逻辑回归核心原理与Matlab建模思路2.1 从线性回归到分类sigmoid映射逻辑回归的思路非常直白先用特征做线性组合得到z θᵀx但这个值可以是任意大小不能直接当概率。于是加一层sigmoid激活函数h(z) 1 / (1 exp(-z))把z压缩到(0,1)区间。本质上就是“线性回归 概率压缩”。预测时如果h ≥ 0.5判为正类否则判为负类。因为最终的决策边界来自θᵀx 0这条直线所以逻辑回归天生是线性分类器。遇到非线性问题需要先构造多项式特征或交互特征这一点在调优时非常重要。Matlab实现sigmoid只需要一行function y sigmoid(z) y 1 ./ (1 exp(-z)); end这里有个Matlab新手特别容易踩的坑当z是向量时一定要用./和exp。如果用成/那就是矩阵除法结果是一个矩阵后续损失函数直接算成NaN。我第一次写逻辑回归时就栽在这里损失曲线直接画出了“瀑布”。2.2 损失函数与梯度下降为什么逻辑回归不用均方误差因为sigmoid套在均方误差里会让损失函数变成非凸函数梯度下降很容易卡在局部最优。逻辑回归用的是交叉熵损失J(θ) -(1/m) * Σ [yᵢ * log(hᵢ) (1-yᵢ) * log(1-hᵢ)]这个函数是凸函数只要学习率设置得当梯度下降可以收敛到全局最优。对参数θ求偏导后梯度表达式非常漂亮和线性回归的梯度形式一样∂J/∂θ (1/m) * Xᵀ(h - y)也就是说误差h-y被放大后沿特征方向反向传播。训练过程中每一次迭代都在做同一件事计算当前预测和真实值的差距再沿着梯度反方向调整参数。理解了这个看代码就顺了。2.3 Matlab向量化实现思路写Matlab代码最忌讳用for循环逐条样本计算数据量一大就慢到不行。正确做法是整体矩阵运算。假设X是m×n矩阵先给X左边补一列全1作为偏置项θ₀然后z X * theta得到一个m×1向量h sigmoid(z)error h - ygrad (1/m) * X * error整个训练过程就是一个循环更新theta的过程循环次数等于迭代次数而不是样本个数。这样写出来的代码非常短而且可以通过矩阵维度来检查逻辑X * error得到的一定是(n1)×1向量正好和theta维度匹配。我在实际项目中坚持这种向量化写法哪怕样本量只有几百条也保持了良好的可扩展性。2.4 为什么用全量梯度下降而不是随机梯度下降这套代码使用的是全量梯度下降也就是每一步都拿整个训练集去计算梯度。优点是梯度方向稳定损失曲线平滑很容易判断收敛状态缺点是如果训练集达到上百万条每步计算会比较慢。但作为快速验证和教学实验全量梯度下降完全够用而且调试起来更简单。如果以后要处理大规模数据可以改成小批量梯度下降或者用Matlab自带的fminunc做更高级的优化。基础版本先跑通再考虑性能优化这是我一直推荐的迭代方式。3. 代码架构与关键模块实现3.1 主程序参数配置入口我把所有配置项放在主程序开头保持“参数与逻辑分离”。文件名就叫main_logistic.m结构如下%% 清空环境 clear; close all; clc; %% 全局参数配置 params.dataFile iris.csv; % 数据文件路径支持csv/xlsx/txt params.labelCol 5; % 标签所在列默认最后一列 params.trainNum 100; % 训练集样本个数 params.learningRate 0.1; % 学习率 params.iterations 500; % 迭代次数 params.normalize true; % 是否做特征归一化建议true params.threshold 0.5; % 分类阈值 %% 读取数据 data loadData(params.dataFile); %% 分离特征和标签 y data(:, params.labelCol); X data; X(:, params.labelCol) [];这里有一个顺序细节必须先保存y再从X里删除标签列。如果不小心先删列再取标签取到的就是另一列数据了。另外如果trainNum超过总样本数后面拆分测试集时会出错这一步我也在5.4专门做了防护。3.2 数据读取与格式自适应loadData函数根据文件后缀选择不同的读取方式。readmatrix是Matlab R2019a之后推荐的通用读取函数可以解析.csv、.xlsx和.txt。如果版本较老可以替换成csvread或xlsread。function data loadData(filePath) [~, ~, ext] fileparts(filePath); switch lower(ext) case {.csv, .txt} data readmatrix(filePath); case .xlsx data readmatrix(filePath); case .mat loaded load(filePath); fields fieldnames(loaded); data loaded.(fields{1}); % 取.mat中的第一个变量 otherwise error(不支持的文件格式: %s, ext); end end带表头的数据在readmatrix下通常能自动跳过文本行但如果表头里有中文、日期等特殊字符可能会被读成NaN列。更稳妥的方式是先用readtable读取再转成数组tbl readtable(filePath); data table2array(tbl);readtable能正确识别文本列和数值列转数组后相当于自动把文本列丢掉了。如果你的数据里有一列“ID”或者“日期”并且不想参与建模这一步可以手动删掉对应列。3.3 训练函数梯度下降核心代码读取完数据后按照trainNum拆分训练集和测试集X_train X(1:params.trainNum, :); y_train y(1:params.trainNum); X_test X(params.trainNum1:end, :); y_test y(params.trainNum1:end);如果开启归一化必须在拆分之后只用训练集计算均值和标准差。这个细节很关键测试集必须模拟未来未知数据不能用它的统计量去参与训练否则会引入信息泄漏。很多初学者的归一化错误就发生在这一步。if params.normalize mu mean(X_train); sigma std(X_train) 1e-8; X_train (X_train - mu) ./ sigma; X_test (X_test - mu) ./ sigma; end核心训练函数如下function [theta, costHistory] trainLogistic(X, y, alpha, numIter) [m, n] size(X); X [ones(m, 1), X]; theta zeros(n 1, 1); costHistory zeros(numIter, 1); for iter 1:numIter h sigmoid(X * theta); grad (1 / m) * (X * (h - y)); theta theta - alpha * grad; costHistory(iter) computeCost(X, y, theta); end end损失函数function J computeCost(X, y, theta) m length(y); h sigmoid(X * theta); J -(1 / m) * sum(y .* log(h 1e-8) (1 - y) .* log(1 - h 1e-8)); end这里给log加1e-8是为了避免h0或h1时出现log(0)无穷大属于数值稳定处理。不要小看这行真实数据里总会出现极端预测概率不加防护就会得到NaN。3.4 预测与评估指标预测函数和训练函数有两点必须保持一致一是加偏置列二是沿用训练集的归一化参数。很多朋友训练时跑得很顺一到测试或者新数据预测就崩几乎都是这两个地方没对齐。我在主程序里把mu和sigma作为变量直接传递就是为了避免这个问题。function [pred, prob] predictLogistic(theta, X, threshold) X [ones(size(X, 1), 1), X]; prob sigmoid(X * theta); pred prob threshold; end评估阶段输出准确率和混淆矩阵[pred, prob] predictLogistic(theta, X_test, params.threshold); accuracy mean(pred y_test); fprintf(测试集准确率: %.4f\n, accuracy); C confusionmat(y_test, pred); disp(C);如果正负样本不平衡光看准确率会骗人。比如95%是负样本模型全预测负类也能拿到95%准确率但毫无意义。所以我建议至少用混淆矩阵手算precision和recallTP C(2,2); FP C(1,2); FN C(2,1); precision TP / (TP FP); recall TP / (TP FN); fprintf(Precision: %.4f, Recall: %.4f\n, precision, recall);4. 实际运行与结果分析4.1 数据准备与调用示例用经典iris数据集来演示。iris一共150条样本4个特征3个类别。二分类逻辑回归只取前两类setosa和versicolor并把标签转换成0/1。假设iris.csv的最后一列是文本标签预处理如下% 假设data已经读入X是前4列labels是第5列 X data(:, 1:4); labels data(:, 5); % 只保留两类 idx ismember(labels, {setosa, versicolor}); X X(idx, :); labels labels(idx, :); % 生成二分类标签setosa0, versicolor1 y ismember(labels, versicolor); % 拼回去最后一列称为0/1 dataProcessed [X, y];拼接完之后再执行主程序的流程params.labelCol设为5即可。这里再次强调逻辑回归只认数值型标签文本标签必须提前映射成0/1否则后面矩阵运算直接报错或得到荒谬结果。4.2 训练前的数据预处理逻辑回归对特征尺度很敏感。比如年龄0-100收入10000-50000收入项对梯度的贡献天然被放大会导致收敛变慢甚至震荡。标准做法是z-score归一化z (x - μ) / σ如果某个特征标准差接近0也就是所有样本几乎同值归一化会出现除0问题。我在代码里给std加了一个1e-8的微小常数能有效避免这个问题。缺失值同样要处理。readmatrix读到空值会变成NaN训练时梯度直接变成NaN。最简单的办法是用fillmissing填充比如线性插值或均值填充X fillmissing(X, linear);如果缺失比例太高填充只是权宜之计更合理的做法是先做数据清洗再进入建模流程。4.3 结果解读与决策边界可视化训练完成后先画损失曲线判断收敛状态plot(costHistory, LineWidth, 1.5); xlabel(迭代次数); ylabel(损失值); title(训练集损失变化); grid on;正常曲线应该单调下降并趋于平缓。如果曲线突然上扬、抖动很大说明学习率太高如果一路缓慢下降但迭代500次还没平稳说明学习率太低。损失曲线是我调试模型时第一个看的图比准确率更能暴露问题。对于二维特征可以画决策边界。生成网格点后用训练好的模型预测每个点并画等高线[x1g, x2g] meshgrid(linspace(min(X_train(:,1)), max(X_train(:,1)), 200), ... linspace(min(X_train(:,2)), max(X_train(:,2)), 200)); Xgrid [x1g(:), x2g(:)]; Xgrid (Xgrid - mu) ./ sigma; predGrid predictLogistic(theta, Xgrid, params.threshold); contourf(x1g, x2g, reshape(predGrid, size(x1g)), 1);画出来之后如果两类数据本身交叉严重边界就会歪歪扭扭模型准确率自然上不去。这个可视化比单纯看数字直观得多。4.4 一个完整的iris运行结果示例我实际跑了一遍iris前两类数据trainNum设为100学习率0.1迭代500次开启归一化。损失曲线最终收敛到0.11左右测试集50条样本准确率100%。这个结果有点好到不真实但iris本来就是线性可分数据所以只能说明代码流程是对的不代表换到复杂数据也会这么高。真实业务数据通常有噪声、有重叠准确率能到85%已经值得庆祝了。5. 常见问题与排查技巧5.1 矩阵维度对不上怎么办这是Matlab里最常遇到的报错。出现维度不匹配时不要急着翻代码先检查各个变量的sizesize(X) % 应该是 m x n size(y) % 应该是 m x 1 size(theta) % 应该是 (n1) x 1常见原因有忘记加偏置列导致theta维度是n×1但X补了一列变成n1维或者y是行向量而不是列向量。我习惯在训练函数开头强制转换y y(:);这样能提前暴露很多维度问题也能避免后续矩阵乘法时静默出错。5.2 梯度不下降或NaN的原因损失值出现NaN大概率是log里面出现了0。虽然代码里加了1e-8但exp函数仍然可能溢出。sigmoid中z很负时exp(-z)会变成Inf1/(1Inf)0本身没问题但Inf参与矩阵乘法后可能产生NaN。最有效的规避方法是特征归一化把z控制在合理范围内其次是减小学习率。梯度不下降除了学习率太小还可能是数据里有冗余特征或者损失函数本身已经收敛。我建议打印前几次迭代和最后一次迭代的损失如果下降幅度在1e-5以内基本就是收敛了继续增加迭代次数没有太大意义。5.3 分类效果差先查特征缩放如果跑完发现准确率只有60%别急着换模型。逻辑回归效果差的很大一部分原因是特征问题。先画散点图按标签着色看两类数据是否重叠严重再检查是否有无关列混入比如样本编号、日期、文本ID。如果特征都是连续数值却分类不好可以尝试加交互项X_new [X, X(:,1).^2, X(:,2).^2, X(:,1).*X(:,2)];逻辑回归的决策边界是线性的加多项式特征等于把原始空间做非线性映射边界会变得弯曲效果往往上一个台阶。但也别加太多否则容易过拟合。5.4 自定义数据格式时的易错点带表头的数据用readmatrix一般没问题但表头里一旦有中文或日期可能被读成NaN列。稳妥做法是用readtable读取后再转数组。分隔符如果不是逗号要显式指定data readmatrix(filePath, Delimiter, \t);标签不是0/1时要提前映射。trainNum设置过大时要加判断if params.trainNum size(X, 1) params.trainNum size(X, 1); end否则X_test是空矩阵测试阶段会报维度错误。这些坑看起来很基础但在实际使用时出现频率极高值得在代码里提前防御。5.5 学习率怎么调我常用的调参策略是先设0.1迭代100次打印损失曲线。如果曲线下降很快但开始震荡就把学习率降到0.01如果曲线几乎不动就升到0.3或0.5。逻辑回归的梯度大小跟特征尺度有关归一化后学习率更容易调。也可以做学习率衰减每迭代100次乘0.9收敛会更稳。对于教学项目固定学习率已经够用了没必要上高级优化器。6. 个人实操体会与扩展建议6.1 从“能跑”到“好用”的三个细节第一参数分离。所有配置都放主程序开头训练函数不写死任何参数换数据集时只需要复制主程序改几行。第二归一化统计量要留好。训练时算出的mu和sigma一定要保存下来预测新样本时用同一套统计量否则概率全乱。第三输出要完整。准确率不能只看一个数字至少输出混淆矩阵和precision/recall才能发现类别不平衡问题。我在实际项目里还会把训练好的theta、mu、sigma保存成.mat文件save(logisticModel.mat, theta, mu, sigma);生产环境只需要加载这个文件对新样本做同样的归一化然后计算sigmoid(X * theta)即可输出概率。这样就把训练和预测彻底解耦了。6.2 还能怎么扩展这套代码很容易扩展成多分类逻辑回归常用“一对多”策略每个类别训练一个二分类器预测时选概率最大的那个。加正则化也很简单在损失函数里加L2惩罚项梯度对应调整。特征选择可以看theta绝对值大小绝对值越大说明对应特征对决策影响越大。如果数据非线性程度太高可以把逻辑回归换成带核函数的SVM或者做特征工程后继续用逻辑回归。我做这个项目时最深的体会是别迷信高级模型。很多时候逻辑回归就能把业务基线拉起来后续再上XGBoost才是正确的迭代路径。而一份“拿来就能改”的Matlab代码正是快速验证自己数据集的最短路径。

相关新闻

AnyPS5实战:PS5远程串流、网络映射与媒体共享配置指南

AnyPS5实战:PS5远程串流、网络映射与媒体共享配置指南

很多人的PS5买回来以后,基本就固定死在客厅电视柜上,想玩只能老老实实坐在沙发上。我折腾AnyPS5这个项目的动机特别简单:希望家里随便哪块屏幕,书房显示器、卧室平板、甚至出门在外的手机,都能用上这台主机。整套方案折…

2026/10/13 2:04:22 阅读更多 →
DeepSeek API与Function Calling:普通人两天搭建最小Agent实战

DeepSeek API与Function Calling:普通人两天搭建最小Agent实战

周末花了两天做了一组实验:假设自己是一个没系统学过 Agent 开发的普通后端,只看文档,用 DeepSeek 的 API 和它外层那套工具调用体系,到底能折腾出什么。实验结果比我预想得顺利不少——Day 1 搭通了 OpenAI 兼容接口和 Function …

2026/10/13 2:04:22 阅读更多 →
质谱成像技术全解析:从原理到植物应用实操

质谱成像技术全解析:从原理到植物应用实操

质谱成像技术这几年在植物学研究里是肉眼可见地“出圈”了。之前大家看一篇植物代谢的文章,配图大多是热图、柱状图,现在越来越多的高分文章里会出现一张张色彩斑斓的组织切片图,告诉你某个代谢物到底在叶脉、腺毛还是种子糊粉层里富集。这就…

2026/10/13 2:04:22 阅读更多 →

最新新闻

鸿蒙音频播放引擎优化:从700ms到150ms的秒播与无缝流动实践

鸿蒙音频播放引擎优化:从700ms到150ms的秒播与无缝流动实践

前段时间调 SmartXPlayer 音频库的时候,我一直在日志里盯着一个指标:从手指点击曲目到扬声器真正出声,到底要多少毫秒。最开始的结果让我有点头疼,本地无损音乐要 700ms 多,在线歌曲更是动不动就超过 1 秒。排查下来发…

2026/10/13 8:02:28 阅读更多 →
一文分清满二叉树、完全二叉树、平衡二叉树与搜索二叉树

一文分清满二叉树、完全二叉树、平衡二叉树与搜索二叉树

先说明一下思路:这篇笔记的标题里带了个“Gemini永久会员”,但核心内容其实是后台看到的四类二叉树对比。我的处理方式很简单——主题老老实实讲二叉树,顺手带一句我确实是用Gemini帮忙校验过定义细节,磨了很久才把易混淆的点讲顺…

2026/10/13 8:02:28 阅读更多 →
医疗设备智能报修系统:Python+Django与AI技术实践

医疗设备智能报修系统:Python+Django与AI技术实践

1. 医疗设备报修管理系统的行业背景与价值在医院日常运营中,医疗设备的稳定运行直接关系到诊疗质量和患者安全。传统纸质报修流程存在响应慢、跟踪难、数据散等问题。我们团队开发的这套智能报修系统,通过PythonDjango技术栈结合AI能力,实现了…

2026/10/13 8:02:28 阅读更多 →
ITMC企业经营管理沙盘模拟系统方案:从参数设计到落地避坑全解析

ITMC企业经营管理沙盘模拟系统方案:从参数设计到落地避坑全解析

简介:《ITMC企业经营管理沙盘模拟系统方案》PDF文档是一份面向沙盘模拟竞赛参赛团队与指导教师的完整方案,系统梳理了企业经营管理沙盘的核心规则与操作流程。内容涵盖CEO、CSO等关键角色的岗位职责,评分规则中关于市场、ISO认证、生产线、厂…

2026/10/13 8:02:28 阅读更多 →
Java常用类编程实践:String、Math与日期处理

Java常用类编程实践:String、Math与日期处理

1. 项目概述"sdut-Java面向对象-10 常用类(编程题8-15)"是一组针对Java常用类的编程练习题目,主要面向计算机专业学生和Java初学者。这组题目涵盖了Java标准库中最常用的几个核心类,包括String、Math、Date、Calendar等…

2026/10/13 8:02:28 阅读更多 →
多智能体编排实战:集成Copilot与Claude构建Antigravity系统

多智能体编排实战:集成Copilot与Claude构建Antigravity系统

最近一年,多智能体系统这个词几乎被各种框架和社区项目反复包装,但真正能落地解决问题的编排方案并没有想象中那么多。我最近在做的 Antigravity 多智能体系统,就是一套把代码生成能力和通用对话能力拆开,分别交给 Copilot 与 Cla…

2026/10/13 8:01:27 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →