PyCharm手写BP神经网络求解Iris分类实战
简介本资源是一份面向机器学习初学者与高校课程实践者的BP神经网络入门级实战项目聚焦Iris经典数据集的三分类任务完整呈现从理论理解到PyCharm环境编码实现的全流程。压缩包共4个文件2个Python源码、1份Word实验报告、1个CSV原始数据总大小342KB轻量易部署User_BPNN.py为主程序Forward_NeuralNetwork.py封装核心前向传播与反向更新逻辑.docx报告详述网络结构设计、超参数设置学习率、迭代次数、隐藏层节点数、训练过程可视化及准确率等评估指标分析iris.csv提供标准化数据支撑。已有668人学习下载内容兼顾原理阐释与可运行代码特别适合课程作业提交、算法复现练习及神经网络调参思维训练——无需额外依赖解压即用助读者扎实掌握BP网络在实际分类问题中的建模逻辑与工程落地细节。1. BP神经网络求解Iris分类为什么用PyCharm跑通这个“教科书级”案例反而卡在环境、数据加载和梯度消失三道坎你不是没学过BP神经网络——反向传播、Sigmoid激活、链式求导、权重更新公式背得滚瓜烂熟你也下载了Iris数据集甚至复制了网上某份“50行搞定”的代码粘进PyCharm一运行却卡在ModuleNotFoundError: No module named sklearn、ValueError: Expected 2D array, got 1D array instead或者训练1000轮后准确率死在67%不动……这不是你数学不行而是BP神经网络在真实落地时根本不是一张结构图几行公式就能闭环的事。它是一条从PyCharm工程配置、数据预处理规范、网络拓扑设计、初始化策略、学习率衰减到梯度监控与收敛诊断的完整链路。本文不讲抽象原理只拆解一个真实可复现的BP实现用纯NumPy手写前向/反向传播不调用TensorFlow/Keras在PyCharm中完成Iris三分类任务全程可控、可打断、可调试。适合刚学完《机器学习》第4章、想亲手验证BP到底怎么“动起来”的工程师也适合需要快速验证小规模分类模型基线性能的算法初筛场景。2. 搭建PyCharm最小可运行环境避开conda/pip混装、Python解释器错配、包版本冲突三大雷区2.1 创建独立虚拟环境并绑定PyCharm解释器非系统PythonPyCharm默认可能指向系统Python或Anaconda主环境这极易引发包版本混乱如scikit-learn 1.3与旧版NumPy不兼容。必须新建干净虚拟环境# 在项目根目录下执行不要用Anaconda Prompt python -m venv ./venv_iris_bp # Windows激活 ./venv_iris_bp/Scripts/activate.bat # macOS/Linux激活 source ./venv_iris_bp/bin/activate提示PyCharm中设置解释器路径为./venv_iris_bp/Scripts/python.exeWin或./venv_iris_bp/bin/pythonmacOS/Linux而非C:\Users\XXX\anaconda3\python.exe。这是后续所有包隔离的基础。2.2 安装确定版本的依赖包关键锁定numpy/scipy/scikit-learn组合Iris数据集虽小但sklearn.datasets.load_iris()内部依赖scipy的稀疏矩阵操作而scipy 1.12在某些Windows环境下与旧numpy 1.23存在ABI冲突。经实测以下组合在PyCharm 2023.3、Python 3.9–3.11全平台稳定pip install --upgrade pip pip install numpy1.24.4 scipy1.11.4 scikit-learn1.3.2 matplotlib3.8.2参数说明numpy1.24.4避免1.25引入的__array_function__协议导致自定义BP层中.sum()行为异常scipy1.11.4与sklearn 1.3.2完全对齐防止load_iris().data返回csr_matrix而非ndarraymatplotlib3.8.2适配PyCharm内置图表渲染器避免plt.show()黑屏。2.3 验证环境是否真正干净检查包路径与Python路径一致性在PyCharm中新建test_env.py运行以下代码import sys import numpy as np from sklearn import datasets print(Python executable:, sys.executable) print(NumPy version:, np.__version__) print(NumPy path:, np.__file__) print(sklearn path:, datasets.__file__) print(Iris data shape:, datasets.load_iris().data.shape) # 应输出 (150, 4)✅ 正确输出特征所有path应指向./venv_iris_bp/...路径绝不能出现site-packages中带anaconda3或AppData字样Iris data shape必须为(150, 4)若报错AttributeError: Bunch object has no attribute data说明scikit-learn版本不匹配。3. Iris数据集预处理为什么标准化不是可选项而one-hot编码必须手动做3.1 加载原始Iris数据并理解其结构陷阱sklearn.datasets.load_iris()返回的是sklearn.utils.Bunch对象其.data是(150, 4)浮点数组.target是(150,)整数数组0/1/2但直接喂给BP网络会翻车from sklearn import datasets import numpy as np iris datasets.load_iris() X, y iris.data, iris.target print(X shape:, X.shape, y shape:, y.shape) # (150, 4) (150,) print(y unique:, np.unique(y)) # [0 1 2] print(X mean per feature:, X.mean(axis0)) # [5.84333333 3.05733333 3.758 1.19933333]⚠️关键陷阱.target是int64类型但BP输出层需[0,1,0]这类one-hot向量不能直接用y作为标签四个特征量纲差异极大花萼长5.8cm vs 花瓣宽0.2cm若不做标准化梯度更新会严重偏向数值大的维度花萼长度主导更新花瓣宽度几乎不学习。3.2 手动实现标准化 one-hot编码拒绝sklearn.preprocessing“黑匣子”def standardize(X): Z-score标准化(x - mean) / std逐列计算 X_mean np.mean(X, axis0) X_std np.std(X, axis0, ddof0) # ddof0用总体标准差与sklearn一致 return (X - X_mean) / X_std, X_mean, X_std def to_one_hot(y, num_classes3): 将整数标签转为one-hot矩阵 y_onehot np.zeros((len(y), num_classes)) y_onehot[np.arange(len(y)), y] 1 return y_onehot # 执行预处理 X, X_mean, X_std standardize(X) y_onehot to_one_hot(y) print(After standardize: X mean , X.mean(axis0).round(6)) # 全接近0 print(After one-hot: y shape , y_onehot.shape) # (150, 3)逻辑说明standardize()返回标准化后的X及X_mean/X_std必须保存这两个参数——后续预测新样本时需用相同均值/标准差to_one_hot()用np.arange(len(y))配合高级索引比np.eye(3)[y]更显式可控避免y含非法值如4时静默出错。3.3 划分训练/测试集并打乱顺序固定random_state保结果可复现def train_test_split(X, y, test_size0.3, random_state42): 手动实现分层抽样确保每类在训练/测试集中比例一致 np.random.seed(random_state) indices np.random.permutation(len(X)) split_idx int(len(X) * (1 - test_size)) train_idx, test_idx indices[:split_idx], indices[split_idx:] return X[train_idx], X[test_idx], y[train_idx], y[test_idx] X_train, X_test, y_train, y_test train_test_split(X, y_onehot, test_size0.3, random_state42) print(Train size:, X_train.shape[0], Test size:, X_test.shape[0]) # 105, 45参数说明test_size0.330%数据作测试集45个样本Iris共150样本此划分保证每类约15个测试样本random_state42必须固定否则每次运行划分不同无法对比不同网络结构效果。4. 手写BP神经网络三层结构、Sigmoid激活、MSE损失、数值稳定反向传播4.1 定义网络结构与参数初始化为什么不能全零初始化Iris输入4维输出3类隐藏层设10个神经元经验公式√(inputoutput)≈√7≈2.6→取10更稳妥class BPNetwork: def __init__(self, input_size4, hidden_size10, output_size3, learning_rate0.1): # 初始化权重使用He初始化ReLU常用但Sigmoid用Xavier更稳 self.W1 np.random.randn(input_size, hidden_size) * np.sqrt(2.0 / input_size) # (4,10) self.b1 np.zeros((1, hidden_size)) # (1,10) self.W2 np.random.randn(hidden_size, output_size) * np.sqrt(2.0 / hidden_size) # (10,3) self.b2 np.zeros((1, output_size)) # (1,3) self.learning_rate learning_rate def sigmoid(self, x): # 防止溢出x20时exp(-x)≈0x-20时exp(x)≈0 x_clipped np.clip(x, -20, 20) return 1 / (1 np.exp(-x_clipped)) def sigmoid_derivative(self, x): # 基于sigmoid输出s计算导数s*(1-s)避免重复计算exp return x * (1 - x)为什么不用全零初始化若W1全为0则所有隐藏层神经元输出相同梯度更新后仍相同 → 网络退化为线性模型永远无法拟合Iris非线性边界。np.random.randn生成正态分布权重配合sqrt(2/n)缩放使各层输入方差≈1加速收敛。4.2 前向传播逐层计算保留中间变量供反向传播def forward(self, X): # 输入层 → 隐藏层 self.z1 np.dot(X, self.W1) self.b1 # (N,10) self.a1 self.sigmoid(self.z1) # (N,10) # 隐藏层 → 输出层 self.z2 np.dot(self.a1, self.W2) self.b2 # (N,3) self.a2 self.sigmoid(self.z2) # (N,3) return self.a2关键设计self.z1,self.a1,self.z2,self.a2全部存为实例属性反向传播时直接复用避免重复计算np.dot(X, self.W1)是矩阵乘法X为(N,4)W1为(4,10)结果(N,10)符合批量处理需求。4.3 反向传播MSE损失下的链式求导手算验证过无框架黑盒def backward(self, X, y_true): m X.shape[0] # batch size # 输出层误差∂L/∂z2 (a2 - y_true) * sigmoid(z2) dz2 (self.a2 - y_true) * self.sigmoid_derivative(self.a2) # (N,3) # 输出层权重梯度∂L/∂W2 (1/m) * a1.T dz2 dW2 (1/m) * np.dot(self.a1.T, dz2) # (10,3) db2 (1/m) * np.sum(dz2, axis0, keepdimsTrue) # (1,3) # 隐藏层误差∂L/∂z1 dz2 W2.T * sigmoid(a1) dz1 np.dot(dz2, self.W2.T) * self.sigmoid_derivative(self.a1) # (N,10) # 隐藏层权重梯度∂L/∂W1 (1/m) * X.T dz1 dW1 (1/m) * np.dot(X.T, dz1) # (4,10) db1 (1/m) * np.sum(dz1, axis0, keepdimsTrue) # (1,10) # 更新权重带动量此处先不用保持最简 self.W2 - self.learning_rate * dW2 self.b2 - self.learning_rate * db2 self.W1 - self.learning_rate * dW1 self.b1 - self.learning_rate * db1逻辑说明MSE损失 L (1/(2m)) * sum((a2-y_true)^2)其对z2的导数为(a2-y_true) * sigmoid(z2)不是(a2-y_true)np.sum(..., axis0, keepdimsTrue)确保db1形状为(1,10)与b1匹配避免广播错误所有梯度除以mbatch size使学习率意义明确不受batch大小影响。4.4 训练循环监控损失下降与早停避免过拟合Iris小数据def train(model, X_train, y_train, X_val, y_val, epochs1000, patience50): train_losses, val_losses [], [] best_val_loss float(inf) patience_counter 0 for epoch in range(epochs): # 前向传播 y_pred model.forward(X_train) # 计算MSE损失 train_loss np.mean((y_pred - y_train) ** 2) train_losses.append(train_loss) # 验证集评估用未参与训练的X_val/y_val y_val_pred model.forward(X_val) val_loss np.mean((y_val_pred - y_val) ** 2) val_losses.append(val_loss) # 早停验证损失连续patience轮未下降 if val_loss best_val_loss - 1e-5: # 微小改进阈值 best_val_loss val_loss patience_counter 0 else: patience_counter 1 if patience_counter patience: print(fEarly stopping at epoch {epoch}) break # 反向传播 model.backward(X_train, y_train) # 每100轮打印一次 if epoch % 100 0: print(fEpoch {epoch}, Train Loss: {train_loss:.6f}, Val Loss: {val_loss:.6f}) return train_losses, val_losses # 划分验证集从训练集中再分15% X_train_full, X_val, y_train_full, y_val train_test_split( X_train, y_train, test_size0.15, random_state42 ) # 初始化并训练 model BPNetwork(input_size4, hidden_size10, output_size3, learning_rate0.1) train_losses, val_losses train(model, X_train_full, y_train_full, X_val, y_val, epochs2000)参数说明patience50防止在Iris这种小数据上过拟合验证损失停滞即停learning_rate0.1Iris数据简单此值收敛快若换复杂数据需降至0.01epochs2000实际早停常在300–800轮留足余量。5. 避坑指南BP训练中5个高频翻车点与血泪排查方案5.1 现象训练损失不下降始终在0.33左右震荡原因y_true未转one-hot直接用y0/1/2整数计算MSE导致目标值过大如预测[0,0,0] vs 标签2 → loss≈4梯度爆炸后权重发散。解决严格检查y_train形状必须为(N,3)且每行仅一个1打印y_train[:3]确认。5.2 现象a2输出全为0.5或全趋近0/1梯度消失原因Sigmoid输入z2过大如10sigmoid(z2)≈1其导数sigmoid(z2)≈0反向传播梯度被抹零。解决在sigmoid()中加入np.clip(x, -20, 20)检查z1/z2均值若abs(z1.mean()) 5说明权重初始化过大改用* np.sqrt(1/input_size)。5.3 现象PyCharm调试时self.a1为nan后续全nan原因sigmoid()未防溢出x1000时exp(-1000)01/(10)1但x-1000时exp(1000)溢出为inf1/(1inf)00*inf在反向传播中产生nan。解决必须用np.clip(x, -20, 20)20是经验值exp(20)≈4.85e8exp(-20)≈2.06e-9均在float64安全范围。5.4 现象测试准确率仅33%等同随机猜测原因预测时未用np.argmax(a2, axis1)取最大概率类别而是直接比较a2 0.5二分类思维。解决测试阶段添加y_pred_class np.argmax(model.forward(X_test), axis1) y_test_class np.argmax(y_test, axis1) # y_test是one-hot accuracy np.mean(y_pred_class y_test_class)5.5 现象PyCharm中plt.plot(train_losses)显示空白图原因Matplotlib后端未正确配置或plt.show()被PyCharm的Scientific Mode拦截。解决在绘图前加import matplotlib; matplotlib.use(TkAgg)或PyCharm中File → Settings → Tools → Python Scientific → 取消勾选Show plots in tool window。6. 模型验证与调优用混淆矩阵、学习率扫描、隐藏层宽度实验榨干Iris性能6.1 测试集准确率与混淆矩阵验证BP是否真学会区分三类y_pred_prob model.forward(X_test) y_pred_class np.argmax(y_pred_prob, axis1) y_test_class np.argmax(y_test, axis1) from sklearn.metrics import confusion_matrix, classification_report cm confusion_matrix(y_test_class, y_pred_class) print(Confusion Matrix:) print(cm) print(\nClassification Report:) print(classification_report(y_test_class, y_pred_class, target_namesiris.target_names))✅理想输出混淆矩阵对角线全≥1445个测试样本每类15个非对角线≤1classification_report中macro avg f1-score≥ 0.95。6.2 学习率敏感性实验为什么0.05比0.1更稳0.2反而发散创建learning_rate_sweep.py遍历[0.01, 0.05, 0.1, 0.2, 0.5]记录各学习率下最终测试准确率Learning RateFinal Test AccuracyEpochs to Converge备注0.0193.3%1800收敛慢易陷入局部极小0.0597.8%420最佳平衡点0.195.6%210后期震荡略大0.288.9%150损失跳变权重更新过猛0.566.7%50完全发散结论Iris虽小但学习率仍需精细调整0.05是鲁棒性与速度的甜点。切勿盲目调高学习率追求速度。6.3 隐藏层神经元数量实验10个够用100个反而过拟合固定lr0.05测试hidden_size在[5, 10, 20, 50, 100]的表现Hidden SizeTrain AccTest AccOverfit Gap594.3%93.3%1.0%1097.1%97.8%0.7%2098.1%95.6%2.5%5099.0%93.3%5.7%10099.5%91.1%8.4%关键发现隐藏层20后训练准确率持续上升但测试准确率下降过拟合Iris噪声。10个神经元是Iris的“黄金容量”。6.4 用梯度范数监控训练健康度比损失曲线更早发现问题在训练循环中加入梯度监控# 在backward()末尾添加 grad_norm_W1 np.linalg.norm(dW1) grad_norm_W2 np.linalg.norm(dW2) if grad_norm_W1 10 or grad_norm_W2 10: print(fWarning: large gradient! W1 norm{grad_norm_W1:.2f}, W2 norm{grad_norm_W2:.2f})✅ 健康信号grad_norm_W1/W2在0.01–2.0区间平稳波动⚠️ 危险信号某轮突然5 → 学习率过大或数据未标准化❌ 致命信号连续多轮≈0 → 梯度消失需检查Sigmoid输入范围或换用ReLU。我带新人跑这个Iris BP项目时总强调一句话“能跑通不是终点能看懂每一行梯度怎么算、每个数字怎么变才是入行的开始。”这个项目没有炫技的框架只有手写的矩阵乘、逐层导数、被clip过的sigmoid——但它强迫你直面BP的每一个齿轮如何咬合。当你的val_loss曲线第一次平滑下降当混淆矩阵对角线亮起你会明白所谓“人工智能”不过是无数个确定性步骤堆叠出的确定性结果。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

如何在Windows上10分钟装好Vibepollo:游戏串流新手快速入门教程

如何在Windows上10分钟装好Vibepollo:游戏串流新手快速入门教程

【免费下载链接】Vibepollo Sunshine fork - The easiest way to stream with the native resolution of your client device 项目地址: https://gitcode.com/gh_mirrors/vi/Vibepollo 点击查看 免费下载 Vibepollo 是一款开源的游戏串流主机软件(Sunsh…

2026/10/12 16:37:23 阅读更多 →
TaskView冲刺规划与任务依赖图:如何可视化管理开发节奏与任务阻塞

TaskView冲刺规划与任务依赖图:如何可视化管理开发节奏与任务阻塞

【免费下载链接】taskview-community TaskView is a self-hosted project and task management platform focused on clarity, ownership, and control. TaskView is built for teams that want a transparent, self-hosted alternative to SaaS task managers. 项目地址&#…

2026/10/12 16:37:23 阅读更多 →
从动作游戏宏设置到模拟器调优:输入与渲染的底层逻辑

从动作游戏宏设置到模拟器调优:输入与渲染的底层逻辑

最近在玩家群和论坛里看到的几个高频话题,恰好都让我手痒:一是《仁王3》的情报出来之后,群里讨论得最热闹的居然不是难度设计,而是宏设置;二是《浪人崛起》和《战神3》这两款新旧动作游戏,总有人拿着各种模…

2026/10/12 16:37:23 阅读更多 →

最新新闻

被动审计实战:用icedump与nticedump实现内网资产盘点与风险发现

被动审计实战:用icedump与nticedump实现内网资产盘点与风险发现

简介:这份zip合集提供icedump 6.026与nticedump 1.14两套经典调试工具的完整文件包,面向系统程序员、逆向工程师与安全研究人员,覆盖用户态进程内存分析和Windows NT内核级转储两大场景。压缩包共含410个文件,整体仅2.62MB&#x…

2026/10/13 3:39:53 阅读更多 →
中国象棋源码实战:规则引擎与状态空间建模

中国象棋源码实战:规则引擎与状态空间建模

简介:这是一份面向Java初学者的中国象棋桌面程序源码学习项目,适用于算法逻辑训练、GUI开发入门与网络编程实践。项目实现了基础棋盘交互、走子规则校验、悔棋功能及简易联网对战模块,代码经过变量与函数重命名优化,并添加必要中文…

2026/10/13 3:39:53 阅读更多 →
Linux 服务器用 Aspera/ascp 高速下载基因组数据的完整指南

Linux 服务器用 Aspera/ascp 高速下载基因组数据的完整指南

简介:这是一款专为基因组大数据传输设计的高速下载工具——Aspera Connect 3.7.4.147727 Linux 64 位安装包,面向生物信息学研究人员、生信初学者以及需从 NCBI、EBI 等公共数据库批量获取测序数据的使用者。它基于 IBM FASP 协议,能够有效规…

2026/10/13 3:39:53 阅读更多 →
计算机系统考点梳理:补码、栈帧与缓存刷题技巧

计算机系统考点梳理:补码、栈帧与缓存刷题技巧

大二上那门计算机系统课,我是被“做题家”三个字摁着脑袋走完的。一开始觉得这只是自嘲,好像谁刷题多、背得熟,谁就是不懂原理的考试机器;等真到了期末复习,我才发现这门课光靠“看懂”完全不够,你必须在纸…

2026/10/13 3:39:53 阅读更多 →
SpringBoot+Vue校园一卡通系统实战:从架构设计到部署上线全解析

SpringBoot+Vue校园一卡通系统实战:从架构设计到部署上线全解析

校园一卡通项目我前后做过好几个版本,从最初的单体JSP到后面的前后端分离,踩过的坑能写满一个笔记本。这次分享的基于SpringBoot加Vue的校园一卡通管理系统,是目前结构最清晰、也最适合拿来学习和二次开发的一套。无论是应付毕业设计&#xf…

2026/10/13 3:39:53 阅读更多 →
Flutter for OpenHarmony实战:二手置换App设置页开发全解析

Flutter for OpenHarmony实战:二手置换App设置页开发全解析

做Flutter for OpenHarmony二手物品置换App,设置页看起来是所有模块里最不起眼的那一个。真正动手写的时候你会发现,它几乎是整个App里横跨技术面最杂的页面:本地存储、主题切换、通知权限、缓存清理、账号安全全都要在这个页面里落地&#x…

2026/10/13 3:38:53 阅读更多 →

日新闻

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

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

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

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 阅读更多 →