【问题标题】:Pytorch - Optimizer is not updating its specified parameterPytorch - 优化器未更新其指定参数
【发布时间】:2022-01-08 07:28:25
【问题描述】:

我正在尝试实现基于 CLIP 的样式转换。完整代码是here

由于某些未知原因,优化器不会改变潜在张量的权重。我可以确认迭代步骤之前和之后的值相等。我还确保 requires_grad 为 True,并尝试了各种损失函数和优化器。

知道为什么它不起作用吗?

【问题讨论】:

    标签: python machine-learning pytorch computer-vision generative-adversarial-network


    【解决方案1】:

    我发现您的代码存在一些问题。

    优化器接受参数。参数应该是计算图中的叶节点。在您的情况下,您告诉优化器使用潜在作为参数,但它必须抱怨潜在是某些计算的结果。

    所以你分离了latent,现在latent变成了一个叶子节点。但是,当您分离潜在变量时,计算图不再存在,从而创建了一个新的潜在变量。

    此外,要优化参数,损失应该是该参数的函数。我无法查看您是否在损失函数计算中使用了潜在的。所以这可能是另一个问题。

    【讨论】:

    • 对。所以我什至在任何事情发生之前就分离潜伏,之后我不会触摸它。我还尝试了随机噪声而不是潜在的相同结果。然后我用它来计算使用 ruclip_processor 和 ruclip 的 CLIP 嵌入。第一个使用torchvision 来转换图像(确保它保持为张量),这可能是个问题吗?然后我计算风格图像 CLIP 和从潜在计算得到的图像之间的损失。有没有办法检查图表在哪里中断?
    • I don't touch it afterwards.. 我不知道您在 for 循环(训练循环)中使用latent 变量的位置。由于它不是计算的一部分,因此不会更新。 And then I compute loss between the style image CLIP and the one computed from latent .. 我在您的培训代码中没有看到它(第 82-104 行)。你在第 71 行创建了一个新的变量 latent,它在哪里使用?
    • 我想我找到了问题所在。在第 86 行,我从潜在向量计算 one-hot 向量,以便对其进行解码并将其传递给 CLIP,图形会中断。 vae_make_onehot 返回叶张量
    • 是的,这是真的。抱歉,我错过了那里正在使用潜在的。
    【解决方案2】:

    我想我找到了问题所在。在第 86 行,我从潜在向量计算 one-hot 向量,以便对其进行解码并将其传递给 CLIP,图形会中断。 vae_make_onehot 返回一个叶张量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-02
      • 2021-05-14
      • 2017-10-30
      • 1970-01-01
      • 2019-08-11
      • 2019-01-02
      • 2011-05-26
      • 1970-01-01
      相关资源
      最近更新 更多