如何在循环中调用对象中的所有方法?

2024-06-16 14:46:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个对象有不同的方法,比如SGDAdamAdamax,我可以这样调用它:

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

我怎么能称之为循环中的一切。我有以下算法:

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)

我怎么能用我提到的所有算法来调用train()optim.SGDoptim.Adamoptim.Adamax)?你知道吗


Tags: in算法formodelmodelsoptimoptimizerparameters
2条回答

可以使用^{}获取每个优化器的train属性,然后调用它:

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

还有^{},它做了完全相同的事情,只是稍微改变了语法:

from operator import methodcaller

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

直接枚举优化函数

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)

相关问题 更多 >