当我尝试为keras创建自定义指标时,我遇到了错误(Intersection over union)。 我想找到两个图像(张量)联合的交叉点
def IoU(y_true,y_pred):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
#assert len(y_true_f) != len(y_pred_f)
y_true_f = y_true_f.eval(session = K.get_session())
y_pred_f = y_pred_f.eval(session = K.get_session())
union1 = [i for i,j in zip(y_true_f,y_pred_f) if i != j]
union2 = [j for i,j in zip(y_true_f,y_pred_f) if i != j]
intersection = [i for i,j in zip(y_true_f,y_pred_f) if i == j]
unionAll = union1 + union2 + intersection
return (np.sum(intersection) + smooth) / float(np.sum(unionAll)+ smooth)
错误我得到了:
InvalidArgumentError(请参阅上面的回溯):您必须提供值 对于占位符张量&activation = activation_1_target'与dtype浮动和 形状[?,?,?] [[节点:activation_1_target = Placeholderdtype = DT_FLOAT,shape = [?,?,?], _device =" / job:localhost / replica:0 / task:0 / gpu:0"]] [[Node:metrics / IoU / Reshape / _5 = _Recvclient_terminated = false, recv_device =" /作业:本地主机/复制:0 /任务:0 / CPU:0&#34 ;, send_device =" /作业:本地主机/复制:0 /任务:0 / GPU:0&#34 ;, send_device_incarnation = 1,tensor_name =" edge_8_metrics / IoU / Reshape", tensor_type = DT_FLOAT, _device =" /作业:本地主机/复制:0 /任务:0 / CPU:0"]]
答案 0 :(得分:0)
eps = 1.
def iou(y_true, y_pred):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f*y_pred_f)
union = K.sum(y_true_f)+K.sum(y_pred_f)-intersection+eps
return intersection/union