O que é uma codificação quente no fluxo tensor?

10

Atualmente, estou fazendo um curso no tensorflow no qual eles usaram tf.one_hot (índices, profundidade). Agora não entendo como esses índices mudam para essa sequência binária.

Alguém por favor pode me explicar o processo exato ???

thanatoz
fonte

Respostas:

14

Suponha que você tenha um recurso categórico no seu conjunto de dados (por exemplo, cor). E suas amostras podem ser vermelhas, amarelas ou azuis. Para passar esse argumento para um algoritmo ML, você primeiro precisa codificá-lo para que, em vez de cadeias, tenha números.

A maneira mais fácil de fazer isso é criar um mapeamento em que:

vermelho -> 1
amarelo -> 2
azul -> 3

e substitua cada sequência pelo seu valor mapeado.

No entanto, isso pode criar efeitos colaterais indesejados em nosso modelo de ML, pois ao lidar com números, pode pensar que azul> amarelo (porque 3> 2) ou que vermelho + amarelo = azul (porque 1 + 2 = 3). O modelo não tem como saber que esses dados eram categóricos e, em seguida, foram mapeados como números inteiros.

A solução para esse problema é a codificação one-hot, onde criamos N novos recursos , onde N é o número de valores exclusivos no recurso original. Em nosso exame, N seria igual a 3, porque temos três cores únicas (vermelho, amarelo e azul).

Cada um desses recursos é binário e corresponderia a um desses valores exclusivos. No nosso exemplo, o primeiro recurso seria um recurso binário informando se a amostra é vermelha ou não; o segundo seria o mesmo para amarelo e o terceiro para azul.

Um exemplo dessa transformação é ilustrado abaixo:

Observe que, como essa abordagem aumenta a dimensionalidade do conjunto de dados, se tivermos um recurso que aceita muitos valores exclusivos, convém usar uma codificação mais esparsa (como a que apresentei acima).

Djib2011
fonte
3

depth: Um escalar que define a profundidade de uma dimensão quente.

índices: um tensor de índices.

Este é o exemplo dado na documentação do tensorflow.
1. Especificando apenas índices e profundidade (os valores padrão de on_value são 1 e off_value são 0)

 indices = [0, 1, 2]
    depth = 3
    tf.one_hot(indices, depth)  # output: [3 x 3]
    # [[1., 0., 0.],
    #  [0., 1., 0.],
    #  [0., 0., 1.]]
  1. Especificando on_value e off_value
índices = [0, 2, -1, 1]
depth = 3
tf.one_hot (índices, profundidade, on_value = 5.0, off_value = 0.0, eixo = -1)
## saída: [4 x 3]
    # [[5.0, 0.0, 0.0], # one_hot (0)
    # [0.0, 0.0, 5.0], # one_hot (2)
    # [0,0, 0,0, 0,0], # um_hot (-1)
    # [0,0, 5,0, 0,0]] # um_hot (1)

Você também pode ver o código no GitHub

Vallie
fonte
O doc tf é mais compreensível: tensorflow.org/api_docs/python/tf/one_hot
dturvene