2017-06-26 1 views
0

Ich versuche parallel Tabelle für die erste Schicht von Alexnet in Torch, Lua zu haben. Ich möchte zwei Stapel von RGB-Bildern an das Netzwerk übergeben und dann deren Addition an die nächste Ebene senden. Beispiel: Angenommen, ich möchte Bilder mit 6 Kanälen an die erste Ebene von alexnet senden, aber in diesem Fall möchte ich zwei Stapel mit je 3 Kanälen an die ersten parallelen Ebenen senden, sie verbinden und dann die Ausgabe an die nächste senden Schicht. der eigentliche Code ist wie folgt:Machen Sie die erste Schicht von AlexNet parallel in lua

net = nn.Sequential() 
net:add(nn.SpatialConvolution(3,96,11,11,4,4,2,2))  
net:add(nn.SpatialBatchNormalization(96)) 
net:add(nn.ReLU(true)) 
net:add(nn.SpatialMaxPooling(3,3,2,2))     
net:add(nn.SpatialConvolution(96,256,5,5,1,1,2,2))  
net:add(nn.SpatialBatchNormalization(256)) 
net:add(nn.ReLU(true)) 
net:add(nn.SpatialMaxPooling(3,3,2,2))     
net:add(nn.SpatialConvolution(256,384,3,3,1,1,1,1))  

und der Code ich dachte, es würde funktionieren ist:

net = nn.Sequential() 
c = nn.ParallelTable() 
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2)) 
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2)) 
net:add(c) 
net:add(nn.JoinTable(1,8)) 
net:add(nn.SpatialBatchNormalization(96)) 
net:add(nn.ReLU(true)) 
net:add(nn.SpatialMaxPooling(3,3,2,2)) 

und die Fehler, die ich habe ist:

In 1 Modul nn .ParallelTable: /torch/install/share/lua/5.1/cudnn/init.lua:171: Bestätigung fehlgeschlagen!

Ich fragte mich, wo ich mit dieser Implementierung falsch liege und jede Hilfe würde sehr geschätzt werden.

Dank

+0

Der eigentliche Code zeigt, dass die Eingänge 18 Kanäle haben, daher können Sie nicht verwenden ' SpatialConvolution mit 3 Eingangskanälen – fonfonx

+0

Es war mein Fehler. Der eigentliche Code ist 3, die Eingabe mit 3 Kanälen bekommt, aber jetzt möchte ich dem Modell 2 Chargen von 3 Kanälen Bilder geben (ich kann meine Modellchargen von 6 Kanälen durch Ändern von 3 bis 6 in der ersten Schicht, aber ich möchte geben das Netzwerk zwei Chargen von 3 Kanälen statt einer Charge von 6 Kanälen) –

+0

Was sind die Abmessungen des Eingang Tensors zu Ihrem Modell? – fonfonx

Antwort

0

Ihre Fehler auf der Linie net:add(nn.JoinTable(1,8)), soll es 3 anstelle von 8. Dieser Wert ist die Anzahl der Dimensionen (ohne die Batch-Dimension als Dimension zu Zählen) Ihre Eingabe Tensor. Hier speisen Sie Ihr Netzwerk mit 3D-Bildern, dann sollten Sie schreiben net:add(nn.JoinTable(1,3))

ich den folgenden Code verwendet, und alles gut geht

require 'nn' 
require 'cutorch' 
require 'cunn' 
require 'cudnn' 

net = nn.Sequential() 
c = nn.ParallelTable() 
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2)) 
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2)) 
net:add(c) 
net:add(nn.JoinTable(1,3)) 
net:add(nn.SpatialBatchNormalization(96)) 
net:add(nn.ReLU(true)) 
net:add(nn.SpatialMaxPooling(3,3,2,2)) 

net:cuda() 

input1 = torch.rand(128,3,227, 227):cuda() 
input2 = torch.rand(128,3,227,227):cuda() 

out = net:forward({input1, input2}) 

print(out:size()) 
+0

Vielen Dank für Ihre Hilfe. Ich habe es auf 3 geändert und es hat funktioniert. –

+0

@ M.es, wenn das Ihre Frage gelöst hat, akzeptieren Sie die Antwort, um allen zu zeigen, dass die Frage gelöst ist – fonfonx

Verwandte Themen