【发布时间】:2020-05-30 07:35:43
【问题描述】:
我在Keras 中使用了自定义损失函数。
这是函数:
def custom_loss(groups_id_count):
def listnet_loss(real_labels, predicted_labels):
losses = tf.placeholder(shape=[None], dtype=tf.float32) # Tensor of rank 1
for group in groups_id_count:
start_range = 0
end_range = (start_range + group[1])
batch_real_labels = tf.slice(real_labels, [start_range, 1, None], [end_range, 1, None])
batch_predicted_labels = tf.slice(predicted_labels, [start_range, 0, 0], [end_range, 0, 0])
loss = -K.sum(get_top_one_probability(batch_real_labels)) * tf.math.log(get_top_one_probability(batch_predicted_labels))
losses = tf.concat([losses, loss], axis=0)
start_range = end_range
return K.mean(losses)
return listnet_loss
我会从start_range 到end_range 得到real_labels 和predicted_labelsitems,但当前代码返回异常:
错误:
TypeError: Failed to convert object of type <class 'list'> to Tensor.
Contents: [0, 1, None]. Consider casting elements to a supported type.
我不知道该怎么办,因为这是我第一次接触TensorFlow和Keras。
如何使用张量索引获取项目?提前致谢。
【问题讨论】:
-
嗨@pairon,请提供最低可重现代码。
标签: python tensorflow keras tensor