Преобразование тензора таким образом, чтобы максимальное значение было 1, а остальное - 0 - PullRequest
1 голос
/ 25 мая 2020

Я борюсь с проблемой, в которой мне нужно преобразовать мой тензор так, чтобы из общих значений максимальное значение получало 1 как значение, а остальное как 0.

tf.Tensor(
    [[0.05]
     [0.1]
     [0.5]
     [0.35]],shape=(4,1),dtype = float32)

Я пробовал

out = tf.sparse_to_dense(tf.argmax(a),tf.cast(tf.shape(a), dtype=tf.int64), tf.reduce_max(a))

но, к сожалению, я получаю сообщение об ошибке

Input must be a SparseTensor.

Я хотел получить результат как

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

, пожалуйста, помогите мне решить проблему. Большое спасибо

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Использование бэкэнда keras K.cast(K.equal(a, K.max(a)), dtype='int8')

import numpy as np

import tensorflow as tf
from tensorflow.keras import backend as K

a = np.arange(0, 1, 0.1)
a = a[:, np.newaxis]

a


array([[0. ],
       [0.1],
       [0.2],
       [0.3],
       [0.4],
       [0.5],
       [0.6],
       [0.7],
       [0.8],
       [0.9]], dtype=float32)

tensor = K.cast(a, dtype='float32')

tensor

<tf.Tensor: shape=(10, 1), dtype=float32, numpy=
array([[0. ],
       [0.1],
       [0.2],
       [0.3],
       [0.4],
       [0.5],
       [0.6],
       [0.7],
       [0.8],
       [0.9]], dtype=float32)>

K.cast(K.equal(a, K.max(a)), dtype='int8')


<tf.Tensor: shape=(10, 1), dtype=int8, numpy=
array([[0],
       [0],
       [0],
       [0],
       [0],
       [0],
       [0],
       [0],
       [0],
       [1]], dtype=int8)>

1 голос
/ 25 мая 2020

попробовать так

x = tf.constant(
    [[0.05],
     [0.1],
     [0.5],
     [0.35]])

top_values, top_indices = tf.nn.top_k(tf.reshape(x, (-1,)), 1)
tf.cast(tf.greater_equal(x, top_values), tf.float64)

вывод

<tf.Tensor: shape=(4, 1), dtype=float64, numpy=
array([[0.],
       [0.],
       [1.],
       [0.]])>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...