Git Product home page Git Product logo

flux.jl's Introduction

Build Status DOI

Flux is an elegant approach to machine learning. It's a 100% pure-Julia stack, and provides lightweight abstractions on top of Julia's native GPU and AD support. Flux makes the easy things easy while remaining fully hackable.

julia> Pkg.add("Flux")

See the documentation or the model zoo for examples.

If you use Flux in research, please cite the following paper:

@article{innes:2018,
  author    = {Mike Innes},
  title     = {Flux: Elegant Machine Learning with Julia},
  journal   = {Journal of Open Source Software},
  year      = {2018},
  doi       = {10.21105/joss.00602},
}

Features

Flux has powerful high-level features, and common architectures can be defined in a few lines.

model = Chain(
  Dense(768, 128),
  LSTM(128, 256)
  LSTM(256, 128)
  Dense(128, 10),
  softmax)

loss(x, y) = crossentropy(model(x), y)

Flux.train!(loss, data, ADAM(...))

Yet you can easily strip away the layers, and directly write the mathematics for your problem. Flux will seamlessly take gradients of any Julia code, so your model looks just like the paper.

W = param(randn(2, 10))
b = param(randn(2))

y(x) = σ.(W * x .+ b)

If that's still not enough, you can go as deep as you want, even writing your own CUDA kernels with CUDAnative! All this can be freely mixed-and-matched in a single model or script, and it all runs interactively via Jupyter or Juno.

function gpu_add(a, b, c)
  i = (blockIdx().x-1) * blockDim().x + threadIdx().x
  c[i] = a[i] + b[i]
  return nothing
end

Unusual architectures are no problem in Flux, as you can use all the loops, control flow and even macros that you're used to. Here's a Tree RNN in 4 lines.

tree() = rand() < 0.5 ? rand(10) : (tree(), tree()) # dummy data

shrink = Dense(20, 10)
combine(a, b) = shrink([a; b])

model(x) = x
model(x::Tuple) = combine(model(x[1]), model(x[2]))

model(tree()) # Sample output

Despite this flexibility, Julia's advanced compiler lets us do some powerful optimisations. For example, this definition of sigmoid automatically gets fused into a single GPU kernel – so it's really fast.

sigmoid(xs) = 1 ./ (1 .+ exp.(.-xs))

Similarly, Flux is the first dynamic framework to support compiling to the browser and model import via formats like ONNX, both of which are thinly-veiled compiler problems.

For more on our philosophy on machine learning, check out our article On Machine Learning & Programming Languages.

Contributing & Help

For general questions and help, check out Julia's community forum.

Flux development is carried out via our GitHub issues, so feel free to open feature requests or PRs here.

For more informal discussions we'd love to have you on the Julia slack, where we hang out on the #machine-learning channel.

Related Packages

Check out Metalhead.jl for common computer vision datasets and trained models.

MLDatasets.jl provides further common datasets.

flux.jl's People

Contributors

mikeinnes avatar alha02 avatar iblislin avatar gustafsson avatar carlolucibello avatar marekdedic avatar ylxdzsw avatar staticfloat avatar baggepinnen avatar chengchingwen avatar boathit avatar safnuk avatar freeboson avatar tkelman avatar jessebett avatar mkborregaard avatar pevnak avatar americast avatar jonathanbieler avatar jobjob avatar kleinschmidt avatar schmrlng avatar oxinabox avatar mtikekar avatar peterjdolan avatar renato-zannon avatar rdeits avatar gitter-badger avatar ranjanan avatar skariel avatar

Watchers

James Cloos avatar

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.