python 在另一个Tensor中逐一找到符号Tensor元素

vmdwslir  于 2023-10-14  发布在  Python
关注(0)|答案(1)|浏览(125)

我有个模特

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

lhcgjxsq

lhcgjxsq1#

我找到了一个可行的解决方案:

def apk(x: SymbolicTensor, y: SymbolicTensor, k=10):
    score = tf.math.count_nonzero((x == tf.transpose([tf.cast(y, tf.int64)])))
    return float (k-score)/k

相关问题