Обратное распространение без обновления весов (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)