2016-04-09 9 views
-2

トーチコードを読むと、 "nn"と "dp"モデルと混乱しました。私は多くのコードでdp(nnなし)しか必要としませんが、なぜnn.methodAを使うことができるのでしょうか?なぜそれを必要とせずにnnを使うことができますか?この方法は、dpnn!で定義されています。 dpnn.methodAとして使用する必要がありますか?コードは次のように実行します。トーチの 'nn'、 'dp'、 'dpnn'モジュールの混乱

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

答えて

2

「DP」は、依存関係として「NN」があり、「NN」が必要です。より具体的には、require 'dp'を呼び出すと、 'dp'のinitスクリプトが実行されます。これはrequire 'dpnn'see)を呼び出します。続いて 'dpnn'のinitスクリプトが実行され、require 'nn'see)が呼び出されます。

さらに、モジュールは同じグローバル名前空間を共有します。つまり、モジュールはabcまたはnnなどを設定できます。多くのモジュールは、 'nn'の名前空間を拡張して特別な機能を追加しています。

+0

ありがとう、どのように 'nn'の名前空間を拡張するには、コードに使用されているキーワードはありますか? – hunter

+0

これは 'nn'パッケージの拡張であるため、同じ名前空間に入れるときれいになり、理解しやすくなります。これは互換性があり、nn.Moduleのすべての拡張です。 – Joost

+0

https://github.com/Element-Research/dpnn/blob/master/Inception.lua#L18 を参照してください。基本的に 'module、parent = torch.class(' nn.ModuleName '、' nn.Parent ')' – Joost