class pu_fc(nn.Module):
def __init__(self, input_dim):
super(pu_fc, self).__init__()
self.input_dim = input_dim
self.fc1 = nn.Linear(input_dim, 50)
self.fc2 = nn.Linear(50, 2)
self.loss_fn = custom_NLL()
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
self.bias = torch.autograd.Variable(torch.rand(1,1), requires_grad=True).to(device)
def forward(self, x):
out = self.fc1(x)
out = F.relu(out, inplace=True)
out = self.fc2(out)
out[..., 1] = out[..., 1] + self.bias
print('bias: ', self.bias)
return out
Как видно из кода, я хотел добавить термин смещения ко второму выходному каналу. Однако моя реализация не работает. Срок смещения вообще не обновляется. Он оставался неизменным во время тренировки, и я полагаю, что во время тренировки этому невозможно научиться. Итак, вопрос в том, как я могу сделать термин «предвзятость» доступным для изучения? Можно ли это сделать? Ниже приведены некоторые результаты смещения во время тренировки. Любая подсказка благодарна, заранее спасибо!
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
Current Epoch: 1
Epoch loss: 0.4424589276313782
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
Current Epoch: 2
Epoch loss: 0.3476297199726105
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)
bias: tensor([[0.0930]], device='cuda:0', grad_fn=<CopyBackwards>)