[英]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.