Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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/2/tensorflow/5.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 马修斯相关系数作为keras中的损失_Python_Tensorflow_Keras - Fatal编程技术网

Python 马修斯相关系数作为keras中的损失

Python 马修斯相关系数作为keras中的损失,python,tensorflow,keras,Python,Tensorflow,Keras,我试图用tf后端为keras编写一个自定义的丢失函数。 我得到以下错误 ValueError:操作没有渐变。请确保 你所有的行动都有一个梯度,即 可微的。无梯度的普通操作:K.argmax,K.round, K.eval 如果我使用这个函数作为度量,而不是作为损失函数,它会起作用。如何将此函数用作损失 删除K.round后,我得到以下错误: InvalidArgumentError:无法压缩维度[0],维度应为1, 得了8分 [{{node loss_9/densite_10_loss/sque

我试图用tf后端为keras编写一个自定义的丢失函数。 我得到以下错误

ValueError:操作没有渐变。请确保 你所有的行动都有一个梯度,即 可微的。无梯度的普通操作:K.argmax,K.round, K.eval

如果我使用这个函数作为度量,而不是作为损失函数,它会起作用。如何将此函数用作损失

删除K.round后,我得到以下错误:

InvalidArgumentError:无法压缩维度[0],维度应为1, 得了8分 [{{node loss_9/densite_10_loss/squence}}=squence[T=DT_FLOAT, 挤压直径=[-1], _device=/job:localhost/replica:0/task:0/device:GPU:0] _arg_稠密_10_样本_权重_0_2/_2445]] [{{node loss\u 9/add\u 12/\u 2467}}=\u Recvclient\u terminated=false, recv_device=/job:localhost/replica:0/task:0/device:CPU:0, send_device=/job:localhost/replica:0/task:0/device:GPU:0, 发送\u设备\u化身=1,张量\u名称=边缘\u 6418 \u丢失\u 9/添加\u 12, 张量类型=DT浮点数, _device=/job:localhost/replica:0/task:0/device:CPU:0]]

答案是:你不能

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

损失:损失函数或成本函数是一个函数,它将事件或一个或多个变量的值映射到一个实数,直观地表示与事件相关的一些成本。优化问题寻求使损失函数最小化

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

optmizer:一种优化最小化成本函数的方法

为什么我们不能用真实的正利率作为损失函数呢? 因为你不能最小化它。它不是凸的。因此,您不能单独定义预测的成本。从定义中可以看出,这是一个成本函数,它依赖于所有答案来计算费率。您不能为一个样本计算它

你能做什么

使用它作为度量,并在遵循该度量的演化过程中使用早期停止,以获得最佳迭代

答案是:你不能

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

损失:损失函数或成本函数是一个函数,它将事件或一个或多个变量的值映射到一个实数,直观地表示与事件相关的一些成本。优化问题寻求使损失函数最小化

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

optmizer:一种优化最小化成本函数的方法

为什么我们不能用真实的正利率作为损失函数呢? 因为你不能最小化它。它不是凸的。因此,您不能单独定义预测的成本。从定义中可以看出,这是一个成本函数,它依赖于所有答案来计算费率。您不能为一个样本计算它

你能做什么


使用它作为度量,并在遵循该度量的演化过程中使用早期停止,以获得最佳迭代

@Alexis已经给出了错误消息的答案,但我想澄清一些关于损失函数的问题,这些损失函数是从度量中派生出来的:

一般来说,度量不能用作损失函数,但通常平滑版的度量(如骰子度量=F1分数)可以用作损失函数。一个用例可能是图像分割


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

@Alexis已经给出了错误消息的答案,但我想澄清一些关于源自度量的损失函数的问题:

一般来说,度量不能用作损失函数,但通常平滑版的度量(如骰子度量=F1分数)可以用作损失函数。一个用例可能是图像分割


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

K。轮是不可微的。你能试着不倒圆,这样我们就可以缩小误差面吗?@JosefKorbel这行不通。任何使用tp和tf的东西,比如f-beta,都不是一种损失,因此是不可行的。你不能把它当作损失。您需要使用它作为度量,并保持它以获得最佳迭代。@标记请更新您的答案,不要在中发布有用的信息comments@Alexis哦,恐怕你是对的。因为圆是不可微的,所以你不能直接最小化它。你能试着不倒圆,这样我们就可以缩小误差面吗?@JosefKorbel这行不通。任何使用tp和tf的东西,比如f-beta,都不是一种损失,因此是不可行的。你不能把它当作损失。您需要使用它作为度量,并保留它以获得最佳迭代。@标记请更新您的a
nswer,不要在网站上发布有用的信息comments@Alexis哦,恐怕你是对的。因为你不能直接将它最小化,所以它不会如此有用。
def matthews_correlation(y_true, y_pred):
    y_pred_pos = K.round(K.clip(y_pred, 0, 1))
    y_pred_neg = 1 - y_pred_pos

    y_pos = K.round(K.clip(y_true, 0, 1))
    y_neg = 1 - y_pos

    tp = K.sum(y_pos * y_pred_pos)
    tn = K.sum(y_neg * y_pred_neg)

    fp = K.sum(y_neg * y_pred_pos)
    fn = K.sum(y_pos * y_pred_neg)

    numerator = (tp * tn - fp * fn)
    denominator = K.sqrt((tp + fp) * (tp + fn) * (tn + fp) * (tn + fn))

    return 1.0 - numerator / (denominator + K.epsilon())