diff --git a/notebooks/01_Introduction.ipynb b/notebooks/01_Introduction.ipynb index d0d35b9..1a7493e 100644 --- a/notebooks/01_Introduction.ipynb +++ b/notebooks/01_Introduction.ipynb @@ -138,37 +138,11 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "scrolled": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hello world!\n", - "Hello again!\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Alarming hello!\n" - ] - }, - { - "data": { - "text/plain": [ - "'And again!'" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from __future__ import print_function\n", "import sys\n", @@ -231,26 +205,13 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "nbpresent": { "id": "2bced39d-ae3a-4603-ac94-fbb6a6283a96" } }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# use the matplotlib magic to specify to display plots inline in the notebook\n", "%matplotlib inline\n", @@ -306,52 +267,13 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "nbpresent": { "id": "978c1095-a9ce-4626-a113-e0be5fe51ecb" } }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHsAAAB7CAYAAABUx/9/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAEIElEQVR4nO2dvS8sURiHd69bUagkWoWCqER8NETUohIiUSGRSAR/gEZC6yMS4qtCR6LQKEQlOjQK0RAf0VEoNG632fdNdsfetePM/p6nml+OzB6enD3eM2dm0l9fXynQ4M9vdwDiA9lCIFsIZAuBbCGQLcTfiHbqsuSRztXAyBYC2UIgWwhkC4FsIZAtBLKFQLYQyBYC2UIgWwhkC4FsIZAtBLKFQLYQyBYC2UIgWwhkC4FsIZAtBLKFQLYQyBYC2UJE3f4jwefnp8nn5+cmn5ycmLy9vW3yy8uLyc3NzSbv7++bXF9f/1/9LBZGthDIFgLZQqQjnpZUlrfsbm5umry2tmby5eWlyf5vlE6nC2ofGBgweXd39/udLRxu2QVkS4FsIcqmzo6qlaenpzPHV1dXpq2ystLkzs5OkxcWFkxua2szeXl5OednpVKp1PPzc65uxwojWwhkC4FsIcqmzvbz5szMjMnZv6dfu15dXTW5tbW1oM+uqKgw2dfZ/n+Cu7s7k2tqagr6vAioswHZUiBbiMTU2b6OnpiYMHlra8tkP28ODg5mjjc2Nkybn1M9Dw8PJvs6O+ptDC0tLSZXVVXl/flSwcgWAtlCIFuIxNTZY2NjJu/s7Jjc29tr8tDQkMn9/f05z/3x8WHy0tKSySsrKya/vr6aHHU9++bmxuQS70GjzgZkS4FsIYKds6empkz2a9+1tbUmPz095T1fdp3ur3V3d3ebXOges7q6OpP39vZMLnStvUiYswHZUgS7XHp9fW2y/+ocGRkx+fj4OO/5ZmdnM8d+q7A/t88e3+77GrX8+lswsoVAthDIFiKYOdtfwnx/fzfZlz/z8/N52/OVT75s87fcerq6ukxeX183OdQ52sPIFgLZQiBbiGCWS9/e3kxubGw02c+rUUuafrvwwcFB5nhyctK0HR0d5T13zJcoi4XlUkC2FMgWIpg6u7q62uTHx8cfPX/2/wQXFxemzc/3i4uLJgc+R38bRrYQyBYC2UIEM2eXmp6ensyx3wo8Ojpq8vj4eCx9ihtGthDIFgLZQgSzNl4sfm29oaHB5Oy19b6+PtN2eHhYuo7FD2vjgGwpkC1E2dTZfi+4r6Wzr1HPzc3F0qfQYGQLgWwhkC1EYufs29tbk6Nuu83e693U1FS6jgUMI1sIZAuBbCESM2f7fWPDw8Mm+zn69PTUZP8qCEUY2UIgWwhkC5GYOdu/UtG/esE/nso/9hkY2VIgW4hgv8b917Z/G70vtfxTBZPy6Is4YWQLgWwhkC1EMFuJ7+/vTW5vbzfZv6n27OzMZJZDM7CVGJAtBbKFCKbO9rfv+K3A/u0/HR0dJe9TucHIFgLZQiBbiGDqbPgxqLMB2VIgW4ioOjv/O48gUTCyhUC2EMgWAtlCIFsIZAvxD/qZFpZUkkmyAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Image target: [9]\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHsAAAB7CAYAAABUx/9/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAEhUlEQVR4nO2dzSt8XwDGz+jrpSjMQojIy1bykqwURYqUjYUFNmLBgv/APyFZKIqNjaQoKREhsvGysbDxuvFW3pLv7n7vc37N3PEbd8x4ns/qPJ2Zc48+zpzOmXvPBD4/P43gIOmnOyBih2QTIdlESDYRkk2EZBPxx6Ne67LEIxCqQiObCMkmQrKJkGwiJJsIySZCsomQbCIkmwjJJkKyiZBsIiSbCMkmQrKJkGwiJJsIySZCsomQbCIkmwjJJsLrVuJfyc3NDeTl5eWwr29ra4McDAa/vU+xQCObCMkmQrKJ8HXOLikpccoHBwdQl5WV5eel/8PR0ZFTrq2thbrX19ew783OzoY8NTUFub29PcrexQaNbCIkmwjJJiLgcVpSVI/sJiX9+186PDyEuoqKimia9sSeh6uqqpzyyckJ1OXm5kK+vr4O27b77zLGmL29PciVlZUR99MH9MiukGwqJJuImO2Nb2xsQPZ7zr68vIR8enrqlHt7e6FufHwc8vz8POT+/n7ILy8vkG9vb/9vN2OKRjYRkk2EZBMRszk7PT09VpcyxhhzdnYW8WtTUlIgd3d3Q354eIA8OjoK2V6n29h7Gfv7+5Df39+dcn19ffjORoFGNhGSTYRkE+Hr3nhqaqpTPj4+hrrS0tJomvbk6ekJcnFxsVMuLy+Huq2tLciBQMjtZWOMMRcXF5Dz8/PDvv75+Rmy/be7v+v3mv8jQHvjQrKpkGwifF1n9/T0OGW/52ibtLQ0yO618s7ODtTZ++j2HPzx8QE5OTkZ8vb2NuSVlRXIc3NzkDMyMiB/wzwdERrZREg2EZJNhK/rbPd9YO4190/gvrd7aWkJ6gYGBiDn5eVBnpmZgfyVfXdjjCksLIS8vr4Ouaio6EvteaB1tpBsKnxdev30R7ebsrKykHUTExNfaqumpgZyXV0d5Orqasitra2Qc3JyvnS970IjmwjJJkKyifg1x2ycn59DHh4ehry4uOiUvX4gvqurC/LY2Bhk+yvSREEjmwjJJkKyifB1u9RPNjc3IXd0dEC+u7uDnJmZGbKt+/t7yLu7u5DtdXOco+1SIdlUSDYRCbPOtr9WtI+jsm8dXlhYgNzS0uKUJycnoW5oaOg7uhj3aGQTIdlESDYRCTNnDw4OQnY/5mqMMaurq5AbGhpCtvX29hb2Wj/1fbPfaGQTIdlESDYRcTtn24/F2vvVIyMjkMPN0TbT09OQm5ubIRcUFETcViKhkU2EZBMh2UTE7Zzt/pkHY4x5fHyEvLa2BrmpqQmyfcSk+zFa+zjs2dlZyF7HbCQqGtlESDYRkk1E3M7ZXthHWzQ2Nkb8XvfxH8YY09nZ+S19inc0somQbCIkm4i4vW/cXlf39fVBtu8xs39+yX18pf1+e1/dPoI6wdF940KyqZBsIuJ2zvbi6uoKsj3vBoPBWHYnntCcLSSbioT9GBch0ce4kGwqJJsIySZCsomQbCIkmwjJJkKyiZBsIiSbCMkmQrKJkGwiJJsIr8d/fuezq6RoZBMh2URINhGSTYRkEyHZRPwFDfX8wxWlSWcAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Image target: [8]\n" - ] - } - ], + "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", @@ -373,7 +295,10 @@ " which_set='valid', batch_size=1, max_num_batches=2, shuffle_order=True)\n", "\n", "for inputs, target in mnist_dp:\n", - " show_single_image(inputs.reshape((28, 28)))\n", + " # The reshape operation reorganizes data from 1D array of size 784 to 2D array of size 28x28\n", + " # See notes in the next cell\n", + " square_inputs = inputs.reshape((28, 28))\n", + " show_single_image(square_inputs)\n", " print('Image target: {0}'.format(target))" ] }, @@ -394,7 +319,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -417,7 +342,7 @@ "\n", "`MNISTDataProvider` as `targets` currently returns a vector of integers, each element in this vector represents an the integer ID of the class the corresponding data-point represents. \n", "\n", - "For training of neural networks a 1-of-K representation of multi-class targets is more useful. Instead of representing class identity by an integer ID, for each data point a vector of length equal to the number of classes is created, will all elements zero except for the element corresponding to the class ID. \n", + "It is easier to train neural networks using a 1-of-K representation of multi-class targets. Instead of representing class identity by an integer, each target is replaced by a vector of length equal to teh number of classes whose values are zero everywhere except on the index corresponding to the class.\n", "\n", "For instance, given a batch of 5 integer targets `[2, 2, 0, 1, 0]` and assuming there are 3 different classes \n", "the corresponding 1-of-K encoded targets would be\n", @@ -444,9 +369,10 @@ " which_set='valid', batch_size=5, max_num_batches=5, shuffle_order=False)\n", "\n", "for inputs, targets in mnist_dp:\n", + " # Check that values are either 0 or 1\n", + " assert np.all(np.logical_or(targets == 0., targets == 1.))\n", + " # Check that there is exactly a single 1\n", " assert np.all(targets.sum(-1) == 1.)\n", - " assert np.all(targets >= 0.)\n", - " assert np.all(targets <= 1.)\n", " print(targets)" ] }, @@ -463,7 +389,7 @@ "\n", "Here you will write your own data provider `MetOfficeDataProvider` that wraps [weather data for south Scotland](http://www.metoffice.gov.uk/hadobs/hadukp/data/daily/HadSSP_daily_qc.txt). A previous version of this data has been stored in `data` directory for your convenience and skeleton code for the class provided in `mlp/data_providers.py`.\n", "\n", - "The data is organised in the text file as a table, with the first two columns indexing the year and month of the readings and the following 31 columns giving daily precipitation values for the corresponding month. As not all months have 31 days some of entries correspond to non-existing days. These values are indicated by a non-physical value of `-99.9`.\n", + "The data is organised in the text file as a table, with the first two columns indexing the year and month of the readings and the following 31 columns giving daily precipitation values for the corresponding month. As not all months have 31 days some of the entries correspond to non-existing days. These values are indicated by a non-physical value of `-99.9`.\n", "\n", " * You should read all of the data from the file ([`np.loadtxt`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html) may be useful for this) and then filter out the `-99.9` values and collapse the table to a one-dimensional array corresponding to a sequence of daily measurements for the whole period data is available for. [NumPy's boolean indexing feature](http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays) could be helpful here.\n", " * A common initial preprocessing step in machine learning tasks is to normalise data so that it has zero mean and a standard deviation of one. Normalise the data sequence so that its overall mean is zero and standard deviation one.\n", @@ -472,7 +398,7 @@ " [1, 2], 3\n", " [4, 5], 6\n", " ```\n", - " * **Extension**: Have the data provider instead overlapping windows of the sequence so that more training data instances are produced. For example for the sequence `[1, 2, 3, 4, 5, 6]` the corresponding `input, target` pairs would be\n", + " * **Extension**: The current data provider only produces `len(data)/window_size` sample points. A better approach is to have it return overlapping windows of the sequence so that more training data instances are produced. For example for the sequence `[1, 2, 3, 4, 5, 6]` the corresponding `input, target` pairs would be\n", "\n", "```\n", "[1, 2], 3\n", @@ -489,7 +415,8 @@ "metadata": { "nbpresent": { "id": "c8553a56-9f25-4198-8a1a-d7e9572b4382" - } + }, + "scrolled": false }, "outputs": [], "source": [ @@ -529,7 +456,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.9.7" } }, "nbformat": 4,