From 05f826d22d5aab13e258c88da3040ac1d93d3b11 Mon Sep 17 00:00:00 2001 From: Pawel Swietojanski Date: Wed, 7 Oct 2015 01:09:01 +0100 Subject: [PATCH] various fixes --- 00_Introduction.ipynb | 87 +++--------------------------------------- 01_Linear_Models.ipynb | 10 ++--- mlp/dataset.py | 41 ++++++++++++++++---- 3 files changed, 45 insertions(+), 93 deletions(-) diff --git a/00_Introduction.ipynb b/00_Introduction.ipynb index 896e532..925f7ce 100644 --- a/00_Introduction.ipynb +++ b/00_Introduction.ipynb @@ -175,61 +175,12 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "collapsed": false, "scrolled": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[H\u001b[2Jatlas_3_10_blas_info:\n", - " NOT AVAILABLE\n", - "atlas_3_10_blas_threads_info:\n", - " NOT AVAILABLE\n", - "atlas_threads_info:\n", - " libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']\n", - " library_dirs = ['/usr/lib64/atlas']\n", - " define_macros = [('ATLAS_INFO', '\"\\\\\"3.8.4\\\\\"\"')]\n", - " language = f77\n", - " include_dirs = ['/usr/include']\n", - "blas_opt_info:\n", - " libraries = ['ptf77blas', 'ptcblas', 'atlas']\n", - " library_dirs = ['/usr/lib64/atlas']\n", - " define_macros = [('ATLAS_INFO', '\"\\\\\"3.8.4\\\\\"\"')]\n", - " language = c\n", - " include_dirs = ['/usr/include']\n", - "openblas_info:\n", - " NOT AVAILABLE\n", - "atlas_blas_threads_info:\n", - " libraries = ['ptf77blas', 'ptcblas', 'atlas']\n", - " library_dirs = ['/usr/lib64/atlas']\n", - " define_macros = [('ATLAS_INFO', '\"\\\\\"3.8.4\\\\\"\"')]\n", - " language = c\n", - " include_dirs = ['/usr/include']\n", - "lapack_opt_info:\n", - " libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']\n", - " library_dirs = ['/usr/lib64/atlas']\n", - " define_macros = [('ATLAS_INFO', '\"\\\\\"3.8.4\\\\\"\"')]\n", - " language = f77\n", - " include_dirs = ['/usr/include']\n", - "openblas_lapack_info:\n", - " NOT AVAILABLE\n", - "lapack_mkl_info:\n", - " NOT AVAILABLE\n", - "atlas_3_10_threads_info:\n", - " NOT AVAILABLE\n", - "atlas_3_10_info:\n", - " NOT AVAILABLE\n", - "blas_mkl_info:\n", - " NOT AVAILABLE\n", - "mkl_info:\n", - " NOT AVAILABLE\n" - ] - } - ], + "outputs": [], "source": [ "%clear\n", "import numpy\n", @@ -250,26 +201,11 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running matrix-matrix product on 0 core(s)\n", - "1 loops, best of 3: 145 ms per loop\n", - "Running matrix-matrix product on 1 core(s)\n", - "10 loops, best of 3: 140 ms per loop\n", - "Running matrix-matrix product on 2 core(s)\n", - "10 loops, best of 3: 141 ms per loop\n", - "Running matrix-matrix product on 3 core(s)\n", - "10 loops, best of 3: 141 ms per loop\n" - ] - } - ], + "outputs": [], "source": [ "import os\n", "import multiprocessing\n", @@ -297,22 +233,11 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Remove the below line if not running this code in an ipython notebook\n", "# It's a special command allowing the notebook to display plots inline\n", diff --git a/01_Linear_Models.ipynb b/01_Linear_Models.ipynb index 9d398a3..845911b 100644 --- a/01_Linear_Models.ipynb +++ b/01_Linear_Models.ipynb @@ -93,7 +93,7 @@ "w_{21} & w_{22} & w_{23} \\\\\n", "w_{31} & w_{32} & w_{33} \\\\\n", "w_{41} & w_{42} & w_{43} \\\\\n", - "w_{51} & x_{52} & 2_{53} \\\\ \\end{array} \\right]$, bias vector $\\mathbf{b} = (b_1, b_2, b_3)$ and outputs $\\mathbf{y} = (y_1, y_2, y_3)$, one can write the transformation as follows:\n", + "w_{51} & w_{52} & w_{53} \\\\ \\end{array} \\right]$ (note, this picture was taken from the lecture slides and presents a transposed variant), bias vector $\\mathbf{b} = (b_1, b_2, b_3)$ and outputs $\\mathbf{y} = (y_1, y_2, y_3)$, one can write the transformation as follows:\n", "\n", "(for the $i$-th output)\n", "\n", @@ -103,7 +103,7 @@ "\\end{equation}\n", "$\n", "\n", - "or the equivalent vector form (where $\\mathbf w_i$ is the $i$-th column of $\\mathbf W$):\n", + "or the equivalent vector form (where $\\mathbf w_i$ is the $i$-th column of $\\mathbf W$, but note, when we **slice** the $i$th column we will get a **vector** $\\mathbf w_i = (w_{1i}, w_{2i}, w_{3i}, w_{4i}, w_{5i})$, hence the transpose of $\\mathbf w_i$ in the below equation):\n", "\n", "(2) $\n", "\\begin{equation}\n", @@ -237,7 +237,7 @@ "source": [ "## Exercise 2\n", "\n", - "Modify the examples from Exercise 1 to perform **backward** propagation, that is, given $\\mathbf{y}$ (obtained in the previous step) and weight matrix $\\mathbf{W}$, project $\\mathbf{y}$ onto the input space $\\mathbf{x}$ (ignore or set to zero the biases towards $\\mathbf{x}$ in backward pass). Mathematically, we are interested in the following transformation: $\\mathbf{z}=\\mathbf{y}\\mathbf{W}^T$" + "Modify the examples from Exercise 1 to perform **backward** propagation, that is, given $\\mathbf{y}$ (obtained in the previous step) and weight matrix $\\mathbf{W}$, project $\\mathbf{y}$ onto the input space $\\mathbf{x}$ (ignore or set to zero the biases towards $\\mathbf{x}$ in backward pass, and note, we are **not** trying to reconstruct the original $\\mathbf{x}$). Mathematically, we are interested in the following transformation: $\\mathbf{z}=\\mathbf{y}\\mathbf{W}^T$" ] }, { @@ -490,7 +490,7 @@ "source": [ "from mlp.dataset import MetOfficeDataProvider\n", "\n", - "modp = MetOfficeDataProvider(10, batch_size=10, max_num_batches=2, randomize=False)\n", + "modp = MetOfficeDataProvider(10, batch_size=10, max_num_batches=3, randomize=False)\n", "\n", "%precision 2\n", "for x, t in modp:\n", @@ -668,7 +668,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.9" + "version": "2.7.10" } }, "nbformat": 4, diff --git a/mlp/dataset.py b/mlp/dataset.py index 5ca346a..bb7bc8f 100644 --- a/mlp/dataset.py +++ b/mlp/dataset.py @@ -6,6 +6,10 @@ import cPickle import gzip import numpy import os +import logging + + +logger = logging.getLogger(__name__) class DataProvider(object): @@ -65,6 +69,7 @@ class MNISTDataProvider(DataProvider): def __init__(self, dset, batch_size=10, max_num_batches=-1, + max_num_examples=-1, randomize=True): super(MNISTDataProvider, self).\ @@ -78,6 +83,11 @@ class MNISTDataProvider(DataProvider): assert max_num_batches != 0, ( "max_num_batches should be != 0" ) + + if max_num_batches > 0 and max_num_examples > 0: + logger.warning("You have specified both 'max_num_batches' and " \ + "a deprecead 'max_num_examples' arguments. We will " \ + "use the former over the latter.") dset_path = './data/mnist_%s.pkl.gz' % dset assert os.path.isfile(dset_path), ( @@ -88,6 +98,11 @@ class MNISTDataProvider(DataProvider): x, t = cPickle.load(f) self._max_num_batches = max_num_batches + #max_num_examples arg was provided for backward compatibility + #but it maps us to the max_num_batches anyway + if max_num_examples > 0 and max_num_batches < 0: + self._max_num_batches = max_num_examples / self.batch_size + self.x = x self.t = t self.num_classes = 10 @@ -106,9 +121,9 @@ class MNISTDataProvider(DataProvider): return numpy.random.permutation(numpy.arange(0, self.x.shape[0])) def next(self): - + print (self._curr_idx / self.batch_size) has_enough = (self._curr_idx + self.batch_size) <= self.x.shape[0] - presented_max = (0 < self._max_num_batches < (self._curr_idx / self.batch_size)) + presented_max = (0 < self._max_num_batches <= (self._curr_idx / self.batch_size)) if not has_enough or presented_max: raise StopIteration() @@ -142,6 +157,7 @@ class MetOfficeDataProvider(DataProvider): def __init__(self, window_size, batch_size=10, max_num_batches=-1, + max_num_examples=-1, randomize=True): super(MetOfficeDataProvider, self).\ @@ -152,10 +168,20 @@ class MetOfficeDataProvider(DataProvider): "File %s was expected to exist!." % dset_path ) + if max_num_batches > 0 and max_num_examples > 0: + logger.warning("You have specified both 'max_num_batches' and " \ + "a deprecead 'max_num_examples' arguments. We will " \ + "use the former over the latter.") + raw = numpy.loadtxt(dset_path, skiprows=3, usecols=range(2, 32)) self.window_size = window_size self._max_num_batches = max_num_batches + #max_num_examples arg was provided for backward compatibility + #but it maps us to the max_num_batches anyway + if max_num_examples > 0 and max_num_batches < 0: + self._max_num_batches = max_num_examples / self.batch_size + #filter out all missing datapoints and #flatten a matrix to a vector, so we will get #a time preserving representation of measurments @@ -190,9 +216,9 @@ class MetOfficeDataProvider(DataProvider): return numpy.random.permutation(numpy.arange(self.window_size, self.x.shape[0])) def next(self): - - has_enough = (self._curr_idx + self.batch_size) <= self.x.shape[0] - presented_max = (0 < self._max_num_batches < (self._curr_idx / self.batch_size)) + + has_enough = (self.window_size + self._curr_idx + self.batch_size) <= self.x.shape[0] + presented_max = (0 < self._max_num_batches <= (self._curr_idx / self.batch_size)) if not has_enough or presented_max: raise StopIteration() @@ -202,7 +228,8 @@ class MetOfficeDataProvider(DataProvider): self._rand_idx[self._curr_idx:self._curr_idx + self.batch_size] else: range_idx = \ - numpy.arange(self._curr_idx, self._curr_idx + self.batch_size) + numpy.arange(self.window_size + self._curr_idx, + self.window_size + self._curr_idx + self.batch_size) #build slicing matrix of size minibatch, which will contain batch_size #rows, each keeping indexes that selects windows_size+1 [for (x,t)] elements @@ -215,7 +242,7 @@ class MetOfficeDataProvider(DataProvider): range_idx[i] - self.window_size - 1, -1, dtype=numpy.int32)[::-1] - + #here we use advanced indexing to select slices from observation vector #last column of rval_x makes our targets t (as we splice window_size + 1 tmp_x = self.x[range_slices]