Сравните два тензора массивов numpy по каждому массиву - tensorflow

У меня проблема с многоуровневой классификацией, и мои y_true и y_pred во время обучения выглядят так:

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

Я хочу сравнить эти два на основе каждой пары списков. Для этого я написал что-то вроде

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()

Это возвращает

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

и -4.0 потому что 2.0 - 6.0 == -4.0

Но я не хочу этого. Я хочу сравнить первый массив y_true с первым массивом y_pred, и если они идентичны, вернуть True иначе False. Та же логика применима ко второму массиву y_true и y_pred.

Таким образом, правильный результат должен быть

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] 

и tranformed_values_summed.numpy() = 2.0 - 1.0 = 1.0

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
499
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вы ищете 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])>

Копировать/вставить:

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)

Николай большое спасибо за ответ. Представьте, что я использовал reduce_all после проверки этого stackoverflow.com/questions/56394240/…, я пропустил axis=-1, что помогло.

NikSp 21.12.2020 18:23

Это случается с лучшими из нас ;)

Nicolas Gervais 21.12.2020 18:25

Николас мог бы, пожалуйста, проверить (в свободное время) этот вопрос stackoverflow.com/questions/65381855/… Рад получить ваши мысли по этому поводу.

NikSp 21.12.2020 19:17

Другие вопросы по теме