This is due by 11.55 pm on November 8, 2020. For each additional day after Nov 8th until Nov 10th, there will be a 10% reduction in marks. The submission portal on Moodle will close at 11.55 pm on Nov 10th.
This assignment will familiarize you with training and evaluating feedforward neural networks. You will work on a regression task where you will have to predict the release year of a song from a set of timbre-based audio features extracted from the song. This consists of a year range between 1922 to 2011. (More details about this corpus are available here.) Click here to download the training, development and test sets from Kaggle.
- The dataset contains three files
train.csv
,dev.csv
, andtest.csv
- Each row in the
__.csv
file contains timbre-based audio features extracted from a song. - The dataset has 90 features: 12 timbre average values and 78 timbre covariance values. Each column denotes a feature.
train.csv
anddev.csv
contains following columns:
1. label - Year of release of the song in the range [1922, 2011]
2. TimbreAvg1
3. TimbreAvg2
.
.
13. TimbreAvg12
14. TimbreCovariance1
15. TimbreCovariance2
.
.
91. TimbreCovariance78
test.csv
contains same features exceptlabel
In Part 1, you will implement the neural network, train it using train data and report its performance on dev data.
Implement the functions definitions given in nn.py to create and train a neural network. Run mini-batch gradient descent on Mean Squared Error (MSE) loss function.
For both Part 1.A and Part 1.B, use fixed values of following hyper-parameters:
- Number of epochs: 50
- Batch size for training: 128
- Seed for numpy: 42
- Use ReLU activation function for all HIDDEN layers.
Initialize Weights and Biases using uniform distribution in the range [-1, 1].
For Part 1.A, only code needs to be submitted in the file nn_1.py
.
Report Root Mean Squared Error (RMSE) on training and dev data using following hyper-parameter configurations.
Learning Rate | No. of hidden layers | Size of each hidden layer | λ(regulariser) | RMSE(train) | RMSE(dev) |
---|---|---|---|---|---|
0.001 | 1 | 64 | 0 | ||
0.001 | 1 | 64 | 5 | ||
0.001 | 1 | 128 | 0 | ||
0.001 | 1 | 128 | 5 | ||
0.001 | 2 | 64 | 0 | ||
0.001 | 2 | 64 | 5 | ||
0.001 | 2 | 128 | 0 | ||
0.001 | 2 | 128 | 5 | ||
0.01 | 1 | 64 | 0 | ||
0.01 | 1 | 64 | 5 | ||
0.01 | 1 | 128 | 0 | ||
0.01 | 1 | 128 | 5 | ||
0.01 | 2 | 64 | 0 | ||
0.01 | 2 | 64 | 5 | ||
0.01 | 2 | 128 | 0 | ||
0.01 | 2 | 128 | 5 |
Fill the table in part_1b.csv
file given in this repository.
In Part 2, you will evaluate your network's performance on test data given in test.csv
.
In this part, there is no restriction on any hyper-parameter values. You are also allowed to explore various hyper-parameter tuning and cross-validation techniques.
You are also free to create any wrapper functions over given functinos in nn.py
Submit your predictions on test data on Kaggle competition in a <roll_number>.csv
file in the following format:
Id,Predictions
1.0,2000.0
2.0,2000.0
3.0,2000.0
.
.
10000.0,2000.0
In a CSV file, write the name of the hyper-parameter and the value you used.
For example:
Name | Value |
---|---|
learning_rate |
0.003 |
batch_size |
48 |
dropout |
0.15 |
You can explore following techniques to get better generalization performance