我正在尝试在Keras中构建自定义损失函数。 我的模型是图像着色CNN,其想法是基于每个预测像素在我数据集中先前测量的像素颜色分布中的稀有性,对其进行惩罚。 损失函数从分布中获取每种颜色值与像素总数的预先计算比率。 因此,我必须获取每个真实像素的系数,该系数必须在比率数组中以当前像素值的索引进行访问。
我已经在NumPy中构建了“哑巴”丢失版本,并且按预期工作。 在尝试使用tf.map_fn将其转换为Tensorflow时,我看不到实现该方法的方法。我尝试运行会话或评估张量失败。
下面是我的损失函数。
def color_rebalancing_loss(ratios):
def loss(y_true, y_pred):
err = np.absolute(np.subtract(y_true, y_pred))
pixel_weight = tf.map_fn(lambda x: coefficient(x), y_true)
return err * pixel_weight
def coefficient(x):
x = tf.to_int32(x)
x = x.eval(session = tf.Session())
return 1/ratios[x]
return loss
此行失败
x = x.eval(session = tf.Session())
出现此错误:
ValueError: Operation 'loss/activation_1_loss/map/while/TensorArrayReadV3' has been marked as not fetchable.
我在互联网上的搜索没有发现任何潜在的修复方法,人们建议不要迭代数组,使用buit-in tensorflow函数,但是可以访问
ratios[x]
在这种情况下,是必须的。 任何建议将不胜感激。