pytorch:LayerNorm之后的退出层,有一些神奇的现象

问题描述

当我在Layernorm之后添加一个辍学层时,验证首先将损失减少设置为1.5 epoch,然后损失显着增加,并且acc变为0;当我删除辍学层时,它起作用了;当我删除layernorm时,它会更改,而不是零,但是效果非常差。

型号代码

class Model(nn.Module):
    def __init__(self,config):
        super(Model,self).__init__()
        if config.embedding_pretrained is not None:
            #self.embedding = nn.Embedding.from_pretrained(config.embedding_pretrained,freeze=False)
            self.embedding = nn.Embedding.from_pretrained(torch.FloatTensor(config.embedding_pretrained.vectors),freeze=False)
        else:
            self.embedding = nn.Embedding(config.n_vocab,config.embed,padding_idx=config.n_vocab - 1)
        self.lstm = nn.LSTM(config.embed,config.hidden_size,config.num_layers,bidirectional=True,batch_first=True,dropout=config.dropout)
        self.maxpool = nn.MaxPool1d(config.pad_size)
        self.fc = nn.Linear(config.hidden_size * 2 + config.embed,config.num_classes)
        self.dropout = nn.Dropout(config.dropout)
        
        self.ln_emb = nn.Layernorm(config.embed)
        self.ln_lstm = nn.Layernorm(config.hidden_size * 2)

    def forward(self,x):
        x,_ = x
        embed = self.embedding(x)  # [batch_size,seq_len,embeding]
        embed = self.ln_emb(embed)
        out,_ = self.lstm(embed)
        out = self.ln_lstm(out)

        out = torch.cat((embed,out),2)
        out = self.dropout(out)
        #out = F.relu(out)
        out = out.permute(0,2,1)
        out = self.maxpool(out).squeeze()
        out = self.fc(out)
        return out
  • acc张量板:

the acc curve

  • 损失张量板:

the loss curve

解决方法

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

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

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