2016-07-29 27 views
3

Angenommen habe ich die folgende Tensor t als Ausgang einer softmax Funktion:Softmax-Matrix auf 0/1 (OneHot) codierte Matrix?

t = tf.constant(value=[[0.2,0.8], [0.6, 0.4]]) 
>> [ 0.2, 0.8] 
    [ 0.6, 0.4] 

Nun würde ich diese Matrix t in eine Matrix konvertieren möchten, die die OneHot codierte Matrix ähnelt:

Y.eval() 
>> [ 0, 1] 
    [ 1, 0] 

Ich bin vertraut mit c = tf.argmax(t), dass würde mir die Indizes pro Zeile t, die 1 sein sollte. Aber von c zu Y zu gehen scheint recht schwierig.

Was ich schon versucht t-tf.SparseTensor Umwandlung c und anschließend tf.sparse_tensor_to_dense()Y zu erhalten verwenden. Aber diese Umwandlung beinhaltet einige Schritte und scheint für die Aufgabe übertrieben zu sein - ich habe es noch nicht einmal vollständig abgeschlossen, aber ich bin mir sicher, dass es funktionieren kann.

Gibt es eine geeignetere/einfachere Möglichkeit, diese Konvertierung zu machen, die ich vermisse.

Der Grund, warum ich das brauche, ist, weil ich einen benutzerdefinierten OneHot-Encoder in Python habe, wo ich Y füttern kann. tf.one_hot() ist nicht umfangreich genug - erlaubt keine benutzerdefinierte Codierung.

Verwandte Fragen:

Antwort

3

Warum nicht kombinieren tf.argmax() mit tf.one_hot().

Y = tf.one_hot(tf.argmax(t, dimension = 1), depth = 2)

+0

Das ist so offensichtlich! Fühle wirklich einen Depp, dass du das nicht früher gesehen hast. Und ich denke du hast Recht. Obwohl 'tf.one_hot()' eher zum Kategorisieren als zum Zuweisen von 1 zu Indizes gedacht ist, scheint es letzteres zu tun (von meinen begrenzten Tests), auch wenn die Tiefe angegeben ist. Vielen Dank! –