You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Autoformer时间嵌入代码中day_size设为32的疑问

关于Autoformer时间嵌入代码中day_size设为32的疑问

嘿,我来帮你捋清楚Autoformer里这个时间嵌入的小细节~

先看你提到的TemporalEmbedding类的部分代码片段:

class TemporalEmbedding(nn.Module):    
    def __init__(self, d_model, embed_type='fixed', freq='h'):        
        super(TemporalEmbedding, self).__init__()         
        minute_size = 4        
        hour_size = 24
        day_size = 32
        month_size = 13
        # 后续嵌入层定义逻辑...

为什么day_size要设成32而不是实际最多的31天?其实这是时间序列嵌入里很实用的小技巧,原因主要有两个:

  • 避免索引越界:日历里一个月最多31天,但我们用原始日期数值(比如1-31)直接当嵌入层的索引时,nn.Embedding的num_embeddings参数要求索引范围是0到num_embeddings-1。如果设day_size=31,那最大合法索引是30,31号的索引就会超出范围报错;设成32的话,索引0到31都合法,刚好覆盖1-31号的所有情况,不用额外做day-1的转换。
  • 代码简洁性:和month_size=13是一个道理——月份是1-12,设13就能直接用原始月份数值当索引,不用预处理转成0开始的序列,减少了代码里的额外步骤,逻辑更直观。

Autoformer的时间嵌入逻辑是把年、月、日、时、分这些时间特征分别做嵌入后拼接,这种“特征值+1”的嵌入层大小设置,刚好适配了人类习惯的1开始的时间计数方式,挺巧妙的对吧?

备注:内容来源于stack exchange,提问作者prem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:17:58