Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras/Tensorflow预测在另一个程序中用于计算损失_Python_Tensorflow_Keras - Fatal编程技术网

Python Keras/Tensorflow预测在另一个程序中用于计算损失

Python Keras/Tensorflow预测在另一个程序中用于计算损失,python,tensorflow,keras,Python,Tensorflow,Keras,我想尝试一个管道,它利用Keras/Tensorflow和另一个程序。我下面的“非常专业”图表显示了我正在努力完成的目标 CNN的输入为2D矩阵,输出为2D矩阵,其尺寸与输入矩阵相同。我想将预测输入一个单独的程序,该程序计算一个新的2D矩阵,然后将该矩阵与输入矩阵进行比较,以计算损失 我知道计算起来会很慢,但我还是想知道它是否可行。我的第一个想法是修改损失函数以与外部程序接口,但少量研究似乎表明这是不可能的。是否有其他方法将一个单独的程序插入损失函数,或者是否有其他方法来返工此管道 非常感谢您

我想尝试一个管道,它利用Keras/Tensorflow和另一个程序。我下面的“非常专业”图表显示了我正在努力完成的目标

CNN的输入为2D矩阵,输出为2D矩阵,其尺寸与输入矩阵相同。我想将预测输入一个单独的程序,该程序计算一个新的2D矩阵,然后将该矩阵与输入矩阵进行比较,以计算损失

我知道计算起来会很慢,但我还是想知道它是否可行。我的第一个想法是修改损失函数以与外部程序接口,但少量研究似乎表明这是不可能的。是否有其他方法将一个单独的程序插入损失函数,或者是否有其他方法来返工此管道


非常感谢您的任何建议

简单的回答是不,一般来说这是不可能的。这是因为CNN和任何神经网络都是通过使用反向传播和损失函数进行训练的。如果要执行backprop,需要知道将输入x转换为输出y的过程。这样你可以计算梯度。如果你使用一个黑盒程序作为等式的一部分,那么就不可能进行反向支持

一些可能的建议

  • 如果可行,您可以训练一个conv网络来模拟blackbox程序,然后将其用作训练的一部分
  • 你可以做一些其他形式的优化,没有梯度/使用黑盒损失函数

我不完全理解这将如何影响反向传播。外部程序产生可预测的结果——这几乎就像将预测乘以随机数。使用反向传播优化外部程序的输入将优化外部程序的输出。这对我来说没有意义。首先,将预测值乘以随机数不是一项易学的任务。但除此之外,如果您想优化外部函数的输入,然后在没有外部函数的情况下训练您的模型,那么您需要知道在输入训练数据之前,训练数据的“最优”是什么。最后,如果你想使用外部程序的输出来优化你的初始函数,那么是的,这会影响backprop。是的,乘以随机数是一个糟糕的例子。我知道什么最适合我的训练数据,因为“黑匣子”程序的输出应该与CNN的输入相同。相反,假设预测值乘以5,并与输入值进行比较。如果输入为5,那么网络是否应该能够在不知道预测值乘以5的情况下将自身优化为输出1?是和否。首先,这听起来像是在尝试制作某种自动编码器,我不明白为什么你有一个黑匣子程序,如果它是完全确定的,那么就编写它的代码,然后用它来训练你的模型。这个论点的关键是,你需要能够采取梯度。如果它只是乘以5,那么取梯度很容易,你可以把它写下来。否则,不会,因为我可以从1到5以任何方式得到5=1*5,5=1+4,5=1*2+3,等等。那么程序怎么知道如何取黑盒的梯度呢?