Как установить тренировочный вес на softmax во время тренировки - PullRequest
1 голос
/ 02 июля 2019

Я воспроизводю Auto-DeepLab с PyTorch, и у меня возникла проблема, то есть я не могу установить вес архитектуры (как ячейки, так и слоя) на softmax. Это либо приводит к двукратному откату назад, либо веса не получают апгрейда с градиентами, а только softmax.

class Architect () :
    def __init__(self, model, args):
        self.network_momentum = args.momentum
        self.network_weight_decay = args.weight_decay
        self.model = model
        self.optimizer = 
            torch.optim.Adam(self.model.arch_parameters(),
                lr=args.arch_lr, betas=(0.5, 0.999), 
                weight_decay=args.arch_weight_decay)

    def step (self, input_valid, target_valid) :
        self.model.soft_parameters()
        self.optimizer.zero_grad ()
        self._backward_step(input_valid, target_valid)
        self.optimizer.step()

    def _backward_step (self, input_valid, target_valid) :
        _, loss = self.model._loss (input_valid, target_valid)
        loss.backward ()

согласно этому коду, это приводит к тому, что softmax работает, но веса не оптимизированы с градиентами.

[[0.3333, 0.3333, 0.3333],
         [0.3333, 0.3333, 0.3333],
         [0.3333, 0.3333, 0.3333],
         [0.3333, 0.3333, 0.3333]]*12], device='cuda:0',
       grad_fn=<SoftmaxBackward>)
...