Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 如何对内部损失函数进行建模和预测?(Tensorflow,Keras)_Python_Tensorflow_Loss Function - Fatal编程技术网

Python 如何对内部损失函数进行建模和预测?(Tensorflow,Keras)

Python 如何对内部损失函数进行建模和预测?(Tensorflow,Keras),python,tensorflow,loss-function,Python,Tensorflow,Loss Function,我正试图用以下结构为回归问题构造一个自定义损失,答案如下: 现在,我的函数如下所示: def CustomLoss(model,X_valid,y_valid,batch_size): def Loss(y_true,y_pred): n_samples=5 mc_predictions = np.zeros((n_samples,256,256)) for i in range(n_samples): y_p =

我正试图用以下结构为回归问题构造一个自定义损失,答案如下:

现在,我的函数如下所示:

def CustomLoss(model,X_valid,y_valid,batch_size):
    def Loss(y_true,y_pred):
        n_samples=5
        mc_predictions = np.zeros((n_samples,256,256))
        for i in range(n_samples):
           y_p = model.predict(X_valid, verbose=1,batch_size=batch_size)
    (Other operations...) 
        return LossValue
    return Loss
当试图执行这一行时
y\u p=model.predict(X\u有效,verbose=1,batch\u size=batch\u size)
我得到以下错误:

方法需要处于跨副本上下文中,请使用get\u replica\u context()。merge\u call()

从我收集的资料来看,我无法使用模型。预测内部损失函数。是否有解决此问题的方法或解决方案?
请让我知道我的问题是否清楚,或者您是否需要任何其他信息。谢谢

听起来您可以使用model.add\u loss进行此操作。您可以使用它来指定模型内部的损失函数。它还消除了损失函数只接受y和y_pred的需要。 \一些psuedo代码:

class YourModel(tf.keras.Model): 
    ...
    def call(self, inputs): 
        unpack, any, extra, stuff = inputs
        (your network code goes here)
        loss = (other operations)
        self.add_loss(loss)
        return output

(如果你不知道,model.predict基本上只是model.call,但附加了一些额外的提示。)

如果你真的想,我想你可能可以破解它。本质上,主要问题是predict被设计为调用静态图,因此不能成为静态图的一个组件。我认为您不想/不需要使用predict,因为您可能已经拥有X/Y中的所有数据信息,您能说明为什么不使用predict或提供更多的上下文吗?我想预测损失函数中的n_样本,以生成贝叶斯近似值。因此,我不必比较
y\u-true
y\u-pred
而是可以比较
y\u-true
y\u-bayesian
。我希望这有助于在没有梯度的情况下计算y_贝叶斯?你能不能把y_Bayes传递给自定义损失?y_Bayes在每个时期都会发生变化。这就是为什么我的第一个想法是在损失函数中预测更新y_贝叶斯。除了分步训练,还有其他选择吗?谢谢你,你有一些选择,你可以使用GradientTape做一个自定义的训练循环,或者你可以做一个自定义的拟合,或者你甚至可以在批号上加一个条件,在你的时代结束时更新y_Bayes。谢谢你的建议。我一定会努力的。为模型使用类的优势是什么?与使用顺序模型相比,它更具可定制性和灵活性。使用OOP方法也很好。对于简单的事情,它可能会有点冗长。