Tensorflow中的损失函数如何调用?自定义损失功能的问题

时间:2020-06-03 15:30:01

标签: python tensorflow tf.keras

我确实有一个用Tensorflow Keras编写的暹罗网络,该网络可以输出测量两个样本有多接近的概率。

original_model.predict([sample1, sample2, ...])=[probability1, probability2 ...] = y_predctions

其中每个样本都包含两个样本的信息。 我使用二进制交叉熵作为包含给定y_true向量的损失函数,该向量包含样本的真实结果。如果两个样本匹配,则为1,否则为0。

现在,我重新设计了模型,模型预测是一个矩阵,其中包含有关样本的所有成对组合的信息:

model.predict([sample1, sample2, ...])=[[probability11, probability12 ...] [probability21, probability22 ...] ... ] = y_predictions

但是我的y_true向量仍然是一维的。

我编写了一个损失函数,将y_true和y_predictions作为输入并计算损失。如果y_true和y_predictions是一个numpy数组,则效果很好。

我可以编译模型,做出预测并评估模型,但是我无法拟合模型(model.fit(x_train,y_true))

是否有一种方法使用损耗函数,该函数将一维NumPy数组作为y_true,将n x n NumPy矩阵作为y_pred? 以及一般而言,在Tensorflow中如何调用损失函数?

  • 我知道赋予损失函数的参数与预测的输出不同。我修改了损失函数,该函数不将model.predict(x_train)作为输入,而是将model(x_train)作为输入。 (我只是用y_pred.numpy()转换了y_pred)。当我尝试拟合模型时,出现错误“ Tensor”对象没有属性“ numpy”。 尽管我使用的是tf版本2.0,但我确保在开始时执行了tf.enable_eager_execution()。 我在损失函数中打印了y_pred向量,并得到了以下内容:

    打印(y_pred) Tensor(“ layer_name / Identity:0”,shape =(None,None),dtype = float32)

  • 我还尝试使用tf.numpy_function模块,该模块将numpy函数包装在tf函数中。当我尝试拟合模型时,出现错误 ValueError:没有为任何变量提供渐变:

如上所述,我使用Tensorflow 2.0和python 3.7.6

0 个答案:

没有答案