2017-02-08 4 views
1

Ich habe eine gute Sequenz zu Sequenz-Modell trainiert, die ich auf meiner lokalen Box getestet habe, aber jetzt versuche ich eine Menge von Abfragen zu bewerten. Ich sehe jedoch diesen Fehler, obwohl:Warum verwendet CNTK die Einbettungsdimension für den Decoder?

02/08/2017 00:50:54: EXCEPTION occurred: Node 'decoderInput._' (If operation): Input dimensions [100] and [57408 x 3] are not compatible. 

57408 ist die Größe des Vokabulars. Ich schätze, 100 kommt von der Anzahl der Einbettungsdimensionen, die auf 100 gesetzt ist.

Ich bin verwirrt, warum das nicht funktioniert, weil die Tatsache, dass die Eingabe und Ausgabe "spärlich" ist, in der "cntkReaderInputDef"

cntkReaderInputDef = { rawInput = { alias = "S0" ; dim = $inputVocabSize$ ; format = "sparse" } ; rawLabels = { alias = "S1" ; dim = $labelVocabSize$ ; format = "sparse" } } 

Antwort

1

Geschrieben von William Darling:

, weil Sie eine Einbettung verwenden, können Sie eine modifizierte Version der CNTK.core.bs-Datei verwenden müssen. In Zeile 1515 ist es zur Zeit:

decoderFeedback = /*EmbedLabels*/ (tokens.word) # [embeddingDim x Dnew] 

Die nächste Zeile ist, wo Ihre Fehler herkommt:

delayedDecoderFeedback = Boolean.If (Loop.IsFirst (labelSentenceStartEmbeddedScattered), labelSentenceStartEmbeddedScattered, Loop.Previous (decoderFeedback)) 

Die decoderFeedback Form hat [W x Dneu] aber die labelSentenceStartEmbeddedScattered hat Form [E] wobei E die Einbettungsdimension ist. In BrainScript gibt es keine gute Möglichkeit, das eingebettete Makro, das in der Modelldefinition verwendet wird, zu übergeben, daher müssen Sie es explizit schreiben. So ändern Linie 1515:

decoderFeedback = TransposeTimes(modelAsTrained.Einput, tokens.word) 

, die Ihre decoderFeedback Darstellung in etwas kompatibel mit der Einbettung Form verwandeln wird.

Btw, die format = sparse der Leser-Definition ist nur in Bezug darauf, wie Sie Ihre CTF-Eingabedatei formatiert. Mit dem spärlichen Format bedeutet das, dass Sie Dinge wie 7: 1 haben, was bedeutet, dass es einen eins-heißen Vektor mit einer 1 an Position 7 gibt, anstatt eine ganze Reihe von Nullen aufzuschreiben (was Sie mit dem dichten Format haben würden).

1

Chris Basoglu sagt:

Eigentlich sollten Sie in der Lage sein, neben dem eigenen Konfigurationsdatei zu kopieren Sie einfach Ihre CNTK.core.bs Datei. Es sollte zuerst diesen Ordner anzeigen.