Pytorch tricks

在模型中定义方法init_hidden(),假设模型rnn层数为1,单向rnn,代码如下:

class RNNModel(nn.Module):
  ...
  def init_hidden(self, batchSize, requries_grad=True):
      weight = next(self.parameters())
      return (weight.new_zeros((1, batchSize, self.hidden_size), requires_grad=requries_grad),
              weight.new_zeros((1, batchSize, self.hidden_size), requires_grad=requries_grad))

RNN训练时防止梯度爆炸

GRAD_CLIP = 5.0

optimizer.zero_grad()
loss.backward()
torch.nn.utils.clip_grad_norm_(model.parameters(), GRAD_CLIP)
optimizer.step()

RNN训练时随着epoch增加,loss反而变大

其中一种可能是因为学习率过大造成的

optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
#学习率减少一半
scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, 0.5)
scheduler.step()

语言模型困惑度

对自然数e取loss次幂

print("perplexity: ", np.exp(loss))

 

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Pytorch tricks