问题描述
当我在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张量板:
- 损失张量板:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)