**Solution by [Yury Kashnitsky](https://www.kaggle.com/kashnitsky) (@yorko)**\n",
"\n",
"In this exercise we will develop a neural network with fully-connected layers to perform classification, and test it out on the CIFAR-10 dataset."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# A bit of setup\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from cs231n.classifiers.neural_net import TwoLayerNet\n",
"\n",
"%matplotlib inline\n",
"plt.rcParams['figure.figsize'] = (16.0, 12.0) # set default size of plots\n",
"plt.rcParams['image.interpolation'] = 'nearest'\n",
"plt.rcParams['image.cmap'] = 'gray'\n",
"\n",
"# for auto-reloading external modules\n",
"# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n",
"%load_ext autoreload\n",
"%autoreload 2\n",
"\n",
"def rel_error(x, y):\n",
" \"\"\" returns relative error \"\"\"\n",
" return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will use the class `TwoLayerNet` in the file `cs231n/classifiers/neural_net.py` to represent instances of our network. The network parameters are stored in the instance variable `self.params` where keys are string parameter names and values are numpy arrays. Below, we initialize toy data and a toy model that we will use to develop your implementation."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Create a small net and some toy data to check your implementations.\n",
"# Note that we set the random seed for repeatable experiments.\n",
"\n",
"input_size = 4\n",
"hidden_size = 10\n",
"num_classes = 3\n",
"num_inputs = 5\n",
"\n",
"def init_toy_model():\n",
" np.random.seed(0)\n",
" return TwoLayerNet(input_size, hidden_size, num_classes, std=1e-1)\n",
"\n",
"def init_toy_data():\n",
" np.random.seed(1)\n",
" X = 10 * np.random.randn(num_inputs, input_size)\n",
" y = np.array([0, 1, 2, 2, 1])\n",
" return X, y\n",
"\n",
"net = init_toy_model()\n",
"X, y = init_toy_data()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Forward pass: compute scores\n",
"Open the file `cs231n/classifiers/neural_net.py` and look at the method `TwoLayerNet.loss`. This function is very similar to the loss functions you have written for the SVM and Softmax exercises: It takes the data and weights and computes the class scores, the loss, and the gradients on the parameters. \n",
"\n",
"Implement the first part of the forward pass which uses the weights and biases to compute the scores for all inputs."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Your scores:\n",
"[[-0.81233741 -1.27654624 -0.70335995]\n",
" [-0.17129677 -1.18803311 -0.47310444]\n",
" [-0.51590475 -1.01354314 -0.8504215 ]\n",
" [-0.15419291 -0.48629638 -0.52901952]\n",
" [-0.00618733 -0.12435261 -0.15226949]]\n",
"\n",
"correct scores:\n",
"[[-0.81233741 -1.27654624 -0.70335995]\n",
" [-0.17129677 -1.18803311 -0.47310444]\n",
" [-0.51590475 -1.01354314 -0.8504215 ]\n",
" [-0.15419291 -0.48629638 -0.52901952]\n",
" [-0.00618733 -0.12435261 -0.15226949]]\n",
"\n",
"Difference between your scores and correct scores:\n",
"3.6802720496109664e-08\n"
]
}
],
"source": [
"scores = net.loss(X)\n",
"print('Your scores:')\n",
"print(scores)\n",
"print()\n",
"print('correct scores:')\n",
"correct_scores = np.asarray([\n",
" [-0.81233741, -1.27654624, -0.70335995],\n",
" [-0.17129677, -1.18803311, -0.47310444],\n",
" [-0.51590475, -1.01354314, -0.8504215 ],\n",
" [-0.15419291, -0.48629638, -0.52901952],\n",
" [-0.00618733, -0.12435261, -0.15226949]])\n",
"print(correct_scores)\n",
"print()\n",
"\n",
"# The difference should be very small. We get < 1e-7\n",
"print('Difference between your scores and correct scores:')\n",
"print(np.sum(np.abs(scores - correct_scores)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Forward pass: compute loss\n",
"In the same function, implement the second part that computes the data and regularizaion loss."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Difference between your loss and correct loss:\n",
"1.794120407794253e-13\n"
]
}
],
"source": [
"loss, _ = net.loss(X, y, reg=0.05)\n",
"correct_loss = 1.30378789133\n",
"\n",
"# should be very small, we get < 1e-12\n",
"print('Difference between your loss and correct loss:')\n",
"print(np.sum(np.abs(loss - correct_loss)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Backward pass\n",
"Implement the rest of the function. This will compute the gradient of the loss with respect to the variables `W1`, `b1`, `W2`, and `b2`. Now that you (hopefully!) have a correctly implemented forward pass, you can debug your backward pass using a numeric gradient check:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"W2 max relative error: 3.440708e-09\n",
"b2 max relative error: 1.276034e-10\n",
"W1 max relative error: 3.561318e-09\n",
"b1 max relative error: 3.833134e-09\n"
]
}
],
"source": [
"from cs231n.gradient_check import eval_numerical_gradient\n",
"\n",
"# Use numeric gradient checking to check your implementation of the backward pass.\n",
"# If your implementation is correct, the difference between the numeric and\n",
"# analytic gradients should be less than 1e-8 for each of W1, W2, b1, and b2.\n",
"\n",
"loss, grads = net.loss(X, y, reg=0.05)\n",
"\n",
"# these should all be less than 1e-8 or so\n",
"for param_name in grads:\n",
" f = lambda W: net.loss(X, y, reg=0.05)[0]\n",
" param_grad_num = eval_numerical_gradient(f, net.params[param_name], verbose=False)\n",
" print('%s max relative error: %e' % (param_name, rel_error(param_grad_num, grads[param_name])))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Train the network\n",
"To train the network we will use stochastic gradient descent (SGD), similar to the SVM and Softmax classifiers. Look at the function `TwoLayerNet.train` and fill in the missing sections to implement the training procedure. This should be very similar to the training procedure you used for the SVM and Softmax classifiers. You will also have to implement `TwoLayerNet.predict`, as the training process periodically performs prediction to keep track of accuracy over time while the network trains.\n",
"\n",
"Once you have implemented the method, run the code below to train a two-layer network on toy data. You should achieve a training loss less than 0.2."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Final training loss: 0.008116963954598025\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"