2016-12-14 3 views
5

Das Modul source_code hat drei Parameter, die sie als Ausgänge, Ziele und Gewichte aufgelistet werden müssen.Verständnis tensorflow sequence_loss Parameter

Ausgänge und Ziele sind selbsterklärend, aber ich möchte besser verstehen, was ist der weight Parameter?

Die andere Sache, die ich verwirrend finde, ist, dass es besagt, dass die targets sollte die gleiche length wie die Ausgänge sein, was genau bedeuten sie durch die Länge eines Tensors? Besonders wenn es ein 3-dimensionaler Tensor ist.

Antwort

0

Wir verwendeten dies in einer Klasse und unser Professor sagte, wir könnten es einfach der richtigen Form übergeben (der Kommentar sagt "Liste der 1D Batch-Größe Float-Tensoren der gleichen Länge wie logits"). Das hilft nicht bei dem, was sie bedeuten, aber vielleicht hilft es dir, deinen Code zum Laufen zu bringen. Arbeitete für mich.

Dieser Code sollte den Trick erfüllen: [tf.ones(batch_size, tf.float32) for _ in logits].

Edit: von TF-Code:

for logit, target, weight in zip(logits, targets, weights): 
     if softmax_loss_function is None: 
     # TODO(irving,ebrevdo): This reshape is needed because 
     # sequence_loss_by_example is called with scalars sometimes, which 
     # violates our general scalar strictness policy. 
     target = array_ops.reshape(target, [-1]) 
     crossent = nn_ops.sparse_softmax_cross_entropy_with_logits(
      logit, target) 
     else: 
     crossent = softmax_loss_function(logit, target) 
     log_perp_list.append(crossent * weight) 

Die Gewichte, die durch den Verlust für diese bestimmte logit multipliziert geben werden. Wenn Sie also eine bestimmte Vorhersage extra ernst nehmen wollen, können Sie das Gewicht über 1 erhöhen.

+0

Es hilft ein wenig, aber ich versuche mehr darüber zu verstehen, was der Zweck der Gewichte Parameter ist, ich finde nicht viel Diskussion von Gewichten in der Verlustfunktion eines RNN, es sei denn, wir sprechen über die Ausgabe Schicht. Kennen Sie zufällig die Antwort auf die richtige Form der Frage, was Länge bedeutet? – TheM00s3

+0

Ich denke, Sie sprechen über den Kommentar im Code? 'Weights: Liste von 1D Batch-Size Float-Tensoren der gleichen Länge wie Logits. Ist Ihre Frage zu diesem Kommentar? –

+0

das wäre der eine. – TheM00s3

1

Stellen Sie sich die Gewichte als eine Maske vor, die auf den Eingangstensor angewendet wird. In einigen NLP-Anwendungen haben wir oft unterschiedliche Satzlängen für jeden Satz. Um mehrere Instanzsätze in einen Minibatch zu parallelisieren/abzufangen, um sie in ein neuronales Netz einzukoppeln, verwenden Leute eine Maskenmatrix, um zu bezeichnen, welches Element in dem Eingangstensor tatsächlich eine gültige Eingabe ist. Zum Beispiel kann das Gewicht ein np.ones([batch, max_length]) sein, was bedeutet, dass alle Eingabeelemente echt sind.

Wir können auch eine Matrix mit der gleichen Form wie die Etikett verwendet werden, wie beispielsweise np.asarray([[1,1,1,0],[1,1,0,0],[1,1,1,1]]) (nehmen wir an, um die Etiketten Form 3x4), dann die crossEntropy der ersten Reihe letzte Spalte wird

als 0 maskiert werden, Sie können auch Gewicht verwenden, um die gewichtete Akkumulation der Kreuzentropie zu berechnen.

Verwandte Themen