卷积 AE 总是过度拟合时间序列——怎么了?

问题描述

我已经为时间序列中的异常检测构建了一个 CAE,但它总是过度拟合。我试过数据增强、短/长输入向量、辍学率......我不知道我做错了什么,你能给我一个提示吗?

这是我的架构

class CAE(nn.Module):
    def __init__(self):
        super(CAE,self).__init__()

        self.encoder = Encoder()
        self.decoder = Decoder()

        self.encoder.to(get_device())
        self.decoder.to(get_device())

    def forward(self,x):
        x = self.encoder(x)
        x = self.decoder(x)
        return x

class Encoder(nn.Module):
    def __init__(self):
        super(Encoder,self).__init__()

        self.conv_enc = nn.Sequential(
            nn.AlphaDropout(p=0.5),nn.Conv1d(
                in_channels=1,out_channels=16,kernel_size=5,stride=2,padding=0
            ),nn.SELU(),nn.AlphaDropout(p=0.5),nn.Conv1d(
                in_channels=16,out_channels=8,nn.SELU()
        )

        self.conv_enc.apply(self.init_weights)
            
    def init_weights(self,m):
        if type(m) == nn.Conv1d or type(m) == nn.ConvTranspose1d:
            torch.nn.init.xavier_normal_(m.weight)
            m.bias.data.fill_(0.01)

    def forward(self,x):
        x = self.conv_enc(x)
        return x

class Decoder(nn.Module):
    def __init__(self):
        super(Decoder,self).__init__()

        self.conv_dec = nn.Sequential(
             nn.ConvTranspose1d(
                in_channels=8,#nn.AlphaDropout(p=0.5),nn.ConvTranspose1d(
                in_channels=16,out_channels=1,kernel_size=6,padding=0
            )
        )

        self.conv_dec.apply(self.init_weights)
            
    def init_weights(self,x):
        x = self.conv_dec(x)
        return x

我正在使用以下设置

  • 优化器 - AdamW,lr=0.0001
  • 调度程序 - OneCyleLR
  • 使用 MinMaxScaler() 规范化数据
  • 损失 - L1Loss
  • 批量大小 - 250
  • trainingsize - 12000 个样本
  • 输入大小 - 800

Loss

Acc

谢谢各位

附加

输入大小 = 140

Smaller Area of Time Series

Accuracy

Loss

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)