繁体   English   中英

关于pytorch中不可微函数的问题

[英]Question about non differentiability function in pytorch

我对预测的神经网络有疑问。

y_predicted = self.net(x)
z_predicted = self.calculate_z(y_predicted)

我想尽量减少 y 和 z 的预测损失。 但是,self.calculate_z 方法是不确定的,并由模拟使用。 有没有办法在pytorch中包含z_predicted和z_real之间的损失?

上面我想要做的一个例子:(x输入,y_real(真实目标1),z_real(真实目标2),self.net(神经网络))

def example(self, x, y_real, z_real):
    y_predicted = self.net(x)
    z_predicted = self.calculate_z(y_predicted)
    self.loss = self.criterionL1(z_predicted, z_real) + self.criterionL1(y_real, y_predicted)
    self.loss.backward()

CUDA 和 cudnn 部分是不确定的。 非确定性不是问题,它必须是可微的。 所以无论self.calculate_z做什么,它都必须在 pytorch 中运行 autograd。 所以基本上使用张量和pytorch张量操作。

这实际上取决于模拟的功能,它的复杂程度。 它会改变还是应该在训练期间改变? 如果self.calculate_z不可微,则必须将其排除在损失之外。 计算图中需要有一条从z_predicted到您的网络的路径。

仅当self.calculate_z中有可学习的参数时,还包括z的损失似乎才有意义,否则它可以被视为“常量”,并且您的网络无论如何只预测y并且z直接依赖于y 所以为y设置一个损失就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM