2017-08-02 8 views
1

私はSGDAdamAdamaxのようなさまざまな方法を持っているオブジェクトがあると私はこのようにそれを呼び出すことができます。ループ内のオブジェクト内のすべてのメソッドを呼び出す方法は?

optim.SGD(parameters, lr, momentum=0.9) 
optim.Adam(parameters, lr, momentum=0.9) 
optim.Adamax(parameters, lr, momentum=0.9) 

は、どのように私はサイクルでそれをすべてを呼び出すことができます。私は(optim.SGDoptim.Adamoptim.Adamax)に言及すべてoptimizerのアルゴリズムでtrain()を呼び出すことができますどのように

models = [..., ..., ...] 
lrs = [..., ..., ...] 
criterions = [..., ..., ...] 

for model in models: 
    for criterion in criterions: 
     for lr in lrs: 
      optimizer = optim.SGD(model.params(), lr=lr, momentum=0.9) 
      train(model=model, 
        criterion=criterion, 
        optimizer=optimizer, 
        lr=lr) 

:私は、次のアルゴがありますか?

答えて

0

あなたは、各オプティマイザのtrain属性を取得するためにgetattrを使用することができ、それを呼び出す:

from operator import methodcaller 

... 
methodcaller('train', model=model, 
        criterion=criterion, 
        optimizer=optimizer, 
        lr=lr)(optimizer) 
-1
:も構文のわずかな変化と正確に同じことを行い operator.methodcalllerあります

... 
getattr(optimizer , 'train')(model=model, 
           criterion=criterion, 
           optimizer=optimizer, 
           lr=lr) 

最適化関数を直接列挙する

models = [..., ..., ...] 
lrs = [..., ..., ...] 
criterions = [..., ..., ...] 

optim_funcs = [optim.SGD, optim.Adam, optim.Adamax] 

for model in models: 
    for criterion in criterions: 
     for lr in lrs: 
      for func in optim_funcs: 
       optimizer = func(model.params(), lr=lr, momentum=0.9) 
       train(model=model, 
         criterion=criterion, 
         optimizer=optimizer, 
         lr=lr) 
0

複雑なループを書くときは、itertoolsと同じです。

import itertools 
func = ['SGD', 'Adam', 'Adamax'] 
models = range(5) 
lrs = range(5,10) 
criterions = range(10,15) 
for f,a,b,c in itertools.product(func, models, lrs, criterions): 
    optimizer = getattr(optim,f)(a,b,c) 
    train() 
関連する問題