pytorch: Случайный классификатор: ValueError: оптимизатор получил пустой список параметров - PullRequest
1 голос
/ 14 июля 2020

Есть ли лучший способ или эффективный способ иметь случайный классификатор в pytorch? Мой случайный классификатор в основном выглядит так:

def forward(self, inputs):
    # get a random tensor
    logits = torch.rand(batch_size, num_targets, num_classes)
    return logits

Это должно быть в принципе нормально, но оптимизатор поднимает ValueError, потому что классификатор - в отличие от всех других классификаторов / моделей в системе - не работает. очевидно, имеют любые параметры, которые можно оптимизировать. Есть ли для этого встроенное решение Torch или я должен изменить архитектуру системы (чтобы не выполнять оптимизацию)?

Изменить: если добавить некоторые произвольные параметры в модель, как показано ниже, потеря приведет к RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn

def __init__(self, transformer_models: Dict, opt: Namespace):
    super(RandomMulti, self).__init__()
    self.num_classes = opt.polarities_dim
    # add some parameters so that the optimizer doesn't raise an exception
    self.some_params = nn.Linear(2, 2)

Я действительно предполагаю, что существует более простое решение, поскольку случайный базовый классификатор - довольно обычная вещь в машинном обучении.

1 Ответ

2 голосов
/ 14 июля 2020

Действительно, наличие «случайной» базовой линии - обычная практика, но обычно вам не нужно явно ее генерировать, не говоря уже о «обучении» ее. В большинстве случаев вы можете получить довольно точные математические ожидания для «случайной» базовой линии. Например, в классификации Imag eNet у вас есть 1000 категорий одинакового размера, чем случайное предсказание категории должно дать вам ожидаемую точность 1/1000. Вам не нужно создавать экземпляр случайного классификатора для получения этого числа.

Если вы настаиваете на явном создании экземпляра случайного классификатора - что означает его «обучение»? Есть ошибки, которые вы получаете, pytorch просто не может понять, что вы делаете. У вас может быть случайный классификатор, и вы можете оценить его производительность, но нет смысла его обучать.

...