Hacker News new | past | comments | ask | show | jobs | submit login
Keras.js – Run trained Keras models in your browser (github.com/transcranial)
192 points by transcranial on Oct 13, 2016 | hide | past | favorite | 25 comments



This is awesome! Can you describe how you implemented the WebGL ops a bit more? Did you have to write your own convolution kernel with GLSL for example?


Thanks! For WebGL, credit goes to https://github.com/waylonflinn/weblas. I only really use GEMM, but it works quite well. In keras.js, convolution is implemented with the oft-used im2col transformation to turn it into a matrix multiply followed by reshape. Convolution kernels directly GLSL could potentially provide speed gains I'm sure, but I can't even imagine writing it for tensors of arbitrary shape.


Check out the Winograd optimisations used in Nervana's neon - very fast

https://www.nervanasys.com/winograd-2/


They mentioned they used the weblas library/module.

See code for example https://github.com/transcranial/keras-js/blob/master/src/Ten... or code on weblas github repo.


What sort of performance can be expected compared to running in the terminal? How large NNs will this scale to in practice? I see a 50-layer resnet is mentioned; but not 1000-layers?


On these demos, I'm getting several seconds on the imagenet inception v3 recognition on an i7 macbook pro (nvidia gpu), on both gpu and cpu modes.

I've built tensorflow for android, running inceptionv3 trained on imagenet and it's much faster, running just on mobile CPU pretty much realtime, around 5fps. On a desktop CPU/GPU it's obviously even faster


You mean with tensorflow or theano as the backend? They have all kinds of optimizations that isn't possible to replicate here yet. There is certainly room for optimization! Also, 1000-layer resnets should theoretically be possible, but probably isn't that practical. Lots of exciting work happening in searching for more efficient architectures.


1000 layer networks aren't used in practice. 50 layers is enough for state-of-the art performance.


It sounds like inference (prediction) performance is ok (probably < 1 second for images with ResNet50).

I doubt training performance would be very fun.


This is awesome. We're trying to do something similar but moving in the opposite direction language-wise by implementing the models in C++:

https://github.com/dguest/lwtnn

The idea is to have something lightweight that we can easily copy into our analysis framework (which is written in C++).

If anyone reading this knows of a library that already does this it could save us some time.


Wonderful! And because all praise comes with work in OSS: I wish the network diagram would show intermediate states where possible. I've seen some examples where – with the right presentations – they gave fantastic insights into the network's "thinking".


Very cool. Didn't work on Android (Chrome) either in GPU or CPU mode.

Usual tricks like pruning the model and quantising to 8bit should get the model sizes down significantly from 100mb. Or using an architecture like squeezenet


This is cool, especially given how javascript is everywhere. Is it browser specific, or could it run in other javascript environment, like nodejs?


cool but.. >Offload computation entirely to client browsers

i'm not sure that's a big benefit really


They're using pre trained models though, like

https://github.com/heuritech/convnets-keras

I don't think they expect people to train them in the browser, just run the pretrained ones for image recognition or something


Training may not yet be available, but how about inference?


Inference is what this does


I agree. These are very marginal computation costs.

This might have the most value as a Node transport though.


This is great! The network visualizations are also pretty sweet. How are those generated?


Thanks. Nothing fancy with the network architecture diagrams. The layers are just div elements with the layer name as the id. There's a definition of inbound/outbound connections by layer names, extracted from the keras json config, which is used to draw SVG paths.


It does not work on my Firefox (but works on Chrome).


That's realy good stuff!


This has teaching potential.


how to get the demo running? they are just images now.


Thank you thank you! I love you




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: