Appearance
Level1 配置进入 DLinear
Abstract
这一篇对应 00-DLinear总览与Level树 的
Level 1。它只讲一件事:
当前这条命令里的参数,怎样一步步和
DLinear(config)建立关系。
1. 当前层第一性
这一层存在的第一性是:
先解释为什么当前例子最后会实例化成
DLinear(config),而不是别的模型。
如果这层不稳,后面你虽然能看懂 DLinear.py,但不知道:
- 为什么当前命令会走到 DLinear
seq_len / pred_len / moving_avg / enc_in这些参数到底是怎样进到 config 里的
2. 上下文
父节点:
下一层:
当前入口接口:
python
run_benchmark.py
-> parser.parse_args()
-> build_model_config(args, config_data)
-> pipeline(data_config, model_config, evaluation_config)当前出口接口:
python
model = DLinear(config)3. 当前真实命令里,哪些参数真正和 DLinear 有关
当前例子里最关键的是这些:
text
--model-name time_series_library.DLinear
--adapter transformer_adapter
--model-hyper-params "{...}"model-hyper-params 里和 DLinear 真正强相关的参数有:
seq_len = 96- DLinear 线性头的输入长度。
horizon = 24- 会在 adapter/配置层转成
pred_len = 24。
- 会在 adapter/配置层转成
moving_avg = 25series_decomp的滑动平均窗口。
batch_size = 4- DataLoader 用,不属于 DLinear 数学主体。
dropout / d_model / d_ff- 这些在 DLinear forecasting 主链里基本不关键,属于统一配置壳里可能存在但主模型不强依赖的字段。
4. 总顺序图
5. 抽象树
6. 关键代码块 1:命令行怎样变成 model_config
位置:
核心代码骨架:
python
args = parser.parse_args()
model_config = build_model_config(args, config_data)
log_file_names = pipeline(data_config, model_config, evaluation_config)6.1 这段代码的输入/输出语义
输入:
args- 当前命令行解析出来的参数对象。
config_data- JSON 配置文件内容。
输出:
model_config- 一个结构化字典,里面已经明确写出:
- 模型名是谁
- adapter 是谁
- 模型超参数有哪些
- 一个结构化字典,里面已经明确写出:
6.2 当前真实例子里,model_config 的核心部分长什么样
可以近似理解成:
python
model_config = {
"models": [
{
"model_name": "time_series_library.DLinear",
"adapter": "transformer_adapter",
"model_hyper_params": {
"seq_len": 96,
"horizon": 24,
"moving_avg": 25,
"batch_size": 4,
...
}
}
]
}这一步的意义:
命令行只是字符串;
model_config才是后面真正可被框架消费的结构化模型说明书。
7. 关键代码块 2:pipeline(...) 怎样把它送进模型加载层
位置:
核心代码骨架:
python
model_factory_list = get_models(model_config)输入:
model_config- 结构化模型配置。
输出:
model_factory_list- 模型工厂列表。
当前例子里只有一个模型,所以这里实际上就是:
python
model_factory_list = [DLinear 对应的 ModelFactory]8. 关键代码块 3:get_models(...) -> get_model_info(...)
位置:
代码骨架:
python
for model_config in all_model_config["models"]:
model_info = get_model_info(model_config)8.1 这里在干什么
这一步的作用是:
把“名字是 DLinear”这种字符串,变成“真正的 Python 类和它的元信息”。
输入:
model_config- 一条单模型配置。
输出:
model_info- 至少包含:
- 模型类
- adapter 信息
- 超参数
- 至少包含:
当前例子里:
python
model_config["model_name"] == "time_series_library.DLinear"所以 get_model_info(...) 最终找到的是:
python
DLinear 类9. 关键代码块 4:adapter 怎样包起 DLinear
位置:
这一层的作用不是改变 DLinear 数学本体,而是:
把 DLinear 接到 TFB 统一训练/预测接口上。
也就是说:
- 上层统一调用
_process / forecast_fit / batch_forecast - adapter 在内部再去实例化真正的
DLinear(config)
10. 关键代码块 5:真正实例化 DLinear(config)
位置:
adapter 里的实例化代码:
python
def _init_model(self):
return self.model_class(self.config) # 等价于 DLinear(config)DLinear.__init__ 的完整签名是:
python
def __init__(self, configs, individual=False):关键约束:adapter 只传了 config,没有传 individual,所以 individual 始终取默认值 False。
在 TFB 框架里,
individual没有办法通过model_hyper_params控制,因为它不是从configs对象里读取的属性,而是构造函数的独立参数。想启用individual=True,需要修改 adapter 的_init_model()。
这里的输出:
model- 真正的
DLinear实例,individual=False(共享模式)。
- 真正的
11. 这一层最该固定什么
DLinear不是直接从命令行跳出来的。- 当前命令必须先经过:
build_model_configpipelineget_modelsget_model_infotransformer_adapter
- 直到
_init_model(),才真正走到:
python
DLinear(config)12. 下一步
继续看:
如果某个函数还不熟,补查: