在自定义损失函数中获得权重

时间:2017-07-25 23:48:21

标签: python tensorflow deep-learning keras loss-function

我正在尝试实现自定义丢失函数,该函数提供加权像素方式的交叉熵值。

我使用" sample_weight_mode =' temporal'"编译模型,并为每个单独的图像传递不同的权重。我有以下内容:

model.fit_generator(train_generator,...)

其中,train_generator产生具有以下尺寸的(input_image,target_label,weight)元组:

input_image  ->  (48, 64, 64, 1)
target_label ->  (196608, 1)
weight       ->  (196608,)

是否可以实现一个损失函数来获得相应的权重作为参数?如果可以实现如下所示的功能,请问有谁可以告诉我吗?

def pixelwise_cross_entropy(target, output, weight):
    #~ target = tf.convert_to_tensor(target, dtype=tf.float32)
    #~ output = tf.convert_to_tensor(output, dtype=tf.float32)
    _EPSILON = 10e-8

    output /= tf.reduce_sum(output, axis=len(output.get_shape()) - 1, keep_dims=True)

    epsilon = tf.cast(tf.convert_to_tensor(_EPSILON), output.dtype.base_dtype)
    output = tf.clip_by_value(output, epsilon, 1. - epsilon)

    return - tf.reduce_sum(target * tf.log(output) * weight, axis=len(output.get_shape()) - 1)

重量图是目标的形态侵蚀版本。我试图在自定义损失函数本身中创建权重贴图。由于我的数据是3D,我不能使用tensorflow" tf.nn.erosion2d"。

我无法将张量对象转换为numpy数组来执行此操作,因为它会产生以下负尺寸错误。

tensorflow.python.framework.errors_impl.InvalidArgumentError: Shape [-1,-1,-1] has negative dimensions
 [[Node: mask_target = Placeholder[dtype=DT_FLOAT, shape=[?,?,?], _device="/job:localhost/replica:0/task:0/gpu:0"]()]]

如果您对此有所了解或遇到类似问题,有人可以帮忙吗?

0 个答案:

没有答案