IoU keras(后端tenserflow)为占位符错误(tensor.eval()提供dict

时间:2018-02-21 17:29:05

标签: python tensorflow deep-learning keras keras-2

当我尝试为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"]]

1 个答案:

答案 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