Neural Networks

Don, Eric and I continued to work on the Interesting Flicker Image project for this week. After some python frustrations, we decided to try another approach. We moved over to Processing, which not only allowed us to build a more pleasing UI for our software, but also circumvented the incestuous network of dysfunctional python dependancies.

We took a look at some of Dan Shiffman’s neural network examples and libraries, particularly his optical character recognition example. We modified the code to read 8 bit grayscale rather than 1 bit binary in order to increase the accuracy of the neural network by providing it with more visual information. We increased the number of hidden layers utilized by the network and increased the number of iterations of the training procedure. This, of course, adds to the compute time, but is key to obtaining any semblance of accuracy in our image recognition process. In addition, we built a streamlined UI that includes a file loader dialog box (a real oddity in the world of Processing!), added buttons and so forth.

Our program uses a feed-forward neural network model. At start-up, a splash screen displays the 36 “interesting” images on which the network is about to be trained. The user clicks through to initialize the training process. We’re using 5625 input nodes and 36 hidden layers. According to wikipedia, the average brain has 10^11 neurons, which is roughly equivalent to 10^11 books stacked on top of each other. Once the training process is complete, the user can choose to show the network one of the previously trained “interesting” images, a trained “uninteresting” image or choose an untrained image of their own. When the user inputs an image of their own, the program automatically crops and resizes the image to the software’s preferred dimension of 75×75.

The final output of the system is value from 0 to 100, which corresponds to the system’s assessment of how interesting an image is. While it is somewhat difficult to determine the validity of these results, we are able to see whether the software is able to match an image with an identical or nearly identical one. The software is relatively accurate in this task and we are therefore operating on the assumption that its ability to identify already trained images should translate to its comprehension of untrained images. The validity of this assumption is certainly debatable, yet largely untestable. Neural networks are endlessly interesting, but also mysterious and often frustrating.

  1. No comments yet.
(will not be published)