【问题标题】:Keras/Tensorflow prediction used in another program to calculate lossKeras/Tensorflow 预测在另一个程序中用于计算损失
【发布时间】:2020-04-27 04:38:54
【问题描述】:

我想尝试使用 Keras/Tensorflow 和另一个程序的管道。下面我的“非常专业”图表显示了我想要完成的工作

CNN with external program pipeline

CNN 的输入是一个 2D 矩阵,输出是一个与输入矩阵具有相同维度的 2D 矩阵。我想将预测输入到一个单独的程序中,该程序计算一个新的二维矩阵,然后将其与输入矩阵进行比较以计算损失。

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

非常感谢任何建议!

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

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

    一些可能的建议。

    • 如果可行,您可以训练一个卷积网络来模拟黑盒程序,然后就可以将其用作训练的一部分。
    • 您可以进行其他形式的优化,无需渐变/使用黑盒损失函数。

    【讨论】:

    • 我不完全理解这将如何影响反向传播。外部程序产生可预测的结果——几乎就像将预测乘以随机数。使用反向传播优化外部程序的输入将优化外部程序的输出。
    • 这对我来说真的没有意义。首先,将预测乘以随机数不是一项可学习的任务。但除此之外,如果您想优化外部函数的输入,然后在没有外部函数的情况下训练您的模型,您将需要知道什么是“最佳”,直到您输入训练数据。最后,如果您想要使用外部程序的输出来优化您的初始功能,那么是的,这会影响反向传播。
    • 是的,乘以随机数是一个不好的例子。我知道什么最适合我的训练数据,因为“黑盒”程序的输出应该与 CNN 的输入相同。而是说预测乘以 5 并与输入进行比较。如果输入为 5,那么网络是否应该能够在不知道预测乘以 5 的情况下优化自身以输出 1?
    • 是和不是。首先,这听起来像是您正在尝试制作某种自动编码器,我不明白为什么您有一个黑盒程序,如果它完全确定然后只需编写它所做的代码,然后用它来训练您的模型。这个论点的症结在于你需要能够采用渐变。如果它只是乘以 5,那么取梯度非常容易,你可以把它写下来。否则,不,因为我可以通过多种方式从 1 到 5 5 = 1*5、5 = 1+4、5 = 1*2 + 3 等。程序如何知道如何获取 a 的梯度那么黑盒呢?
    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 2018-05-30
    • 2021-09-06
    • 2021-08-08
    • 2016-05-21
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    相关资源
    最近更新 更多