2017-11-29 4 views
0

私は私のモデルでは、以下のコンポーネントを持っている:私は私のモデルを印刷するときModuleListの各モジュールに名前を付けるにはどうすればよいですか?

feedfnn = [] 
for task_name, num_class in self.tasks: 
    if self.config.nonlinear_fc: 
     ffnn = nn.Sequential(OrderedDict([ 
      ('dropout1', nn.Dropout(self.config.dropout_fc)), 
      ('dense1', nn.Linear(self.config.nhid * self.num_directions * 8, self.config.fc_dim)), 
      ('tanh', nn.Tanh()), 
      ('dropout2', nn.Dropout(self.config.dropout_fc)), 
      ('dense2', nn.Linear(self.config.fc_dim, self.config.fc_dim)), 
      ('tanh', nn.Tanh()), 
      ('dropout3', nn.Dropout(self.config.dropout_fc)), 
      ('dense3', nn.Linear(self.config.fc_dim, num_class)) 
     ])) 
    else: 
     ffnn = nn.Sequential(OrderedDict([ 
      ('dropout1', nn.Dropout(self.config.dropout_fc)), 
      ('dense1', nn.Linear(self.config.nhid * self.num_directions * 8, self.config.fc_dim)), 
      ('dropout2', nn.Dropout(self.config.dropout_fc)), 
      ('dense2', nn.Linear(self.config.fc_dim, self.config.fc_dim)), 
      ('dropout3', nn.Dropout(self.config.dropout_fc)), 
      ('dense3', nn.Linear(self.config.fc_dim, num_class)) 
     ])) 
    feedfnn.append(ffnn) 
self.ffnn = nn.ModuleList(feedfnn) 

、私は上記のような構成要素の説明を取得:

(ffnn): ModuleList (
(0): Sequential (
    (dropout1): Dropout (p = 0) 
    (dense1): Linear (4096 -> 512) 
    (dropout2): Dropout (p = 0) 
    (dense2): Linear (512 -> 512) 
    (dropout3): Dropout (p = 0) 
    (dense3): Linear (512 -> 2) 
) 
(1): Sequential (
    (dropout1): Dropout (p = 0) 
    (dense1): Linear (4096 -> 512) 
    (dropout2): Dropout (p = 0) 
    (dense2): Linear (512 -> 512) 
    (dropout3): Dropout (p = 0) 
    (dense3): Linear (512 -> 3) 
) 
(2): Sequential (
    (dropout1): Dropout (p = 0) 
    (dense1): Linear (4096 -> 512) 
    (dropout2): Dropout (p = 0) 
    (dense2): Linear (512 -> 512) 
    (dropout3): Dropout (p = 0) 
    (dense3): Linear (512 -> 3) 
) 
) 

私は(task1): Sequentialのように特定の名前を置くことができ、 の代わりに(0): Sequential,(1): Sequential

+0

公開されているhttps://github.com/pytorch/pytorch/issues/3499のようです –

答えて

0

これは簡単です。

空の数字のModuleListから始めて、add_moduleを入力してください。たとえば、

import torch.nn as nn 
from collections import OrderedDict 

final_module_list = nn.ModuleList() 

a_sequential_module_with_names = nn.Sequential(OrderedDict([ 
     ('dropout1', nn.Dropout(0.1)), 
     ('dense1', nn.Linear(10, 10)), 
     ('tanh', nn.Tanh()), 
     ('dropout2', nn.Dropout(0.1)), 
     ('dense2', nn.Linear(10, 10)), 
     ('tanh', nn.Tanh()), 
     ('dropout3', nn.Dropout(0.1)), 
     ('dense3', nn.Linear(10, 10))])) 

final_module_list.add_module('Stage 1', a_sequential_module_with_names) 
final_module_list.add_module('Stage 2', a_sequential_module_with_names) 
etc. 
関連する問題