Python 使用Keras的自定义损失函数中的索引张量
我正在Python 使用Keras的自定义损失函数中的索引张量,python,tensorflow,keras,tensor,Python,Tensorflow,Keras,Tensor,我正在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
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\u range
到end\u range
获取real\u标签
和predicted\u标签
项,但当前代码返回异常:
错误:
TypeError: Failed to convert object of type <class 'list'> to Tensor.
Contents: [0, 1, None]. Consider casting elements to a supported type.
TypeError:无法将类型的对象转换为Tensor。
内容:[0,1,无]。将铸造元素考虑为支持类型。
我不知道该怎么办,因为这是我第一次体验TensorFlow
和Keras
。
如何使用张量上的索引获取项目?提前感谢。错误是因为
占位符中指定的无形状,并且它发生在行中
batch_real_labels = tf.slice(real_labels, [start_range, 1, None], [end_range, 1, None])
解决方法是将变量
定义为该占位符
的形状
,并使用该变量
而不是无
其代码如下所示:
h = tf.shape(losses)[0]
batch_real_labels = tf.slice(real_labels, [start_range, 1, h], [end_range, 1, h])
此解决方法将修复错误,TypeError:无法将类型的对象转换为Tensor。内容:[0,1,无]。将铸造元素考虑为支持类型。< /代码>但随后的代码行可能会导致其他错误。
如果您遇到任何其他错误,请分享错误
,完整的代码,包括函数,获取最高概率
,以及目标,例如,您使用该函数想要实现什么,自定义损失
,我可以很高兴地帮助您
作为Tensorflow
和Keras
的新手,祝您学习愉快 错误是由于tf.placeholder
中指定了None
形状
,并且它发生在行中
batch_real_labels = tf.slice(real_labels, [start_range, 1, None], [end_range, 1, None])
解决方法是将变量
定义为该占位符
的形状
,并使用该变量
而不是无
其代码如下所示:
h = tf.shape(losses)[0]
batch_real_labels = tf.slice(real_labels, [start_range, 1, h], [end_range, 1, h])
此解决方法将修复错误,TypeError:无法将类型的对象转换为Tensor。内容:[0,1,无]。将铸造元素考虑为支持类型。< /代码>但随后的代码行可能会导致其他错误。
如果您遇到任何其他错误,请分享错误
,完整的代码,包括函数,获取最高概率
,以及目标,例如,您使用该函数想要实现什么,自定义损失
,我可以很高兴地帮助您
作为Tensorflow
和Keras
的新手,祝您学习愉快 请使用后端函数K.reforme根据您自己的知识对输入标签和输入预测进行重塑
对于标签,输入是未定义的(?,),因此需要通过重塑它来修复它。否则,您将无法对其编制索引。请使用后端函数K.Reformate根据您自己的知识对输入标签和输入预测进行重塑
对于标签,输入是未定义的(?,),因此需要通过重塑它来修复它。否则,您无法对其编制索引。Hi@pairon,请提供最小可复制代码。Hi@pairon,请提供最小可复制代码。