PyTorch zusammenhängende()

Ich war durch dieses Beispiel einer LSTM-Sprache-Modell auf github (link).
Was es tut, im Allgemeinen ist ziemlich klar für mich. Aber ich bin immer noch kämpfen, um zu verstehen, was Berufung contiguous() tut, kommt mehrmals im code.

Beispielsweise in Zeile 74/75 der code-Eingabe-und-Ziel-Sequenzen des LSTM erstellt werden.
Daten (abgelegt in ids) ist 2-dimensional, wo die erste dimension ist die batch-Größe.

for i in range(0, ids.size(1) - seq_length, seq_length):
    # Get batch inputs and targets
    inputs = Variable(ids[:, i:i+seq_length])
    targets = Variable(ids[:, (i+1):(i+1)+seq_length].contiguous())

So, wie ein einfaches Beispiel, bei der Verwendung von batch-Größe 1 und seq_length 10 inputs und targets sieht wie folgt aus:

inputs Variable containing:
0     1     2     3     4     5     6     7     8     9
[torch.LongTensor of size 1x10]

targets Variable containing:
1     2     3     4     5     6     7     8     9    10
[torch.LongTensor of size 1x10]

So im Allgemeinen meine Frage ist, was hat contiguous() und warum brauche ich es?

Weiteren verstehe ich nicht, warum die Methode aufgerufen wird, für das die target-Sequenz, nicht aber die Eingabe-Sequenz als beide Variablen sind aus den gleichen Daten.

Wie könnte targets werden uncontiguous und inputs noch zusammenhängend sein?

EDIT:
Ich habe versucht, zu verlassen, ruft contiguous(), führt jedoch zu einer Fehlermeldung bei der Berechnung der Verluste.

RuntimeError: invalid argument 1: input is not contiguous at .../src/torch/lib/TH/generic/THTensor.c:231

So offensichtlich Aufruf contiguous() in diesem Beispiel ist notwendig.

(Für die Aufbewahrung dieser lesbar ich vermieden Buchung den vollständigen code hier, es kann gefunden werden, indem über die GitHub-link oben.)

Vielen Dank im Voraus!

InformationsquelleAutor blue-phoenox | 2018-02-21

Schreibe einen Kommentar