首页 > 解决方案 > 使用 Keras 在自定义损失函数中索引张量

问题描述

我在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

我会从to获取real_labelspredicted_labels项目,但当前代码返回异常:start_rangeend_range

错误:

TypeError: Failed to convert object of type <class 'list'> to Tensor.
Contents: [0, 1, None]. Consider casting elements to a supported type.

我不知道该怎么做,因为这是我第一次使用TensorFlowand Keras。如何使用张量索引获取项目?提前致谢。

标签: pythontensorflowkerastensor

解决方案


请使用后端函数K.reshape根据您自己的知识重塑输入标签和输入预测。

对于标签,输入是未定义的(?,?),因此您需要通过重塑它来修复它。否则,您无法索引它。


推荐阅读