不更新权重的反向传播(DCGAN)
Backpropagation without updating weights (DCGAN)
基本的想法是,我加载一个经过训练的模型 (DCGAN) 并用它对图像进行异常检测。对于异常检测,我必须在测试阶段进行一些迭代来评估它是否是异常。
为此,我在测试设置中有两个损失函数,它们应该计算生成器输入的反向传播和更新潜在向量。 但是它只应该更新潜在向量,而不是图上的权重。
这可能吗?
可能,如果我只使用我的潜在向量的 pytorch 变量并将生成器的变量输出设置为
"requires_grad=False"
就像在文档中一样 --> Pytorch
是的,您的方向是正确的。
您可以单独设置模型参数的 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)
基本的想法是,我加载一个经过训练的模型 (DCGAN) 并用它对图像进行异常检测。对于异常检测,我必须在测试阶段进行一些迭代来评估它是否是异常。
为此,我在测试设置中有两个损失函数,它们应该计算生成器输入的反向传播和更新潜在向量。 但是它只应该更新潜在向量,而不是图上的权重。
这可能吗?
可能,如果我只使用我的潜在向量的 pytorch 变量并将生成器的变量输出设置为
"requires_grad=False"
就像在文档中一样 --> Pytorch
是的,您的方向是正确的。
您可以单独设置模型参数的 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)