2016-04-09 10 views
-2

Wenn ich einige Fackel-Codes gelesen habe, war ich verwirrt mit dem "nn" und "dp" -Modell. Ich sehe in vielen Codes, die nur dp (no nn) erfordert, aber warum kann nn.methodA verwenden? Warum kann es nn verwenden, ohne es zu erfordern? Außerdem ist die Methode in der dpnn definiert! Sollte es als dpnn.methodA verwendet werden? die Codes wie folgt tun:die Verwechslung von 'nn', 'dp' und 'dpnn' Modul in Torch

require 'dp' 
    ... 
    nn.methodA() [the methodA is defined in 'dpnn'] 

Antwort

2

'dp' hat 'nn' als Abhängigkeit und erfordert 'nn'. Genauer gesagt wird beim Aufruf von require 'dp' das Init-Skript von 'dp' ausgeführt. Dies ruft require 'dpnn' (see) auf. Anschließend wird das Init-Skript 'dpnn' ausgeführt und ruft require 'nn' (see) auf.

Darüber hinaus teilen Module den gleichen globalen Namespace. Dies bedeutet, dass Module abc oder nn oder was auch immer setzen können. Viele Module erweitern den Namespace von 'nn' um zusätzliche Funktionalität.

+0

danke, also wie den Namespace von 'nn' zu erweitern, gibt es irgendwelche Schlüsselwörter in den Codes verwendet? – hunter

+0

Da es sich um Erweiterungen des Pakets 'nn' handelt, sieht es viel sauberer und verständlicher aus, sie in denselben Namensraum zu stellen. Dies deutet auch darauf hin, dass sie kompatibel sind und alle Erweiterungen von nn.Module sind. – Joost

+0

Siehe https://github.com/Element-Research/dpnn/blob/master/Inception.lua#L18 Grundsätzlich 'module, parent = fackel.class ('nn.ModuleName', 'nn.Parent')' – Joost