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方法也很好。对于简单的事情,它可能会有点冗长。