Git Product home page Git Product logo

Comments (3)

danielsuo avatar danielsuo commented on April 27, 2024

We've also found the below module useful. Anyway, won't be offended at all if you guys don't like these; your reactions help us understand the design motivations better and we can always just keep them out of tree.

class Ensemble(nn.Module):
    def apply(self, x, modules, args):
        return [module(x, **arg) for (module, arg) in zip(modules, args)]

from flax.

levskaya avatar levskaya commented on April 27, 2024

So, I've written a ton of combinator / concatenative style NN code both in the original "stax" NN prototype as well as "trax" which also uses combinators for everything. Certainly combinator code ends up being the most concise way to construct NNs, and for straight-through models w. layers taking a single input and single output it's an elegant approach.

The real problem happens w. more complicated dataflow where you start needing to use Parallel combinators (what you call Ensemble there I think) and then start having to worry about nested tuple packing and unpacking or you switch to a stack-based inter-layer convention like traditional point-free "concatenative" languages. The problem with these conventions is that they lead to a "write-only" language - it's easy to make concise code, but the code isn't self-documenting any longer, all the dataflow is hidden from view and requires readers to bounce all over the layer libraries to reason-out what the heck is going on. That's why in flax we avoid such constructs for the most part, we prefer the slightly more explicit argument passing so that it's always clear what data's being passed in a single local read-through.

That said we're not ideological about such things and encourage our users to set up combinators if that's how they want to rig their code. I'm just not sure we want to encourage it by having combinators in-tree based on a lot of personal experience trying to maintain such code.

from flax.

danielsuo avatar danielsuo commented on April 27, 2024

Thank you for the thorough explanation! Makes sense to me. Closing!

from flax.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.