马修斯相关系数作为喀拉拉邦的损失

时间:2019-01-07 15:53:29

标签: python tensorflow keras

我尝试用tf后端为keras写一个自定义损失函数。 我收到以下错误

  

ValueError:操作具有Click Version: 6.7 Python Version: 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] ----------- > command1 --cmd1-opt1 foo --cmd1-opt2 bar command2 hello {'command1_args': {'cmd1_opt1': 'foo', 'cmd1_opt2': 'bar'}} {'command2_argument1': 'hello'} ----------- > --help Usage: test.py [OPTIONS] COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]... Options: --help Show this message and exit. Commands: command1 Add command1. command2 Add command2. 用于渐变。请确定   您所有的操作都定义了渐变(即   可区分的)。不带渐变的常见操作:K.argmax,K.round,   埃瓦尔。

None

如果我将此函数用作指标而不是损失函数,它将起作用。如何使用此功能作为损失?

删除K.round之后,出现以下错误:

  

InvalidArgumentError:无法挤压dim [0],预期尺寸为1,   拿到8      [[{{node loss_9 / dense_10_loss / Squeeze}} =挤压[T = DT_FLOAT,   squeeze_dims = [-1],   _device =“ / job:localhost /副本:0 / task:0 / device:GPU:0”]   (_arg_dense_10_sample_weights_0_2 / _2445)]]      [[{{node loss_9 / add_12 / _2467}} = _Recvclient_terminated = false,   recv_device =“ / job:localhost /副本:0 / task:0 / device:CPU:0”,   send_device =“ / job:localhost /副本:0 / task:0 / device:GPU:0”,   send_device_incarnation = 1,tensor_name =“ edge_6418_loss_9 / add_12”,   tensor_type = DT_FLOAT,   _device =“ / job:localhost /副本:0 /任务:0 /设备:CPU:0”]]

2 个答案:

答案 0 :(得分:1)

答案是:您不能

让我解释一下原因。首先,我们需要定义一些东西:

  • 损失:损失函数或成本函数是将一个事件或一个或多个变量的值映射到一个直观地表示与该事件相关联的“成本”的实数的函数。一个优化问题试图使损失函数最小化

  • 指标: 在数学中,度量或距离函数是定义集合中每对元素之间的距离的函数

  • 优化器:一种优化(最小化)成本函数的方法。

现在我们为什么不能使用True正利率作为损失函数? 好吧,因为您无法将其最小化。它不是凸的。因此,您无法单独定义预测成本。从定义中可以看出,这是一个成本函数,取决于所有答案来计算费率。您无法为1个样本进行计算。

您可以做什么?

将其用作度量标准,并在遵循该度量标准的演变过程中使用尽早停止并获得最佳迭代。

答案 1 :(得分:0)

@Alexis已经给出了错误消息的答案,但我想澄清一些有关从度量导出的损失函数的信息:

通常,度量不能用作损失函数,但是通常可以使用平滑的度量标准,例如骰子度量(= F1分数)CH Sudre 2014作为损失函数。一种用例可能是图像分割。

(请原谅,我必须添加此评论作为答案,因为我没有足够的声誉来添加评论)