2015-08-14 4 views
9

Ich habe einen Byte-Tensor von Integer-Klassen-Labels, z.B. aus dem MNIST-Datensatz.In Torch, wie erstelle ich einen 1-hot Tensor aus einer Liste von Integer-Etiketten?

1 
7 
5 
[torch.ByteTensor of size 3] 

Wie verwenden Sie es, um einen Tensor von 1-Hot-Vektoren zu erstellen?

1 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 0 0 
0 0 0 0 1 0 0 0 0 0 
[torch.DoubleTensor of size 3x10] 

Ich weiß, dass ich mit einer Schleife dies tun könnte, aber ich frage mich, ob es eine kluge Torch Indizierung ist, dass es für mich in einer einzigen Zeile bekommen.

Antwort

13
indices = torch.LongTensor{1,7,5}:view(-1,1) 
one_hot = torch.zeros(3, 10) 
one_hot:scatter(2, indices, 1) 

Sie in der Dokumentation zu scatter im torch/torch7 github readme (in dem Master-Zweig) finden.

2

Eine alternative Methode ist Zeilen aus einer Identitätsmatrix mischen:

indicies = torch.LongTensor{1,7,5} 
one_hot = torch.eye(10):index(1, indicies) 

Das war nicht meine Idee, fand ich es in karpathy/char-rnn.