我有个模特
def apk(x: SymbolicTensor, y: SymbolicTensor, k=10):
"""
Computes the average precision at k.
"""
#here I need to find number of elements x, existed in y.
@tf.function
def my_map_k(actual, predicted, k=10):
"""
Computes the mean average precision at k.
"""
results = tf.map_fn(lambda x: apk(x[0], x[1]), (actual, predicted), dtype=tf.float32)
return tf.reduce_mean(results)
""""
data preparation here. Every element of data X and Y is an array int[10]
""""
model = Sequential()
model.add(SimpleRNN(300, input_shape=(1, 10))) # input_shape=(None, 1)
model.add(Dense(10))
model.compile(loss=my_map_k, optimizer='adam', run_eagerly=True)
model.fit(X2, Y2, epochs=1000, batch_size=32)
在这个模型中,我需要开发自定义的损失函数,找到预测的元素到Y元素,并计算这些数组之间的二进制差异。
我所有的尝试,以消除或转换x,实际,y或预测导致一种错误-“操作不支持的符号Tensor”我会很感激,如果有人能告诉我如何找到元素一个符号Tensor在另一个。我已经试过了:
Compare = tf.reduce_any(int(x[:, None]) == int(y))
exists = tf.math.count_nonzero(comparison_matrix)
return float(exists) / float(min(len(x), k))
或本
score = tf.math.count_nonzero(tf.reduce_any(int(x[:])==int(y[:]), axis=-1))
return float(score) / float(min(len(x), k))
一直都是零损失... PS:转换为int()需要,因为实际的Tensor是整数,但预测的Tensor是浮点数。更新日期:
def apk(x: SymbolicTensor, y: SymbolicTensor, k=10):
exists = tf.math.count_nonzero((x == tf.transpose(tf.cast(y, tf.int64))))
return float(exists) / k
结果相同-损失:0.0000e+00
1条答案
按热度按时间lhcgjxsq1#
我找到了一个可行的解决方案: