毕业很小

时间:2019-11-16 18:20:17

标签: python optimization deep-learning pytorch lstm

首先,我认为损失计算和更新步骤之后没有更新,但是下面的代码给我带来了错误,这证明有更新:

before = list(model.parameters())[0].clone()
loss.backward()
optimizer.step()
after = list(model.parameters())[0].clone()
logging.info(torch.equal(before.data, after.data))

然后我想通过以下代码查看变化的幅度:

list(model.parameters())[0].grad

这给了我很小的改变:

tensor([[ 3.2294e-07,  7.3983e-06,  6.5637e-06,  ..., -1.3529e-06,
2019-11-16T17:21:03.747068480Z          -4.9979e-06,  4.9799e-06],
2019-11-16T17:21:03.747074966Z         [ 5.5463e-08,  3.0771e-06, -9.5087e-07,  ...,  1.9265e-06,
2019-11-16T17:21:03.747080687Z          -4.5251e-06, -7.1564e-07].....]

这是我的模特:

self.lstm_hidden_dim = lstm_hidden_dim
self.lstm = nn.LSTM(word_embedding_dim,lstm_hidden_dim, num_layers=1,batch_first=False,bidirectional=True)
self.firstHidden = nn.Linear(lstm_hidden_dim*2, 300)
self.relu=nn.ReLU()
self.secondlinear=nn.Linear(300, score_space_size)
self.softmax= nn.LogSoftmax(dim=1)

损失函数和优化器:

loss_function = nn.NLLLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)

任何想法,为什么毕业人数很少?

1 个答案:

答案 0 :(得分:0)

您可以添加参数,以查看每次调用优化器时它们所更改的量。 因此,您可以使用类似这样的功能。

def read_params(self):
    params=[]
    names=[]
    for name,param in self.lstm.named_parameters():
        params.append(torch.sum(param.data).detach().cpu().numpy())
        names.append(name)
    return params, names

old_weights = np.array(nets.read_params()[0])
#some point later
new_weights = np.array(nets.read_params()[0])
print("weights updated",np.sum(np.abs(old_weights - new_weights)))

您还可以将学习率提高几个数量级,以查看是否有帮助。