Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
226 views
in Technique[技术] by (71.8m points)

python - Compare two tensors of numpy arrays by each array - tensorflow

I have a multilabel classification problem and my y_true and y_pred during training looks like this:

y_true = tf.constant([[0, 1, 1, 0], [0, 1, 1, 0]])
y_pred = tf.constant([[0, 1, 0, 1], [0, 1, 1, 0]])

I want to compare those two based on each pair of lists. To do so, I wrote something like

values = tf.cast(x, "float32") == tf.cast(y, "float32")
bool_to_number_values = tf.cast(tranformed_values, "float32")
print(bool_to_number_values)
tranformed_values_summed = x.numpy().shape[0] - tf.reduce_sum(bool_to_number_values)
tranformed_values_summed.numpy()

This returns

tf.Tensor(
[[1. 1. 0. 0.]
 [1. 1. 1. 1.]], shape=(2, 4), dtype=float32)

and -4.0 because 2.0 - 6.0 == -4.0

But I don't want this. I want to compare the first array of y_true to the first array of y_pred and if they are identical return True else False. The same logic applies for the second array of y_true and y_pred.

So the correct result should be

tf.Tensor(
[0,
 1], , shape=(2,), dtype=float32)

#0: because the arrays on index 0 are not equal y_true[0] <> y_pred[0]
#1: because the arrays on index 1 are equal y_true[1] == y_pred[1] 

and the tranformed_values_summed.numpy() = 2.0 - 1.0 = 1.0


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I think you might be looking for tf.reduce_all:

tf.cast(tf.reduce_all(tf.equal(y_true, y_pred), axis=-1), tf.int32)
<tf.Tensor: shape=(2,), dtype=int32, numpy=array([0, 1])>

Copy/pastable:

import tensorflow as tf

y_true = tf.constant([[0, 1, 1, 0], [0, 1, 1, 0]])
y_pred = tf.constant([[0, 1, 0, 1], [0, 1, 1, 0]])

tf.cast(tf.reduce_all(tf.equal(y_true, y_pred), axis=-1), tf.int32)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...