1

Ich versuche char-rnn, die das nächste Zeichen in Bezug auf vorherige Zeichen mit Theano vorhersagt.formale Definition von Tensor in theano

Also gibt es 4 bemerkenswerte Tensoren (oder Matrizen).

x: Eingänge förmigen [timelength, inputsize]

h: versteckten Zustände förmigen [timelength, hiddensize]

y: Ausgänge förmigen [timelength, inputsize]

t: Zielwerte shaped [timelength-1, inputsize]

Hier ist der Zielwerttensor t eindeutig als formal definiert:

t [i, j]: = x [i + 1, j] aber wie definiert man t mit obiger Definition?

x = T.matrix(name="x") 
t = ? # t[i] := x[i+1] but how to define it in theano? 

ps. Ich habe über nnet.conv2d von Theano recherchiert aber hatte kein Glück

+0

Haben Sie ein Tutorial über RNN gelesen? – Julien

+0

Ich kann RNN und seinen Optimierer ohne irgendwelche Rahmen implementieren – Laie

Antwort

0

Die ursprüngliche Sequenz ist ein Vektor von ganzen Zahlen, codierenden Zeichen. Dies wird in eine Ein-Hot-Codierung umgewandelt, die Eingaben liefert. Die Ein-Hot-Codierung eines Zeichens mit Index 5 ist ein Vektor, bei dem das fünfte Element 1 ist und der Rest Nullen sind. Es sieht so aus, als ob Sie Ziele einrichten, um auch eine Ein-Hot-Codierung zu verwenden. Dies kann gemacht werden, ist aber nicht wirklich notwendig. Sie können einfach die ursprüngliche Integer-Codierung verwenden. In diesem Fall ist t ein Vektor, keine Matrix. Die Länge sollte timelength, nicht timelength-1 sein.

Die entsprechende Theanos Definition wäre:

t = ivector(name="t") # for 32-bit integer 
t = lvector(name="t") # for 64-bit integer 

sollten Sie, was Integer-Typ Sie für die Indizierung verwenden verwenden, da wird das Ziel als Index in die Ausgänge verwendet werden (y), wenn Sie die Quer berechnen Entropieverlust.

char-rnn verarbeitet aufeinanderfolgende Blöcke einer Sequenz. Nehmen wir an, die ursprüngliche Folge von zeichenkodierenden ganzen Zahlen heißt chars. Die aktuelle Position in der Sequenz lautet . Die Blocklänge ist timelength. Für den aktuellen Block enthalten die Eingänge x die Ein-Hot-Codierung chars[p : p + timelength]. Die Ziele t enthalten chars[p + 1 : p + timelength + 1]. Auf diese Weise ist jedes Ziel der Eingabe einen Zeitschritt voraus.

Der ursprüngliche char-rnn Code here ist ziemlich einfach. Es verwendet numpy und nicht theano, und die Art, wie es geschrieben wird, wird etwas anders sein. Aber es ist sehr nützlich, um die Konzepte zu verstehen.

+0

hier existieren einige Missverständnisse. Da es sich um ein Vorhersageproblem handelt, sollte das Netzwerk für eine Zeitscheibe x_t + 1 für eine gegebene Eingabe x_t ausgeben. Dies macht es nicht erforderlich als Eingabe. es ist definiert. Wenn ich calc_rnn_loss ("abc") nenne - notice Zielwert ist nicht gegeben, sollte es in der Lage sein, den Verlust zu berechnen. Ich habe keine Schwierigkeiten, RNN zu verstehen. es ist eindeutig eine Theano-Frage. – Laie