2017-12-11 4 views
0

Mein Netzwerk haben N-Schichten, und ich möchte die letzte Schicht einfach letzten Ausgang als vorherigen Schichten Ausgabe wie unten multiplizieren. Angenommen, meine N-1-Schicht hat einen 3-d-Ausgang, der letzte hat einen 2-d-Ausgang. der letzte_Ausgang [1] = vorheriger_Ausgang [1] * vorheriger_Ausgang [2], letzter_Ausgang [2] = vorheriger_Ausgang [3]. Und ich möchte ein CrossEntropyCriterion auf diesem 2-d-last_output verwenden. Nun erreiche ich dies durch die N-1-Netzwerkmodell konstruieren und die letzte Ausgabe wie folgt:Fackel einfach letzten Ausgang als vorherige Ebenen Ausgang multiplizieren

local last_output = torch.ones(previous_output:size()[1], 2) 
last_output[{{}, {1}}] = torch.cmul(previous_output[{{},{1}}], previous_output[{{},{2}}]) 
last_output[{{}, {2}}] = previous_output[{{}, {3}}] 

So ist die letzte Schicht sind nicht in der modle, und wenn sie nur laufen

loss = criterion:forward(last_output, target) 

Fehler auftreten . Gibt es einen Trick, um den Zweck zu erreichen?

+1

"Fehler auftreten" ist nicht sehr hilfreich. Bitte lesen [fragen] und verbessern Sie Ihren Beitrag – Piglet

Antwort

0

Der beste Weg, dies zu tun, ist eine benutzerdefinierte Ebene zu schreiben. Weitere Informationen finden Sie unter torch developer docs.