-
-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Taggable functors #41
Comments
Definitely thought about this before. The part I got stuck on was where/how to store this tag metadata. Do you have any proposals there? |
I was thinking that
|
I like the idea of splitting things up. How would e.g. |
Maybe Since it's a weird macro anyway, perhaps it can check for the existence of the simplest method before defining (so as not to over-write). Or some notation like |
In Flux, we have
trainable
to designate a subset of leaves as nodes to walk when updating parameters for training. In FluxPrune.jl, I definedpruneable
to designate a subset of leaves for pruning (note that these cannot be the same as thetrainable
nodes).Right now this creates an unfortunate circumstance as discussed in FluxML/Flux.jl#1946. Users need to
@functor
their types, remember to definetrainable
if necessary. Potentially, to use FluxPrune.jl, they might want to remember to definepruneable
. On the developer side of things, we can use thewalk
keyword offmap
to walk the differently labeled leaf nodes. But this usually requires defining a separate walk function based on the subset that you are hoping to target.An alternative would be to build this information directly into what
@functor
defines. Right now, each child of a functor has a name and a value. I propose adding "tags" which would be a tuple of symbols. Then we could do something likeIdeally, this mechanism should be dynamic, meaning that if Flux.jl already defines the trainable leaves of a type, then another package like FluxPrune.jl should be able to add a pruneable tag on top of that.
My hope is that we make it easier on users by only having one line for making your type Flux-compatible. And we make it easier on developers by making it easy to filter nodes when walking by tag. I haven't spent a lot of time on the implementation aspect, but I just wanted to float the notion of tags first and get some feedback.
The text was updated successfully, but these errors were encountered: