Allow creating module instances outside hk.transform
See original GitHub issueThis is as much a question as it is a feature request. What is the reasoning for not allowing a module instance from being created (but not used) outside hk.transform
? I took a look at hk.Module
and ModuleMetaClass
but I feared my soul would get harvested by the dark forbidden magic involved before I could identify all the API features it permits.
For example, I would have expected this to be possible:
linear = hk.Linear(10) # currently not allowed
def forward(x):
return linear(x)
model = hk.transform(forward)
Concretely, I’m curious to know what would have to be sacrificed (if anything) to support this kind of usage? Is it meant to prevent a module instance from being used in two different functions wrapped by two different hk.transform
calls?
I wouldn’t be surprised if I were missing some nasty side effect if you were to allow module creation outside of hk.transform
, but, if not, I think it would be more intuitive to allow this kind of usage.
Issue Analytics
- State:
- Created 4 years ago
- Comments:5 (2 by maintainers)
Hello @trevorcai, @tomhennigan. I like a lot out of the box solutions, but I struggle with extending
haiku
at the moment. I need constrained parameters like variance (only positive) for Gaussian distributions. The parameter can be represented as a compositionconstraint: unconstrained_parameter -> bijector.forward(parameter)
, in my code it is a property of the module. A dictionary with a set of parameters contains only unconstrained version, but for tracking and model printing we need constrained values and there is no way to get it because the model instance is hidden in the function.As you can see, a variance value in a parameter dictionary will not have much meaning without information about a transformation that a model uses (could be exp, softplus or another positive bijector).
1. One solution could be to return a model with transformed functions.
2. Another possible (?) solution could be making
hk.transform
a context managerPS: for me, it is a very important issue and a deciding factor on how I’m going to use the library.
That’s good to hear - that’s been my experience as well 😃 I’ll leave this issue open to track this FR.