Обратное распространение без обновления весов (DCGAN)

Основная идея заключается в том, что я загружаю обученную модель (DCGAN) и делаю с ней обнаружение аномалий на изображениях. Для обнаружения аномалии мне нужно сделать несколько итераций на этапе тестирования, чтобы оценить его, если это аномалия или нет.

Для этого у меня есть две функции потерь в тестовой установке, которые должны вычислять обратное распространение на вход генератора и обновлять скрытый вектор. Но это только должно обновить скрытый вектор, а не веса на графике.

Это возможно?

Возможно, если я использую только переменную pytorch моего скрытого вектора и установлю переменную на выходе генератора равной "requires_grad=False"Как в документах -> Pytorch

1 ответ

Решение

Да, ты на правильном пути. Вы можете индивидуально установить requires_grad Атрибут параметров вашей модели (точнее всех листовых узлов в вашем вычислительном графе). Я не знаком с DCGAN, но я предполагаю, что латентный вектор также является обучаемым параметром (иначе обновление обратного распространения имеет для меня мало смысла).

Следующий фрагмент кода, адаптированный из документов PyTorch, может быть полезен для ваших целей:

# Load your model
model = torchvision.models.resnet18(pretrained=True)

# Disable gradient computation for all parameters
for param in model.parameters():
    param.requires_grad = False

# Enable gradient computation for a specific layer (here the last fc layer)
for param in model.fc.parameters():
    param.requires_grad = True

# Optimize only the the desired parameters (for you latent vectors)
optimizer = optim.SGD(model.fc.parameters(), lr=1e-2, momentum=0.9)
Другие вопросы по тегам