kkjkok
I think the piano keys stuff was because the idea was semi-based around a player's piano (if I recall the legend from my DSP prof). The roll moves around and different bumps make the notes sound - a similar concept (visually at least) to coding a communications signal and having it jump all over frequency. 88 notes -> 88 frequencies. I wouldn't be surprised if the experimental equipment was a modified version of a player's piano. Very cool stuff, though I may be recollecting the story wrong. Wikipedia agrees about the movie star + composer bit at least.
All that aside, the psychology of pure functional vs. pure OOP vs. some hybrid methodology is really interesting, and even the view of what a "clean solution" is becomes tainted based on past experiences with other code written in that style.
The plan is to operate on 32x32 data for now, then try scaling up the input images or just scaling to 512x512 to see how input data size/resolution affects the DeCAF/pylearn2 classification result, either positively or negatively.
As far as network weights, I haven't tried to print/plot the DeCAF weights yet (though there are images in the DeCAF paper itself). For pure pylearn2 networks, there is a neat utility called show_weights.py in pylearn2/scripts.
Another method, which does do "chopping" is http://www.stanford.edu/~acoates/papers/coatesng_nntot2012.p... - which is a little different than what I am currently trying.
https://groups.google.com/forum/#!topic/pylearn-dev/cODL9RXP...
Once again, my 570 is slower than a 580 (about 2x), but "good enough" for now.
http://www.wired.com/wiredenterprise/2013/03/google_hinton/
You can check out the code here - it is really good IMO.
I have found that using a trained net for preprocessing can be accomplished using very limited resources (read: Core 2 Duo laptop). This is one of the very nice features of DeCAF, which could allow for some interesting applications on embedded devices.
Great work by the way - I look forward to testing it out soon!
Github is here:
https://github.com/UCB-ICSI-Vision-Group/decaf-release/
My current code as an example of combining sklearn/pylearn2 with DeCAF preprocessing (under the decaf folder, sklearn usage is under previous commits):
I personally use a GTX570, and it is pretty decent, though not spectacular. Costwise, it is reasonably priced, and "good enough" for most of the networks I have tried (minus ImageNet...)
A key problem is limited GPU memory in the Fermi series, as it is difficult to fit a truly monstrous network on a single card. Krizhevsky's ImageNet work had some very tricky things to spread it across 2 GTX580s, and the training still took a very, very long time.
Practical recommendations for gradient-based training of deep architectures, Y. Bengio
http://arxiv.org/abs/1206.5533
There is a section on weight initialization on page 15. In general, this paper has a lot of good information in one place.