Saturday, April 25, 2015

The Clusterflop Project

So I've been working on my honors thesis/University Scholar project since the start of the semester and results have been, well... inconclusive. I've been working with some machine learning algorithms such as artificial neural nets (ANNs) and support vector machines (SVMs) in order to detect facial expressions from EEG data for part of my thesis. The end goal is to make my own API that detects more events and/or more accurately than the original SDK for my Emotiv neuroheadset and to send this data in a JSON format in a client/server format using a TCP socket. There's a bit more to it than that such as using it to improve my previous Mind-Controlled UAV project with blended commands and path-planning, but that's the gist of it.

I've spent the majority of the semester studying up on ANNs and SVMs and just trying to get them to train on a dataset with only blinks without my computer overheating. At one point the CPU cores hit 101 C (yes, hotter than boiling point), 4 degrees away from automatically shutting off. While on spring break -- when I was doing what else but work -- I considered sticking my computer outside since it was running for literally hours to train a single neural net. (It was so cold it actually snowed that week.) 

After hours of waiting and repeatedly receiving poor if not inconclusive results (sometimes ANNs don't converge meaning they don't learn for bad input), I decided R was too slow of a language to use to train my ANN and to instead try some multithreaded Java, which is actually a lot easier than it sounds thanks to the Encog machine learning framework. The Neuroph Java framework I tried before that was not without issues...

Dev 1: "I want an icon for this exception, what should we use?"
Dev 2: "Why not a graphic cartoon of a guy whose brain exploded?"
Dev 1: "Freaking brilliant, Jim."

I only recently gained access to UConn's HORNET cluster after applying several weeks ago, giving me barely 2 weeks before finals to train several ANNs and SVMs. Not only did I have to learn how to actually compile and run Java programs through the terminal since I need to SSH into the cluster, but also how to actually use a cluster properly as in submitting jobs to a queue since this is a shared resource that many professors and grad students use to perform research.

As I type, I'm still waiting for the real neural net results (as in all expressions trained) to come back. I have but a single week until finals, only 9 pages of my thesis written, no results to show, over 2 hours' worth of training for the first neural net on the cluster, and of course, other unfinished coursework. Either I'm going to just barely get this third of the thesis done in time for finals or I'm going to melt down the HORNET cluster in the process.

Let the final countdown begin.

No comments:

Post a Comment