Comments (2)
Thanks for the FR! In Haiku we don't special case __call__
(or other methods) meaning that module instances don't actually have to be callable. As an example for a VAE you may want a single module that defines def encode(self, x)
and def decode(self, z)
but not __call__
.
It is common for modules to be callable of course, and we have considered adding def __call__(self, *a, **k) -> Any: raise NotImplementedError
to the Module
base class (purely for type hints), however our current thinking is that this is not actually more useful as a type hint than users using Callable[..., Any]
and actually might be harmful (modules that aren't actually callable would pass the static analysis). Another downside IMHO is that we cannot define a calling convention other than *a, **k -> Any
because users can (and do) do anything with their __call__
method.
Using Callable
instead of hk.Module
may have other benefits, for example in most places where you could pass a callable module you could also pass a function. As a concrete example in our Sequential
module we take a list of callables and this means users can pass lambda x: x
or a module instance or a JAX function etc.
We're keen where possible to encourage JAX code to be decoupled from Haiku, we feel that overall this is best for the ecosystem and users will not be locked into a particular way of using JAX by our libraries.
Concretely, if you're thinking about requiring hk.Module
s in your type signatures to, I would suggest instead requiring Callable[..., Any]
and even better define the calling convention you require too: Callable[[jnp.ndarray], jnp.ndarray]
.
from dm-haiku.
I see. What you are saying makes sense in that context.
On my side I am creating a framework on top of Haiku so I have to assume that users will create a generic callable Module
, I guess I need to create a type intersection like this: python/typing#213 (comment)
Thanks!
from dm-haiku.
Related Issues (20)
- More fine-grained mixed-precision configuration HOT 2
- Suggestion: alias `Transformed`(WithState) apply to __call__ HOT 2
- Is there a way to load parameters from Flax model? HOT 2
- Support model examples HOT 7
- Change to jax.interpreters.xla for JAX==0.4.14 HOT 3
- Warning: hk.LayerNorm when used in transformer decoder causes violation of autoregressive property HOT 1
- Reservoir Computing with Haiku
- Efficiency difference in using jax.lax.fori_loop vs looping over identical layers? HOT 2
- Please publish requirements.txt fix to pip
- How to use `apply` with additional parameters? HOT 1
- hk.Conv2DTranspose takes FOREVER to initialize and compile HOT 1
- 0.4.16 timeline HOT 2
- How to export haiku network parameters into Pytorch network?
- Modules got silently "reused" with `hk.vmap` HOT 2
- Wrong gradients in a Haiku network
- Direct Feedback Alignment
- Issue with wheels including docs and examples folder
- `haiku.experimental.flax` is not part of newest pip release HOT 1
- Train multiple hk.nets.MLP with one optimizer HOT 2
- TypeError: 'type' object is not subscriptable HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dm-haiku.