Keras,使用y_pred y_true

时间:2019-10-28 21:40:58

标签: python tensorflow keras

我有一个特定的问题,我没有在stackoverflow上找到答案。

首先,我想向您概述我的问题。

我正在使用CNN和图像进行二进制分类。对于每个图像,我在一个csv文件中都有一个与之相关的信息。

为简单起见,我将按数字顺序调用图像,并将所有信息都以CSV格式放置。

id, images, attribute_1, attribute_2, label
1, image_1.png, 10, 11, 1
2, image_2.png, 8, 19, 1
3, image_3.png, 3, 2, 1
4, image_4.png, 10, 8, 1

阅读Keras文档我了解,为了创建自定义损失函数,我必须编写如下内容:

def customLoss(yTrue,yPred):
    return some_calculus_with_yTrue_and_yPred

我的问题是:

  • 是否可以将customLossattribute_1向量之类的更多参数传递给attribute_2
  • 是否可以知道我们正在计算哪一批损失函数? (例如:100个样本,批次大小为10,将有10个批次将计算损失)
  • 是否可以访问x向量?对于x向量,我的意思是包含通过训练和验证集的样本的向量。拥有x向量对于使用哈希图或类似工具获取attribute_1attribute_2之类的其他信息很有用。

我的想法是执行以下操作:

def customLoss(yTrue,yPred, attribute_1, attribute_2):
     loss = 0
     if yTrue[i] == yPred[i]: 
         loss = attribute_1 + attribute_2
     else: 
          otherwise
     return loss 

此示例非常简单,但是仅需要了解我想如何使用其他参数来计算我的自定义损失函数。

最后但并非最不重要的一点是,是否可以指定较高的损失优于较低的损失? (与标准方法相反)

谢谢。

1 个答案:

答案 0 :(得分:1)

对于第一个问题,我相信答案是肯定的:您可以传递比y_pred和y_true更多的参数。该文档有一些示例,例如带有附加参数https://keras.io/losses/的“ Huber_Loss”,您可以检查github上的keras代码以获得类似的修改功能的模板:https://github.com/keras-team/keras/blob/master/keras/losses.py

不太可能我理解问题2和3,尽管可以将“ x向量”作为参数传递给已修改的损失函数(例如y_pred),但这是非常推测性的。

问题4:也许将损失乘以-1?

我希望这会有所帮助。