问题描述
我已经为时间序列中的异常检测构建了一个 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
谢谢各位
附加
输入大小 = 140
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)