Showing posts from November, 2010

Matlab weirdness: Creating Logical Arrays and Accessing Sparse Matrices

While trying out the new Constrained Parametric Min Cuts code, I came across some Matlab weirdness.
The first situation was this:
Given a huge sparse matrix X and some row and column indices r and c, I wanted to pick out these elements.
As usual, I called
ind=sub2ind(size(X),r,c) Y=X(ind) ... and got an out of memory error.
That seemed a little weired, since "ind" wasn't that long.
It seemed to me as if the matrix is converted into a full (=dense) matrix before the linear indexing took place.
After quite some thinking and searching on the web, I came across a post about the same problem.
Apparently the "correct" solution to my problem is:
[I J x]=find(X); [tf loc]= ismember([r(:) c(:)],[I J],'rows'); Y = zeros(size(tf)); Y(tf) = x(loc(tf)); why this is so, I have no idea. Maybe someone can clear this up for me.

The next thing that really puzzled me was this:
At some point in the code, a large logical array has to be generated.
This was done with zeros().

Segmentation via Constrained Parametric Min Cuts

Joao Carreira and Cristian Sminchisescureleased code for their price-winning "Constrained Parametric Min-Cuts for Automatic Object Segmentation" paper - apparently a month ago by I guess I oversaw it so far.
It's Matlab code and uses may other publicly available libraries, which are all included in their download.
The code is not (yet) compatible with the 32bit (Student) version of Matlab but if Joao includes my patch that shouldn't be a problem. I tested it under Ubuntu with the Student Matlab version on a computer with 12gb Ram and Core i-7 and also on my laptop with 2gb Ram and Core i-5.
This will be a very useful tool for everyone working in object segmentation and I am quite excited about this release :)

Restricted Boltzmann Machine on CUDA with Python

As promised, my group recently published our Restricted Boltzmann Machine implementation.
It is based upon the CUV Library that is being developed here.
The idea is to combine the ease of programming of Python with the computing power of the GPU.

We used this implementation for several papers and it grew a lot over time.
Here is a list of most of the features:
Restricted Boltzmann Machine TrainingWith n-step Contrastive DivergenceWith persistent Contrastive DivergenceWeight decay, momentum, batch-learningBinary or gaussian visible nodesRestricted Boltzmann Machine EvaluationSampling from the modelVisualizing FiltersAnnealed Importance Sampling for approximating the partition functionCalculating the partition function exactlyVisualization and saving of hidden representationsStacking RBMs to Deep Belief NetworksSampling from DBNsDeep Boltzmann Machine TrainingWith n-step Contrastive DivergenceWith persistent Contrastive DivergenceDeep Boltzmann Machine EvaluationSampling from the modelNe…

Machine Learning Toolkits

Wow. So much to read today.
While following link upon link, I found so many great toolkits that I think it is worth listing them here.
One of the greatest sources was the GNU/Linux AI & Alife HOWTO.

[edit] It's been a while since I wrote this blog post but still many people seem to find it, so here a quick update. After looking into many libraries, I started using scikit-learn and then using it exclusively. Now I am a regular contributor. It is a fast growing project with great documentation resources, many algorithms and it is just so easy to use. Also, working with Python and the Python crowd is fun. I heartly recommend it. [/edit]

Here goes:
Vowpal Wabbit - project on very fast online gradient descent by Yahoo research (C++)VFML (Very Fast Machine Learning) - library for very fast decision trees and Bayes networks (C++)Stochastic Gradient Descent - library for SVMs with stochastic gradient descent (C++)Maximum Entropy Modeling Toolkit for Python and C++ - the name says it al…

Can Spamfilters Play Chess?

Apparently, they can!
Using just a naive Bayesian classifier and simple features, it is possible to play chess.
Who would have thought?


Today I stumbled upon metaoptimize.
I am always looking for new blogs/communities/forums an this one seems very active and very in-depth.
There is a stackoverflow like Q&A section with many many questions and comments on many machine learning topics.
There is a lot on probabilistic modeling there which I find particularly interesting. I haven't seen any other community like this.

The reason I found this community is actually that this blog was linked from there :)
There is a thread on machine learning blogs that gives many more than I was aware of...
I did not have the time to look into all of them but I will definitely try and follow them all :)