【发布时间】:2020-07-22 18:23:43
【问题描述】:
在 CNN 分类模型训练期间计算损失时,我在 PyTorch 中对图像应用编码 jpeg 压缩。虽然我调用 loss.backward() 它还必须通过对图像执行的编码和压缩操作进行反向传播。
这些压缩算法(例如编码和 JPEG 压缩)是否可区分,否则如何通过这些操作反向传播损失梯度?
如果这些操作不可微,那么 PyTorch 中是否存在执行 H.264 编码和 JPEG 压缩的可微压缩算法?
任何建议都会非常有帮助。
【问题讨论】:
-
我不知道 JPEG 压缩是否可以区分,但如果压缩是由外部算法执行的(不是在 PyTorch 框架内编写,使用 pytorch 张量等),那么你将没有渐变。
-
如果在 nn.functional 模块中由 pytorch 的可微操作集合执行,操作将是可微的。为什么你甚至想通过编码进行反向传播?您是在输入图像上应用它们,还是在中间特征图上应用它们?如果是前者,那么只需使用 jpeg 压缩作为预处理技术。您不需要反向传播,因为没有要更新的权重。如果是后一种情况,您可能需要实现自己的可微分 autograd 函数。看到这个:pytorch.org/tutorials/beginner/examples_autograd/…
标签: pytorch conv-neural-network gradient-descent image-compression