/neuralnets-keras-intro

An introduction to creating neural nets using the Keras library.

Primary LanguagePython

Neural Networks w/ Keras and Tensorflow

Introduction

In this assignment, you will be using Keras, an open source Python library that provides a common wrapper for several popular neural network libraries including Theano, TensorFlow and CNTK. We will be using TensorFlow as our back end.

Getting Started

First Example - Pima Indians

I strongly recommend working through this tutorial to get started. This tutorial corresponds with the following files in this repo:

  • diabetes.py
  • pima-indians-diabetes.csv

Second Example - MNIST

Additionally, look at this following second example in the repo, which is loosely based on the following tutorial:

  • mnist.py

Comparison between the examples

There is A LOT in tensorflow and keras, so it is easy to get overwhelmed here. Instead of focusing on all of this new code, let's think about the similarities between the two examples:

  1. they both load in a dataset
    • MNIST additionally splits the dataset into a training and testing portion
  2. they both define a "sequential" (feed-forward) neural network model
    • they both define the number of input units, hidden units, and output units
    • Pima Indians has a boolean target
    • MNIST has a 0-9 classification target, so "softmax" is used
  3. they both "compile" the model
    • Pima Indians uses "binary_crossentropy" because the target attribute has > 2 classes
    • MNIST uses "catagorial_crossentropy" because the target attribute has > 2 classes
  4. they both "fit" the model (this is where the neural network tries to learn the optimal weights based on the training data)
  5. they both use the learned model to evaluate/predict classes on data

Installing Necessary Python Libraries

Download the starter code and dataset for this assignment, and configure PyCharm as you have done for the previous programming assignments in this course. Make sure your Python Interpreter is set to Python 3.8

In addition, you will probably need to install these libraries into your project. Fortunately, PyCharm makes this very easy:

  • Go to (PyCharm Preferences > Python Interpreter). At the bottom of the window is a +, for adding a library to the project. Add the following libraries:
  1. numpy
  2. keras
  3. tensorflow
  4. matplotlib

Dataset

In this programming assignment, we will be experimenting with the "classic" Wine dataset from the UCI Machine Learning Repository.

The wine dataset has 14 fields. The first is the class/target label – this is what you should be trying to learn/predict using the other 13 fields. The 13 fields represent a chemical analysis of different wines from a region in Italy. The wines are from 3 different cultivars and these cultivars are what you’re trying to identify.

I have already downloaded the dataset for you and have commit it to this starting repo. Do not modify either of these two csv files in any way.

  • wine_training.csv
  • wine_testing.csv

What to code

Your goal is to complete the train_model() function in the wine.py file. This is most likely the only place where you'll be coding.

After you complete the method, when you run the entire wine.py file (notice the "main" method at the bottom), two functions are run:

  1. Your train_model() function which must return your compiled and fitted Keras model object, ready for testing.
  2. The eval_model() function which uses the learned model against an unseen test set

Input file: You must read the input file as wine_training.csv. (Remember, don't hard code any absolute paths!) There's an easy way to read in csv data. Look up how to do it.

Network structure:

You may use any number of hidden layers of any type (though I’d recommend sticking with "Dense") with any activation method and with any number of neurons that you wish. However, your output layer must be a softmax layer. Softmax layers have a neuron for each possible output category and the activations of the neurons sum to 1. Each neuron’s activation level can be viewed as the probability that the input corresponds to that particular class.

Exploration:

Experiment! You should obviously play with network structures but you should also experiment with training and testing. The model.evaluate method uses the input data and calculates loss and accuracy and any other metrics that you compiled. This is different than the model.predict method which will actually take inputs and predict the categories for those inputs. You can also experiment with validation sets or you can code your own k-fold cross-validation if you are curious about that.

Autograding / Testing

Anything that predicts 90% or higher on the held-out test set will be awarded full credit for performance in CSC575. (The bar is 80% in CSC481.)

The autotesting code is contained in neuralnet_tester.py.

Specifically, points are awarded for the following levels:

CSC481 CSC575
>= 60% 15 points 15 points
>= 70% 15 points 15 points
>= 80% 15 points 15 points
>= 90% 15 points
Max Points 45 / 45 60 / 60

Submission Instructions

Submit this assignment by pushing/committing into our GitHub organization, exactly like HW 0. Test your project locally using pytest before pushing/committing. You may push/commit multiple times. Look at the Actions report on the repository to double check the most recent result of the unit tests.