2016-04-25 14 views
7

Ich versuche so etwas wie ein vollständig konnektives Netzwerk zu implementieren, wobei die letzte Faltungsschicht die Filtergröße 1x1 verwendet und einen 'Score'-Tensor ausgibt. Der Notensor hat die Form [Stapel, Höhe, Breite, Anzahl_Klassen].Pro Pixel softmax für vollkonvolutionelles Netzwerk

Meine Frage ist, welche Funktion in Tensorflow Softmax-Operation für jedes Pixel anwenden kann, unabhängig von anderen Pixeln. Die tf.nn.softmax ops scheint nicht für einen solchen Zweck.

Wenn es solche Ops nicht gibt, muss ich wohl selbst eine schreiben.

Danke!

UPDATE: Wenn ich mich selbst implementieren muss, muss ich den Eingangstensor vielleicht zu [N, num_claees] umformen, wobei N = Stapel x Breite x Höhe, tf.nn.softmax anwenden und dann neu formen zurück. Macht das Sinn?

+0

Sie können es zu einer 2D-Matrix umformen, Softmax machen, dann umformen. – Aaron

+0

Aha, aktualisieren Sie zur gleichen Zeit mit Ihren Kommentaren. Aber danke! –

+0

Hey, Hast du das endlich umgesetzt? Ich stecke hier fest. –

Antwort

3

Es auf 2d umzuformen und es dann, wie Sie vermuteten, neu zu formen, ist der richtige Ansatz.

1

Sie können diese Funktion verwenden.

Ich fand es durch die Suche von GitHub.

import tensorflow as tf 

""" 
Multi dimensional softmax, 
refer to https://github.com/tensorflow/tensorflow/issues/210 
compute softmax along the dimension of target 
the native softmax only supports batch_size x dimension 
""" 
def softmax(target, axis, name=None): 
    with tf.name_scope(name, 'softmax', values=[target]): 
     max_axis = tf.reduce_max(target, axis, keep_dims=True) 
     target_exp = tf.exp(target-max_axis) 
     normalize = tf.reduce_sum(target_exp, axis, keep_dims=True) 
     softmax = target_exp/normalize 
     return softmax 
Verwandte Themen