-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Supporting callable functions in instantiate #5869
Description
Is your feature request related to a problem? Please describe.
Continuing discussion from #5854
Callable functions can form a key part of the instantiation pipeline. For example, several functions return object instances, and supporting this would be very useful.
Currently, using monai.networks.nets.resnet.resnet50 to create a model instance, I've to do the following,
model: "$@#_requires_()"
_requires_:
_target_: monai.networks.nets.resnet.resnet50
pretrained: False
n_input_channels: 1
widen_factor: 2
which gets quite hacky because I've to use the _requires_ attribute to do this. I would just expect to do this with a _target_ call (or by having a potential _call_ attribute set)
This can also be useful to several other monai functionality offered in functions such as
monai.optimizers.generate_param_groups # Calling the function to generate param groups during optimizer instantiation
monai.engines.multi_gpu_supervised_trainer.create_multigpu_supervised_evaluator # Instantiating trainer object using this call
Describe the solution you'd like
I would expect _target_ to invoke default behavior. In the case of a function, this would be calling it rather than creating a callable partial function. Creating a partial fn with a _partial_ attribute for instantiate to invoke this behaviour would be very easy.
If the partial fn setting of the instantiate is tied to many workflows, having a _call_ attribute to offer the inverse functionality would also work. But I think it having both functionalities (the ability to call and to create a partial fn) would be a huge plus.
Currently, there is no straightforward way to create instances from fn calls.
Describe alternatives you've considered
Alternative outlined above