Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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 CNTK:定义自定义损失函数(Sø;rensen骰子系数)_Python_Deep Learning_Cntk - Fatal编程技术网

Python CNTK:定义自定义损失函数(Sø;rensen骰子系数)

Python CNTK:定义自定义损失函数(Sø;rensen骰子系数),python,deep-learning,cntk,Python,Deep Learning,Cntk,我想在CNTK/Python中用作loss函数。如何定义自定义损耗函数。将numpy导入为np 将cntk作为C导入 def dice_系数(x,y): # https://en.wikipedia.org/wiki/S%C3%B8rensen%E2%80%93Dice_coefficient 交集=C.减少元素和(C.元素乘以(x,y)) 返回2*交点/(C.reduce\u sum(x)+C.reduce\u sum(y)) 形状=(1,2,2) x1=np.ones(形状) y1=np.重

我想在CNTK/Python中用作loss函数。如何定义自定义损耗函数。

将numpy导入为np
将cntk作为C导入
def dice_系数(x,y):
# https://en.wikipedia.org/wiki/S%C3%B8rensen%E2%80%93Dice_coefficient
交集=C.减少元素和(C.元素乘以(x,y))
返回2*交点/(C.reduce\u sum(x)+C.reduce\u sum(y))
形状=(1,2,2)
x1=np.ones(形状)
y1=np.重塑([0,1,0,1],形状)
x=C.消毒输入(x1)
y=C.消毒输入(y1)
dice_系数(x,y).eval({x:x1,y:y1})

数组([0.66666 9],dtype=float32)

回答您更一般的问题“如何定义自定义损失函数:”

在CNTK中,损失函数并不特殊。任何产生标量的表达式都可以用作损失函数。学习者将通过求和minibatch中所有样本的标量损失值来计算minibatch级别的损失,并通过它像通过任何CNTK表达式一样进行反向传播

例如,以下是定义平方误差损失的一种方法:

def my_square_error(x,y):
    diff = x-y
    return times_transpose(diff, diff)
交叉熵\u与\u softmax()
损失可以用Python编写,如下所示:

def my_cross_entropy_with_softmax(output, labels):
    logZ = reduce_log_sum(output)  # log of softmax denominator
    return times_transpose(labels, output) - logZ
最后,多任务学习可以通过使用一个损失函数来实现,该函数是多个损失的加权和。

快速说明:C.element_乘以(x,y)可以写成x*y。