Wednesday, April 26, 2017

Another Change

Issues

So after working with the python stuff that I had found, I was having a lot of issues. The first of these, and main cause for the second switch that I will be talking on, is that there were a lot of libraries and packages that I could not get to work properly within my IDE. Theano and the packages to read pkl files were the issues I had, if that is a question. 

Along with those issues, I was having issues with Python and drawing within a window in order to get characters.

New Direction

Given these issues, and talking and hearing from Sherri, I decided to go back to Java, but to use the Weka API instead of a Neuroph API. This should give me a much easier way to go about this. 

 Storing Data

I put a bit of time into how I will be storing data for training and testing. After using the pkl files and learning about how they work, I tried to see if there was a way to use the pkl file that was given in the python libraries that I was using, and there is but it is fairly difficult to implement.

Because of the difficulties I was having with that, I decided that I will just save all of the data as a CSV file, with each row being a different image, and the pixel information in order in each "cell" and with what character it is at the end. I will store training and testing data the same way, but in different files that way I can easily tell the difference between the two.

Current Progress

Right now, currently where I am at is programming the GUI in front, because this is a fairly heavy GUI project. My current issue is getting something similar to paint to work for drawing the characters out. I need a bit of work yet, but once I get drawing down I need to build my image library in order to start testing.

Wednesday, April 12, 2017

Post 2 - Digging In

Change of Implementation

So, after digging into Neuroph a little more, I could not get it to build out a network the way that it is supposed to build them out. It would just hang after clicking the finish button, as shown below, even after letting it sit for close to eight hours.



Learning that, and having it hang the way it would, I started searching around for something else to use, and found a really nice introduction to neural nets online, with some example code. This can all be found here, and I will be looking at the code the author posted on GitHub, but not using it myself.

From what I have been looking at there, the author has test data built in to it, and files built up to read in and use the data. I will likely be using this in able to do back propagation on the neural network, and to build up and train the network.


Current Direction

With all of the above in mind, I have decided to implement everything myself rather than using a framework. I will be implementing this all in Python using the IntelliJ platform with Python plugins. Doing this as well also lets me host everything to GitHub, which it will be a private repository for the time being.

This semester, I will be recognizing a single character at a time, rather than whole words or anything such as that. The hope will be to write out a character with a mouse, or touch tablet that I will be using, and have the program return the character that is written. In the future I will probably be expanding this to read whole words or more if the project goes well.

Concerns

At the current time, I am not sure if I have to train the neural network every time I go to test and run the neural network. This could be annoying and a rather large hassle, especially considering there are thousands of test files to take into consideration, so I will be looking into ways to store the network once it is trained. I am thinking about building the network and using a file to store all of the weights and biases, but I am not sure.

Monday, April 10, 2017

Post 1 - Introduction

Neural Network Thoughts

Throughout this semester, I have been reading quite a bit about neural networks, and have been really curious about them. Seeing the things that people have done with them, like voice recognition and replication, as well as image recognition makes them really useful if implemented in the way you want them to be used.

With all of this in mind, I knew I wanted to do something with neural networks. Reading through about neural networks, I decided to try and make my own handwritten text recognition network. Reading through everything, this seems like a good first step to implement. It is challenging enough that it will make me actually learn how neural networks work and perform, while being easy enough that it won't scare me away.

At the moment, I am looking into Neuroph, which is a java framework for Neural Networks. It seems that it is a well built framework for neural networks, and even has its own quick start for handwriting recognition.