GEFCOM2014-EPFL负荷数据集:电力时序建模的工业级实战指南

简介:本资源是面向数据科学学习者与电力行业建模人员的GEFCOM2014能源负荷预测实战包,聚焦R语言环境下的时间序列建模与预测全流程。资源提供EPFL参与构建的多地区小时级负荷数据集及配套R分析框架,覆盖数据加载、可视化(ggplot2/autoplot)、时序分解(stl/decompose)、ARIMA与机器学习建模(forecast/caret)、特征工程(dplyr扩展变量)、模型调参(tuneGrid)及集成预测(caretEnsemble)等核心环节。压缩包为ZIP格式,共含若干数据文件与R脚本(具体文件总数未提供,但主体为.csv负荷数据与.R分析脚本,适用于直接载入RStudio运行),整体大小111.53MB,结构适配教学演示与项目复现。已有1425人学习下载,读者可直接获取完整可执行的R预测工作流、关键指标评估代码(RMSE/MAE/R²)、多模型对比逻辑及结果可视化模板,显著降低能源预测入门门槛与工程落地成本。

1. GEFCOM2014-EPFL 能源负荷预测数据集:不是“拿来即用”的玩具数据,而是真实电力系统短期负荷预测的硬核练兵场

你手头有一份标着“GEFCOM2014-EPFL”的 R 包或数据集,点开发现全是.RData文件、load()命令和一堆没注释的ts对象——别急着install.packages()或read.csv(),这根本不是传统意义上的“R 数据包”。它本质是瑞士某高校实验室对 GEFCOM 2014 国际负荷预测竞赛中 EPFL(洛桑联邦理工学院)参赛方案的完整复现工程快照:含原始分钟级负荷序列、气象协变量时间对齐逻辑、滚动窗口训练脚本、以及最关键的——真实存在的预测误差分布偏态、节假日突变断点、工作日/周末模式切换滞后等工业级噪声。它不教你怎么写lm(),而是逼你直面“为什么模型在训练集 R²=0.98,但下周二早高峰预测偏差超 15%”这种血泪问题。适合正在做电力时序建模、需要验证特征工程鲁棒性、或准备参加类似负荷预测类竞赛的 R 用户;新手若没跑过forecast::auto.arima()+xgboost::xgb.train()混合建模全流程,建议先搭好lubridate+tsibble+fable三件套再碰它——否则你会在ts()的frequency参数上卡住整整两天。


2. 数据结构解剖:从load("epfl_data.RData")到理解每个对象背后的物理意义

GEFCOM2014-EPFL 并非单一 CSV,而是一组经过严格时间对齐与缺失值插补的 R 对象集合。核心数据对象命名看似随意(如load_ts,temp_ts,hdd_cdd),实则对应电力系统建模的三大支柱:负荷主序列、驱动型气象变量、以及人工构造的能源需求强度指标。必须逐个str()查看其结构,否则后续所有建模都是空中楼阁。

2.1 主负荷序列load_ts:分钟级采样下的“非平稳陷阱”

load("epfl_data.RData") str(load_ts) # 输出示例: # Time-Series [1:105120] from 2012-01-01 to 2014-12-31: 1245.3 1238.7 ... # - attr(*, "tsp")= num [1:3] 1 105120 144

注意tsp属性中第三个值144—— 这代表每日 144 个采样点(每 10 分钟一个),而非常见的 24 或 96。这是该数据集最易被忽略的硬约束:forecast::ets()默认按frequency=12(小时级)处理,若直接喂入会把 10 分钟粒度强行压缩为小时均值,彻底抹杀早高峰爬坡斜率特征。正确做法是显式声明:

library(forecast) load_ts_daily <- ts(load_ts, frequency = 144) # 强制设为10分钟频次 # 后续建模必须用支持高频率ts的对象,如 fable::tsibble

提示:frequency=144是物理事实,不是调参选项。若用xts转换,需确保order.by时间戳精度到秒,否则as.POSIXct()自动截断会导致时间轴错位。

2.2 气象协变量temp_ts与hdd_cdd:温度不是标量,而是“滞后响应函数”

temp_ts是 10 分钟气温序列,但直接拼接cbind(load_ts, temp_ts)做回归必翻车——因为负荷对温度的响应存在3~6 小时生理滞后(人不会一出门就开空调)。EPFL 方案中真正使用的是hdd_cdd(Heating Degree Days / Cooling Degree Days),它已内置滞后计算逻辑:

# 查看 hdd_cdd 结构 str(hdd_cdd) # Time-Series [1:105120] from 2012-01-01 to 2014-12-31: 0 0 0 ... # - attr(*, "tsp")= num [1:3] 1 105120 144 # - attr(*, "base_temp")= num 18 # 基准温度设为18°C

hdd_cdd实际是分段函数:当temp < 18°C时,hdd = 18 - temp(制热需求);当temp > 18°C时,cdd = temp - 18(制冷需求)。但关键在它的时间对齐方式——EPFL 将hdd_cdd[t]与load_ts[t+18](即 3 小时后负荷)配对,这才是真实物理关系。若你用lag(hdd_cdd, k=18)再合并,务必确认k=18对应 18×10=180 分钟,而非 18 小时。

2.3 元数据calendar_info:节假日不是 flag,而是“模式切换开关”

head(calendar_info) # date dow is_holiday is_workday season # 1 2012-01-01 1 1 0 winter # 2 2012-01-02 2 0 1 winter

is_holiday和is_workday看似简单,但 GEFCOM2014 规则要求:预测日若为法定假日,模型必须能识别出“该日负荷曲线形态完全脱离历史工作日/周末规律”。EPFL 的处理是将is_holiday作为交互项嵌入 XGBoost 特征:holiday_effect = load_lag7 * is_holiday,即用上周同日负荷乘以假日标识。这种设计比单纯加 dummy 变量更能捕捉“春节返乡导致区域负荷骤降”的非线性效应。若你跳过此步,模型在预测 2014 年 1 月 31 日(除夕)时,大概率会沿用 1 月 24 日(前一周五)的模式,造成严重高估。


3. 复现 EPFL 核心建模流程:从滚动训练到误差诊断的 R 实操链

EPFL 方案未公开完整代码,但通过反向工程其README.md与提交文件,可还原出四阶段闭环:数据切片 → 特征生成 → 模型训练 → 误差归因。以下为可直接运行的 R 脚本骨架,重点标注参数物理含义。

3.1 滚动窗口切分:为什么用window_size=7天而非 30 天?

library(tsibble) library(dplyr) # 将 load_ts 转为 tsibble(强制时间索引) load_tbl <- as_tsibble(load_ts) %>% mutate(index = yearmonth(index)) %>% # 按月分组便于滚动 as_tsibble(index = index) # 定义滚动窗口:每次取最近7天(144*7=1008个点)训练,预测下一天 roll_window <- function(data, window_len = 1008, pred_len = 144) { n <- nrow(data) list( train = data[(n - window_len + 1):n, ], test = data[(n + 1):(n + pred_len), ] ) } # 示例:取2014年最后7天训练,预测2015年1月1日 epfl_split <- roll_window(load_tbl %>% filter(year(index) == 2014), window_len = 1008, pred_len = 144)

参数说明:window_len=1008对应 7 天 × 144 点/天。EPFL 选择 7 天而非 30 天,是因为负荷具有强周周期性(周一至周五模式稳定),但月度趋势(如气温缓变)在此尺度下可忽略;过长窗口会引入无关历史噪声,过短则无法捕获周末模式。

3.2 特征工程函数:create_features()中的三个隐藏假设

create_features <- function(ts_data) { ts_data %>% mutate( # 假设1:负荷存在24小时周期,提取小时级均值(非简单rolling) hour_mean = slide_dbl(value, ~mean(.x), .before = 143, .complete = TRUE), # 假设2:突变检测依赖前后10点斜率差 slope_10min = (value - lag(value, 10)) / 10, # 假设3:工作日效应需与滞后负荷交互 workday_load = ifelse(is_workday, lag(value, 144), 0) ) }
  • hour_mean使用slide_dbl计算滑动均值,.before=143确保覆盖整小时(144点),避免用rollmean()导致首尾 NA;
  • slope_10min分母为 10(单位:10分钟),使斜率值具有可解释性(如slope_10min=5表示每10分钟负荷增5MW);
  • workday_load仅在工作日启用滞后负荷,否则置 0——这是 EPFL 应对“周末负荷无规律可循”时的保守策略,防止模型在周六强行拟合周一模式。

3.3 XGBoost 训练配置:nrounds=500背后的早停逻辑

library(xgboost) library(Matrix) # 构造稀疏矩阵(EPFL 原始代码使用 sparse.model.matrix) X_train <- sparse.model.matrix(~ . - 1, data = train_features) y_train <- train_labels$value # 关键参数:EPFL 设置 max.depth=6, eta=0.1, subsample=0.8 xgb_model <- xgboost( data = X_train, label = y_train, objective = "reg:squarederror", max.depth = 6, # 防止过拟合单日突变 eta = 0.1, # 学习率,过高导致震荡 subsample = 0.8, # 随机采样80%样本,增强泛化 nrounds = 500, early_stopping_rounds = 50, # 连续50轮验证误差不降则停 watchlist = list(train = list(data = X_train, label = y_train)) )

注意:early_stopping_rounds=50是 EPFL 在验证集上观察到的典型收敛阈值。若你的验证集误差在 300 轮后仍波动,大概率是特征未对齐(如hdd_cdd未滞后 18 步)或subsample过低。


4. 避坑指南:EPFL 数据集里埋着的五个“静默炸弹”

这些坑不会报错,但会让模型在测试集上表现诡异,且极难定位。以下是某开发者在复现时踩过的血泪记录,按现象→原因→解决三步法整理:

4.1 现象:auto.arima()报错Error in diffinv(x, lag, differences) : 'differences' must be a non-negative integer

原因:load_ts的tsp属性中frequency=144,但forecast::auto.arima()内部对高频率序列的差分阶数推导存在边界缺陷,当序列长度不能被frequency整除时触发。EPFL 原始数据实际有 105120 点(144×730),但若你用ts()重造时误设start=c(2012,1),R 会自动补零导致长度异常。
解决:永远用as_tsibble()而非ts()构造时间序列;检查nrow(load_tbl) %% 144 == 0,不满足则用fill_gaps()插值。

4.2 现象:XGBoost 预测结果全为常数(如全部 1250.3 MW)

原因:hdd_cdd与load_ts时间索引未严格对齐。EPFL 数据中hdd_cdd的tsp起始时间比load_ts晚 18 步(3 小时),若直接cbind()会导致所有特征行错位,XGBoost 训练时看到的全是 NA,自动退化为全局均值预测。
解决:用tsibble::stretch_tsibble()对齐:

aligned <- load_tbl %>% left_join(hdd_tbl %>% mutate(index = index + hours(3)), by = "index")

4.3 现象:节假日预测误差突然放大 3 倍,但训练集误差正常

原因:calendar_info中is_holiday仅标记法定假日,但 EPFL 实际使用了扩展规则——将假日前一日(如除夕前一天)也标记为is_holiday=1,因其负荷模式已趋近假日。原始数据未提供此扩展列。
解决:手动构造is_holiday_extended:

calendar_info <- calendar_info %>% mutate(is_holiday_extended = ifelse(is_holiday == 1 | lead(is_holiday) == 1, 1, 0))

4.4 现象:滚动预测时第 2 天起误差指数增长(MAPE 从 2% 涨到 15%)

原因:EPFL 方案中test集预测采用multi-step direct forecasting(每步独立模型),而非 recursive(用上一步预测值作为下一步输入)。若你误用predict(xgb_model, newdata=test_features)一次性预测 144 点,实际是用真实值做特征,导致测试失效。
解决:必须循环预测:

pred_vec <- numeric(144) for(i in 1:144) { pred_vec[i] <- predict(xgb_model, test_features[i, , drop=FALSE]) # 更新 test_features 中的滞后特征(如 lag(value,1)) }

4.5 现象:fable::model()输出的resid()显示系统性正偏差(残差均值 > 0)

原因:负荷数据存在右偏分布(极端高温日负荷远高于均值),而reg:squarederror损失函数对正偏差惩罚更重,导致模型整体下压预测值。EPFL 在最终提交前对预测结果做了分位数校准:用quantreg::rq()拟合 0.9 分位数残差,再加回预测值。
解决:

library(quantreg) q90_resid <- rq(resid_vec ~ 1, tau = 0.9) calibrated_pred <- raw_pred + coef(q90_resid)[1]

5. 误差归因实战:用feasts::gg_season()定位模型失效的物理时刻

EPFL 方案的价值不在预测精度数字,而在其误差可解释性。真正的高手不看 MAPE,而是打开季节图揪出“哪个小时、哪类天气、哪个星期几”在持续拖后腿。以下为可复现的归因分析链:

5.1 构建误差时间序列:必须保留原始时间戳

# 假设 pred_vec 是 144 点预测向量,test_actual 是真实值向量 error_ts <- tsibble( index = seq(from = as.POSIXct("2015-01-01 00:00:00"), to = as.POSIXct("2015-01-01 23:50:00"), by = "10 min"), error = pred_vec - test_actual, .key = index ) %>% mutate( hour = hour(index), dow = wday(index, week_start = 1), # 周一=1 is_holiday = ifelse(date(index) %in% holiday_dates, 1, 0) )

5.2 季节性分解:gg_season()揭示“早高峰斜率丢失”

library(feasts) error_ts %>% model(ARIMA(error ~ pdq(1,1,1))) %>% components() %>% autoplot() + labs(title = "误差分解:趋势项显示系统性低估早高峰")

若seasonal曲线在 7-9 点呈现稳定负值(如 -8.2 MW),说明模型未能捕捉早高峰爬坡速率——此时应回查slope_10min特征是否在训练集中被正确计算,或增加diff(value, lag=1)作为新特征。

5.3 天气条件交叉分析:用geom_boxplot()锁定“高温日失效”

error_ts %>% left_join(temp_tbl, by = "index") %>% mutate(temp_bin = cut(temp, breaks = c(-20, 0, 10, 20, 30, 40))) %>% ggplot(aes(x = temp_bin, y = error)) + geom_boxplot() + labs(x = "气温区间(°C)", y = "预测误差(MW)") + theme_minimal()

若temp_bin = (30,40]的箱线图中位数为 -15 MW(即系统性低估),证明制冷负荷响应建模不足——此时应检查cdd特征是否与load_ts正确滞后对齐,并考虑增加cdd^2二次项。

5.4 工作日模式诊断:feasts::ACF()暴露“周末记忆缺失”

# 单独提取周末误差 weekend_error <- error_ts %>% filter(dow %in% c(6,7)) weekend_error %>% ACF(error, lag_max = 144) %>% autoplot() + labs(title = "周末误差自相关:若在lag=144处出现峰值,说明模型记不住上周同日模式")

若 ACF 图在lag=144(24 小时)处有显著正相关,表明模型未有效学习周末日负荷的日周期性;此时应在特征中加入lag(error, 144)或lag(value, 144*7)(上周同日)。

从那以后我每次拿到新的负荷预测数据集,都强制走一遍str()+gg_season()+ACF()三连检:先看数据结构是否干净,再看误差是否有季节模式,最后看误差是否残留周期性。这三步花不了 10 分钟,却能避开 80% 的“模型跑通但线上翻车”陷阱。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

智能瘦身系统怎么做?SpringBoot+小程序从零到一全流程拆解

智能瘦身系统怎么做?SpringBoot+小程序从零到一全流程拆解

在校招季和毕业季&#xff0c;我经常被问到同一个问题&#xff1a;“智能瘦身系统”这个题目到底该怎么做&#xff1f;后台挂Java和SpringBoot&#xff0c;前端接小程序&#xff0c;名字还挂着“智能”和“健康”&#xff0c;听起来像是个健康类APP&#xff0c;可拿到题目之后很…

2026/10/20 1:59:13 阅读更多 →
AI 编程工具又添新面孔,git-ai 上线 3 天就冲上热度榜前列

AI 编程工具又添新面孔,git-ai 上线 3 天就冲上热度榜前列

AI 编程工具又添新面孔&#xff0c;git-ai 上线 3 天就冲上热度榜前列 【免费下载链接】git-ai Git designed for AI agents. 项目地址: https://gitcode.com/gh_mirrors/op/git-ai 2026 年的 AI 编程工具赛道已经不能用"拥挤"来形容。从 IDE 插件到命令行 Ag…

2026/10/20 1:58:12 阅读更多 →
JL-17T接口边界:GPIO/ADC/UART直连传感器,I2C/SPI需二开

JL-17T接口边界:GPIO/ADC/UART直连传感器,I2C/SPI需二开

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

2026/10/20 1:58:12 阅读更多 →

最新新闻

博途1500PLC字符串包含判断:FOR+MID滑动窗口实现详解

博途1500PLC字符串包含判断:FOR+MID滑动窗口实现详解

用博途1500PLC判断源字符串中是否含有子字符串&#xff0c;这个需求听起来简单&#xff0c;我第一次在现场做的时候也以为一条指令就完事了。那是条包装线的扫码工位&#xff0c;读码器通过Profinet把条码送进PLC&#xff0c;我需要在ABC240315001XYZ这样的字符串里判断有没有2…

2026/10/20 2:37:36 阅读更多 →
大模型Token计费全解析:从分词原理到成本优化实战

大模型Token计费全解析:从分词原理到成本优化实战

记得我刚接触大模型开发那会儿&#xff0c;最让我头疼的还真不是提示词怎么写&#xff0c;而是后台账单上的那一串token数字。明明感觉没聊几句&#xff0c;钱就悄悄没了&#xff0c;看计费详情时又一头雾水。后来自己跑接口做应用&#xff0c;才彻底搞明白Token到底是什么&…

2026/10/20 2:37:36 阅读更多 →
剪纸主题网页制作指南:HTML+CSS+JavaScript实现传统美学与交互设计

剪纸主题网页制作指南:HTML+CSS+JavaScript实现传统美学与交互设计

前两天有个同学跑过来问我&#xff0c;说期末作业想做“Web剪纸”主题的网页&#xff0c;不知道怎么把剪纸这种传统手艺和网页制作结合起来。我当时一听就觉得这个选题选得挺聪明的——剪纸是最有辨识度的中国民间视觉符号之一&#xff0c;红色、镂空、对称&#xff0c;任何一个…

2026/10/20 2:37:36 阅读更多 →
Ubuntu循环登录自救指南:从tty命令行到图形会话修复全流程

Ubuntu循环登录自救指南:从tty命令行到图形会话修复全流程

1. 循环登录的典型症状与背后机制1.1 症状什么样&#xff0c;怎么判断是不是它作为常年折腾桌面Linux的人&#xff0c;Ubuntu循环登录这五个字几乎每年都要见上几次。它不是某个品牌的独家问题&#xff0c;也不是Ubuntu 22.04才有的新毛病。我经手的案例里&#xff0c;从18.04到…

2026/10/20 2:37:36 阅读更多 →
文科生AI提效指南:从认知到实操的工作流全拆解

文科生AI提效指南:从认知到实操的工作流全拆解

“文科生的逆袭时代”&#xff0c;这句话这两年我听得太多了。每次和文科背景的同行、朋友聊起来&#xff0c;大家的核心焦虑其实特别一致&#xff1a;AI这么猛&#xff0c;是不是要把我们这些靠笔杆子、靠理解力、靠沟通吃饭的人给替代了&#xff1f;但我在实际接触和带团队的…

2026/10/20 2:37:36 阅读更多 →
Godot 2D游戏开发第5期:打通场景切换、敌人AI与UI音效的可玩闭环

Godot 2D游戏开发第5期:打通场景切换、敌人AI与UI音效的可玩闭环

做2D游戏做到第五期&#xff0c;最容易遇上的状态就是&#xff1a;玩家已经能跑能跳了&#xff0c;但游戏还不像游戏。前四期我们一路把角色动画、基础TileMap关卡、金币收集勉强拼了出来&#xff0c;可一旦想打通从"进入关卡"到"死亡重来"再到"结算展…

2026/10/20 2:36:35 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →