3306 lines
531 KiB
Plaintext
3306 lines
531 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Single layer models\n",
|
|
"\n",
|
|
"In this lab we will implement a single-layer network model consisting of solely of an affine transformation of the inputs. The relevant material for this was covered in [the slides of the first lecture](http://www.inf.ed.ac.uk/teaching/courses/mlp/2016/mlp01-intro.pdf). \n",
|
|
"\n",
|
|
"We will first implement the forward propagation of inputs to the network to produce predicted outputs. We will then move on to considering how to use gradients of an error function evaluated on the outputs to compute the gradients with respect to the model parameters to allow us to perform an iterative gradient-descent training procedure. In the final exercise you will use an interactive visualisation to explore the role of some of the different hyperparameters of gradient-descent based training methods.\n",
|
|
"\n",
|
|
"#### A note on random number generators\n",
|
|
"\n",
|
|
"It is generally a good practice (for machine learning applications **not** for cryptography!) to seed a pseudo-random number generator once at the beginning of each experiment. This makes it easier to reproduce results as the same random draws will produced each time the experiment is run (e.g. the same random initialisations used for parameters). Therefore generally when we need to generate random values during this course, we will create a seeded random number generator object as we do in the cell below."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"seed = 27092016 \n",
|
|
"rng = np.random.RandomState(seed)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Exercise 1: linear and affine transforms\n",
|
|
"\n",
|
|
"Any *linear transform* (also called a linear map) of a finite-dimensional vector space can be parametrised by a matrix. So for example if we consider $\\boldsymbol{x} \\in \\mathbb{R}^{D}$ as the input space of a model with $D$ dimensional real-valued inputs, then a matrix $\\mathbf{W} \\in \\mathbb{R}^{K\\times D}$ can be used to define a prediction model consisting solely of a linear transform of the inputs\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" \\boldsymbol{y} = \\mathbf{W} \\boldsymbol{x}\n",
|
|
" \\qquad\n",
|
|
" \\Leftrightarrow\n",
|
|
" \\qquad\n",
|
|
" y_k = \\sum_{d=1}^D \\left( W_{kd} x_d \\right) \\quad \\forall k \\in \\left\\lbrace 1 \\dots K\\right\\rbrace\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"with here $\\boldsymbol{y} \\in \\mathbb{R}^K$ the $K$-dimensional real-valued output of the model. Geometrically we can think of a linear transform doing some combination of rotation, scaling, reflection and shearing of the input.\n",
|
|
"\n",
|
|
"An *affine transform* consists of a linear transform plus an additional translation parameterised by a vector $\\boldsymbol{b} \\in \\mathbb{R}^K$. A model consisting of an affine transformation of the inputs can then be defined as\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" \\boldsymbol{y} = \\mathbf{W}\\boldsymbol{x} + \\boldsymbol{b}\n",
|
|
" \\qquad\n",
|
|
" \\Leftrightarrow\n",
|
|
" \\qquad\n",
|
|
" y_k = \\sum_{d=1}^D \\left( W_{kd} x_d \\right) + b_k \\quad \\forall k \\in \\left\\lbrace 1 \\dots K\\right\\rbrace\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"In machine learning we will usually refer to the matrix $\\mathbf{W}$ as a *weight matrix* and the vector $\\boldsymbol{b}$ as a *bias vector*.\n",
|
|
"\n",
|
|
"Generally rather than working with a single data vector $\\boldsymbol{x}$ we will work with batches of datapoints $\\left\\lbrace \\boldsymbol{x}^{(b)}\\right\\rbrace_{b=1}^B$. We could calculate the outputs for each input in the batch sequentially\n",
|
|
"\n",
|
|
"\\begin{align}\n",
|
|
" \\boldsymbol{y}^{(1)} &= \\mathbf{W}\\boldsymbol{x}^{(1)} + \\boldsymbol{b}\\\\\n",
|
|
" \\boldsymbol{y}^{(2)} &= \\mathbf{W}\\boldsymbol{x}^{(2)} + \\boldsymbol{b}\\\\\n",
|
|
" \\dots &\\\\\n",
|
|
" \\boldsymbol{y}^{(B)} &= \\mathbf{W}\\boldsymbol{x}^{(B)} + \\boldsymbol{b}\\\\\n",
|
|
"\\end{align}\n",
|
|
"\n",
|
|
"by looping over each input in the batch and calculating the output. However in general loops in Python are slow (particularly compared to compiled and typed languages such as C). This is due at least in part to the large overhead in dynamically inferring variable types. In general therefore wherever possible we want to avoid having loops in which such overhead will become the dominant computational cost.\n",
|
|
"\n",
|
|
"For array based numerical operations, one way of overcoming this bottleneck is to *vectorise* operations. NumPy `ndarrays` are typed arrays for which operations such as basic elementwise arithmetic and linear algebra operations such as computing matrix-matrix or matrix-vector products are implemented by calls to highly-optimised compiled libraries. Therefore if you can implement code directly using NumPy operations on arrays rather than by looping over array elements it is often possible to make very substantial performance gains.\n",
|
|
"\n",
|
|
"As a simple example we can consider adding up two arrays `a` and `b` and writing the result to a third array `c`. First lets initialise `a` and `b` with arbitrary values by running the cell below."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"size = 1000\n",
|
|
"a = np.arange(size)\n",
|
|
"b = np.ones(size)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now let's time how long it takes to add up each pair of values in the two array and write the results to a third array using a loop-based implementation. We will use the `%%timeit` magic briefly mentioned in the previous lab notebook specifying the number of times to loop the code as 100 and to give the best of 3 repeats. Run the cell below to get a print out of the average time taken."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2.05 ms ± 148 µs per loop (mean ± std. dev. of 3 runs, 100 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%%timeit -n 100 -r 3\n",
|
|
"c = np.empty(size)\n",
|
|
"for i in range(size):\n",
|
|
" c[i] = a[i] + b[i]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"And now we will perform the corresponding summation with the overloaded addition operator of NumPy arrays. Again run the cell below to get a print out of the average time taken."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"3.01 µs ± 1.53 µs per loop (mean ± std. dev. of 3 runs, 100 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%%timeit -n 100 -r 3\n",
|
|
"c = a + b"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The first loop-based implementation should have taken on the order of milliseconds ($10^{-3}$s) while the vectorised implementation should have taken on the order of microseconds ($10^{-6}$s), i.e. a $\\sim1000\\times$ speedup. Hopefully this simple example should make it clear why we want to vectorise operations whenever possible!\n",
|
|
"\n",
|
|
"Getting back to our affine model, ideally rather than individually computing the output corresponding to each input we should compute the outputs for all inputs in a batch using a vectorised implementation. As you saw last week, data providers return batches of inputs as arrays of shape `(batch_size, input_dim)`. In the mathematical notation used earlier we can consider this as a matrix $\\mathbf{X}$ of dimensionality $B \\times D$, and in particular\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" \\mathbf{X} = \\left[ \\boldsymbol{x}^{(1)} ~ \\boldsymbol{x}^{(2)} ~ \\dots ~ \\boldsymbol{x}^{(B)} \\right]^\\mathrm{T}\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"i.e. the $b^{\\textrm{th}}$ input vector $\\boldsymbol{x}^{(b)}$ corresponds to the $b^{\\textrm{th}}$ row of $\\mathbf{X}$. If we define the $B \\times K$ matrix of outputs $\\mathbf{Y}$ similarly as\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" \\mathbf{Y} = \\left[ \\boldsymbol{y}^{(1)} ~ \\boldsymbol{y}^{(2)} ~ \\dots ~ \\boldsymbol{y}^{(B)} \\right]^\\mathrm{T}\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"then we can express the relationship between $\\mathbf{X}$ and $\\mathbf{Y}$ using [matrix multiplication](https://en.wikipedia.org/wiki/Matrix_multiplication) and addition as\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" \\mathbf{Y} = \\mathbf{X} \\mathbf{W}^\\mathrm{T} + \\mathbf{B}\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"where $\\mathbf{B} = \\left[ \\boldsymbol{b} ~ \\boldsymbol{b} ~ \\dots ~ \\boldsymbol{b} \\right]^\\mathrm{T}$ i.e. a $B \\times K$ matrix with each row corresponding to the bias vector. The weight matrix needs to be transposed here as the inner dimensions of a matrix multiplication must match i.e. for $\\mathbf{C} = \\mathbf{A} \\mathbf{B}$ then if $\\mathbf{A}$ is of dimensionality $K \\times L$ and $\\mathbf{B}$ is of dimensionality $M \\times N$ then it must be the case that $L = M$ and $\\mathbf{C}$ will be of dimensionality $K \\times N$.\n",
|
|
"\n",
|
|
"The first exercise for this lab is to implement *forward propagation* for a single-layer model consisting of an affine transformation of the inputs in the `fprop` function given as skeleton code in the cell below. This should work for a batch of inputs of shape `(batch_size, input_dim)` producing a batch of outputs of shape `(batch_size, output_dim)`.\n",
|
|
" \n",
|
|
"You will probably want to use the NumPy `dot` function and [broadcasting features](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) to implement this efficiently. If you are not familiar with either / both of these you may wish to read the [hints](#Hints:-Using-the-dot-function-and-broadcasting) section below which gives some details on these before attempting the exercise."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def fprop(inputs, weights, biases):\n",
|
|
" \"\"\"Forward propagates activations through the layer transformation.\n",
|
|
"\n",
|
|
" For inputs `x`, outputs `y`, weights `W` and biases `b` the layer\n",
|
|
" corresponds to `y = W x + b`.\n",
|
|
"\n",
|
|
" Args:\n",
|
|
" inputs: Array of layer inputs of shape (batch_size, input_dim).\n",
|
|
" weights: Array of weight parameters of shape \n",
|
|
" (output_dim, input_dim).\n",
|
|
" biases: Array of bias parameters of shape (output_dim, ).\n",
|
|
"\n",
|
|
" Returns:\n",
|
|
" outputs: Array of layer outputs of shape (batch_size, output_dim).\n",
|
|
" \"\"\"\n",
|
|
" return inputs.dot(weights.T) + biases"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Once you have implemented `fprop` in the cell above you can test your implementation by running the cell below."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"All outputs correct!\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"inputs = np.array([[0., -1., 2.], [-6., 3., 1.]])\n",
|
|
"weights = np.array([[2., -3., -1.], [-5., 7., 2.]])\n",
|
|
"biases = np.array([5., -3.])\n",
|
|
"true_outputs = np.array([[6., -6.], [-17., 50.]])\n",
|
|
"\n",
|
|
"if not np.allclose(fprop(inputs, weights, biases), true_outputs):\n",
|
|
" print('Wrong outputs computed.')\n",
|
|
"else:\n",
|
|
" print('All outputs correct!')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Hints: Using the `dot` function and broadcasting\n",
|
|
"\n",
|
|
"For those new to NumPy below are some details on the `dot` function and broadcasting feature of NumPy that you may want to use for implementing the first exercise. If you are already familiar with these and have already completed the first exercise you can move on straight to [second exercise](#Exercise-2:-visualising-random-models).\n",
|
|
"\n",
|
|
"#### `numpy.dot` function\n",
|
|
"\n",
|
|
"Matrix-matrix, matrix-vector and vector-vector (dot) products can all be computed in NumPy using the [`dot`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html) function. For example if `A` and `B` are both two dimensional arrays, then `C = np.dot(A, B)` or equivalently `C = A.dot(B)` will both compute the matrix product of `A` and `B` assuming `A` and `B` have compatible dimensions. Similarly if `a` and `b` are one dimensional arrays then `c = np.dot(a, b)` (which is equivalent to `c = a.dot(b)`) will compute the [scalar / dot product](https://en.wikipedia.org/wiki/Dot_product) of the two arrays. If `A` is a two-dimensional array and `b` a one-dimensional array `np.dot(A, b)` (which is equivalent to `A.dot(b)`) will compute the matrix-vector product of `A` and `b`. Examples of all three of these product types are shown in the cell below:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[[ 6. 6. 6.]\n",
|
|
" [ 24. 24. 24.]\n",
|
|
" [ 42. 42. 42.]]\n",
|
|
"[[ 18. 24. 30.]\n",
|
|
" [ 18. 24. 30.]\n",
|
|
" [ 18. 24. 30.]]\n",
|
|
"[ 0.8 2.6 4.4]\n",
|
|
"[ 2.4 3. 3.6]\n",
|
|
"0.2\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Initiliase arrays with arbitrary values\n",
|
|
"A = np.arange(9).reshape((3, 3))\n",
|
|
"B = np.ones((3, 3)) * 2\n",
|
|
"a = np.array([-1., 0., 1.])\n",
|
|
"b = np.array([0.1, 0.2, 0.3])\n",
|
|
"print(A.dot(B)) # Matrix-matrix product\n",
|
|
"print(B.dot(A)) # Reversed product of above A.dot(B) != B.dot(A) in general\n",
|
|
"print(A.dot(b)) # Matrix-vector product\n",
|
|
"print(b.dot(A)) # Again A.dot(b) != b.dot(A) unless A is symmetric i.e. A == A.T\n",
|
|
"print(a.dot(b)) # Vector-vector scalar product"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"#### Broadcasting\n",
|
|
"\n",
|
|
"Another NumPy feature it will be helpful to get familiar with is [broadcasting](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html). Broadcasting allows you to apply operations to arrays of different shapes, for example to add a one-dimensional array to a two-dimensional array or multiply a multidimensional array by a scalar. The complete set of rules for broadcasting as explained in the official documentation page just linked to can sound a bit complex: you might find the [visual explanation on this page](http://www.scipy-lectures.org/intro/numpy/operations.html#broadcasting) more intuitive. The cell below gives a few examples:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[[ 0.1 1.2]\n",
|
|
" [ 2.1 3.2]\n",
|
|
" [ 4.1 5.2]]\n",
|
|
"[[-1. 0.]\n",
|
|
" [ 2. 3.]\n",
|
|
" [ 5. 6.]]\n",
|
|
"[[ 0. 0.2]\n",
|
|
" [ 0.2 0.6]\n",
|
|
" [ 0.4 1. ]]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Initiliase arrays with arbitrary values\n",
|
|
"A = np.arange(6).reshape((3, 2))\n",
|
|
"b = np.array([0.1, 0.2])\n",
|
|
"c = np.array([-1., 0., 1.])\n",
|
|
"print(A + b) # Add b elementwise to all rows of A\n",
|
|
"print((A.T + c).T) # Add b elementwise to all columns of A\n",
|
|
"print(A * b) # Multiply each row of A elementise by b "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Exercise 2: visualising random models"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In this exercise you will use your `fprop` implementation to visualise the outputs of a single-layer affine transform model with two-dimensional inputs and a one-dimensional output. In this simple case we can visualise the joint input-output space on a 3D axis.\n",
|
|
"\n",
|
|
"For this task and the learning experiments later in the notebook we will use a regression dataset from the [UCI machine learning repository](http://archive.ics.uci.edu/ml/index.html). In particular we will use a version of the [Combined Cycle Power Plant dataset](http://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant), where the task is to predict the energy output of a power plant given observations of the local ambient conditions (e.g. temperature, pressure and humidity).\n",
|
|
"\n",
|
|
"The original dataset has four input dimensions and a single target output dimension. We have preprocessed the dataset by [whitening](https://en.wikipedia.org/wiki/Whitening_transformation) it, a common preprocessing step. We will only use the first two dimensions of the whitened inputs (corresponding to the first two principal components of the inputs) so we can easily visualise the joint input-output space.\n",
|
|
"\n",
|
|
"The dataset has been wrapped in the `CCPPDataProvider` class in the `mlp.data_providers` module and the data included as a compressed file in the data directory as `ccpp_data.npz`. Running the cell below will initialise an instance of this class, get a single batch of inputs and outputs and import the necessary `matplotlib` objects."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import matplotlib.pyplot as plt\n",
|
|
"from mpl_toolkits.mplot3d import Axes3D\n",
|
|
"from mlp.data_providers import CCPPDataProvider\n",
|
|
"%matplotlib notebook\n",
|
|
"\n",
|
|
"data_provider = CCPPDataProvider(\n",
|
|
" which_set='train',\n",
|
|
" input_dims=[0, 1],\n",
|
|
" batch_size=5000, \n",
|
|
" max_num_batches=1, \n",
|
|
" shuffle_order=False\n",
|
|
")\n",
|
|
"\n",
|
|
"input_dim, output_dim = 2, 1\n",
|
|
"\n",
|
|
"inputs, targets = data_provider.next()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Here we used the `%matplotlib notebook` magic command rather than the `%matplotlib inline` we used in the previous lab as this allows us to produce interactive 3D plots which you can rotate and zoom in/out by dragging with the mouse and scrolling the mouse-wheel respectively. Once you have finished interacting with a plot you can close it to produce a static inline plot using the <i class=\"fa fa-power-off\"></i> button in the top-right corner.\n",
|
|
"\n",
|
|
"Now run the cell below to plot the predicted outputs of a randomly initialised model across the two dimensional input space as well as the true target outputs. This sort of visualisation can be a useful method (in low dimensions) to assess how well the model is likely to be able to fit the data and to judge appropriate initialisation scales for the parameters. Each time you re-run the cell a new set of random parameters will be sampled\n",
|
|
"\n",
|
|
"Some questions to consider:\n",
|
|
"\n",
|
|
" * How do the weights and bias initialisation scale affect the sort of predicted input-output relationships?\n",
|
|
" * Does the linear form of the model seem appropriate for the data here?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"application/javascript": [
|
|
"/* Put everything inside the global mpl namespace */\n",
|
|
"window.mpl = {};\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.get_websocket_type = function() {\n",
|
|
" if (typeof(WebSocket) !== 'undefined') {\n",
|
|
" return WebSocket;\n",
|
|
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
|
|
" return MozWebSocket;\n",
|
|
" } else {\n",
|
|
" alert('Your browser does not have WebSocket support.' +\n",
|
|
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
|
|
" 'Firefox 4 and 5 are also supported but you ' +\n",
|
|
" 'have to enable WebSockets in about:config.');\n",
|
|
" };\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
|
|
" this.id = figure_id;\n",
|
|
"\n",
|
|
" this.ws = websocket;\n",
|
|
"\n",
|
|
" this.supports_binary = (this.ws.binaryType != undefined);\n",
|
|
"\n",
|
|
" if (!this.supports_binary) {\n",
|
|
" var warnings = document.getElementById(\"mpl-warnings\");\n",
|
|
" if (warnings) {\n",
|
|
" warnings.style.display = 'block';\n",
|
|
" warnings.textContent = (\n",
|
|
" \"This browser does not support binary websocket messages. \" +\n",
|
|
" \"Performance may be slow.\");\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.imageObj = new Image();\n",
|
|
"\n",
|
|
" this.context = undefined;\n",
|
|
" this.message = undefined;\n",
|
|
" this.canvas = undefined;\n",
|
|
" this.rubberband_canvas = undefined;\n",
|
|
" this.rubberband_context = undefined;\n",
|
|
" this.format_dropdown = undefined;\n",
|
|
"\n",
|
|
" this.image_mode = 'full';\n",
|
|
"\n",
|
|
" this.root = $('<div/>');\n",
|
|
" this._root_extra_style(this.root)\n",
|
|
" this.root.attr('style', 'display: inline-block');\n",
|
|
"\n",
|
|
" $(parent_element).append(this.root);\n",
|
|
"\n",
|
|
" this._init_header(this);\n",
|
|
" this._init_canvas(this);\n",
|
|
" this._init_toolbar(this);\n",
|
|
"\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" this.waiting = false;\n",
|
|
"\n",
|
|
" this.ws.onopen = function () {\n",
|
|
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
|
|
" fig.send_message(\"send_image_mode\", {});\n",
|
|
" if (mpl.ratio != 1) {\n",
|
|
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
|
|
" }\n",
|
|
" fig.send_message(\"refresh\", {});\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.imageObj.onload = function() {\n",
|
|
" if (fig.image_mode == 'full') {\n",
|
|
" // Full images could contain transparency (where diff images\n",
|
|
" // almost always do), so we need to clear the canvas so that\n",
|
|
" // there is no ghosting.\n",
|
|
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
|
|
" }\n",
|
|
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
|
|
" };\n",
|
|
"\n",
|
|
" this.imageObj.onunload = function() {\n",
|
|
" this.ws.close();\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.ws.onmessage = this._make_on_message_function(this);\n",
|
|
"\n",
|
|
" this.ondownload = ondownload;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_header = function() {\n",
|
|
" var titlebar = $(\n",
|
|
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
|
|
" 'ui-helper-clearfix\"/>');\n",
|
|
" var titletext = $(\n",
|
|
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
|
|
" 'text-align: center; padding: 3px;\"/>');\n",
|
|
" titlebar.append(titletext)\n",
|
|
" this.root.append(titlebar);\n",
|
|
" this.header = titletext[0];\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
|
|
"\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
|
|
"\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_canvas = function() {\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" var canvas_div = $('<div/>');\n",
|
|
"\n",
|
|
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
|
|
"\n",
|
|
" function canvas_keyboard_event(event) {\n",
|
|
" return fig.key_event(event, event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
|
|
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
|
|
" this.canvas_div = canvas_div\n",
|
|
" this._canvas_extra_style(canvas_div)\n",
|
|
" this.root.append(canvas_div);\n",
|
|
"\n",
|
|
" var canvas = $('<canvas/>');\n",
|
|
" canvas.addClass('mpl-canvas');\n",
|
|
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
|
|
"\n",
|
|
" this.canvas = canvas[0];\n",
|
|
" this.context = canvas[0].getContext(\"2d\");\n",
|
|
"\n",
|
|
" var backingStore = this.context.backingStorePixelRatio ||\n",
|
|
"\tthis.context.webkitBackingStorePixelRatio ||\n",
|
|
"\tthis.context.mozBackingStorePixelRatio ||\n",
|
|
"\tthis.context.msBackingStorePixelRatio ||\n",
|
|
"\tthis.context.oBackingStorePixelRatio ||\n",
|
|
"\tthis.context.backingStorePixelRatio || 1;\n",
|
|
"\n",
|
|
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
|
|
"\n",
|
|
" var rubberband = $('<canvas/>');\n",
|
|
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
|
|
"\n",
|
|
" var pass_mouse_events = true;\n",
|
|
"\n",
|
|
" canvas_div.resizable({\n",
|
|
" start: function(event, ui) {\n",
|
|
" pass_mouse_events = false;\n",
|
|
" },\n",
|
|
" resize: function(event, ui) {\n",
|
|
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
|
" },\n",
|
|
" stop: function(event, ui) {\n",
|
|
" pass_mouse_events = true;\n",
|
|
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
|
" },\n",
|
|
" });\n",
|
|
"\n",
|
|
" function mouse_event_fn(event) {\n",
|
|
" if (pass_mouse_events)\n",
|
|
" return fig.mouse_event(event, event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" rubberband.mousedown('button_press', mouse_event_fn);\n",
|
|
" rubberband.mouseup('button_release', mouse_event_fn);\n",
|
|
" // Throttle sequential mouse events to 1 every 20ms.\n",
|
|
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
|
|
"\n",
|
|
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
|
|
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
|
|
"\n",
|
|
" canvas_div.on(\"wheel\", function (event) {\n",
|
|
" event = event.originalEvent;\n",
|
|
" event['data'] = 'scroll'\n",
|
|
" if (event.deltaY < 0) {\n",
|
|
" event.step = 1;\n",
|
|
" } else {\n",
|
|
" event.step = -1;\n",
|
|
" }\n",
|
|
" mouse_event_fn(event);\n",
|
|
" });\n",
|
|
"\n",
|
|
" canvas_div.append(canvas);\n",
|
|
" canvas_div.append(rubberband);\n",
|
|
"\n",
|
|
" this.rubberband = rubberband;\n",
|
|
" this.rubberband_canvas = rubberband[0];\n",
|
|
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
|
|
" this.rubberband_context.strokeStyle = \"#000000\";\n",
|
|
"\n",
|
|
" this._resize_canvas = function(width, height) {\n",
|
|
" // Keep the size of the canvas, canvas container, and rubber band\n",
|
|
" // canvas in synch.\n",
|
|
" canvas_div.css('width', width)\n",
|
|
" canvas_div.css('height', height)\n",
|
|
"\n",
|
|
" canvas.attr('width', width * mpl.ratio);\n",
|
|
" canvas.attr('height', height * mpl.ratio);\n",
|
|
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
|
|
"\n",
|
|
" rubberband.attr('width', width);\n",
|
|
" rubberband.attr('height', height);\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
|
|
" // upon first draw.\n",
|
|
" this._resize_canvas(600, 600);\n",
|
|
"\n",
|
|
" // Disable right mouse context menu.\n",
|
|
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
|
|
" return false;\n",
|
|
" });\n",
|
|
"\n",
|
|
" function set_focus () {\n",
|
|
" canvas.focus();\n",
|
|
" canvas_div.focus();\n",
|
|
" }\n",
|
|
"\n",
|
|
" window.setTimeout(set_focus, 100);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_toolbar = function() {\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" var nav_element = $('<div/>')\n",
|
|
" nav_element.attr('style', 'width: 100%');\n",
|
|
" this.root.append(nav_element);\n",
|
|
"\n",
|
|
" // Define a callback function for later on.\n",
|
|
" function toolbar_event(event) {\n",
|
|
" return fig.toolbar_button_onclick(event['data']);\n",
|
|
" }\n",
|
|
" function toolbar_mouse_event(event) {\n",
|
|
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" for(var toolbar_ind in mpl.toolbar_items) {\n",
|
|
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
|
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
|
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
|
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
|
"\n",
|
|
" if (!name) {\n",
|
|
" // put a spacer in here.\n",
|
|
" continue;\n",
|
|
" }\n",
|
|
" var button = $('<button/>');\n",
|
|
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
|
|
" 'ui-button-icon-only');\n",
|
|
" button.attr('role', 'button');\n",
|
|
" button.attr('aria-disabled', 'false');\n",
|
|
" button.click(method_name, toolbar_event);\n",
|
|
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
|
"\n",
|
|
" var icon_img = $('<span/>');\n",
|
|
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
|
|
" icon_img.addClass(image);\n",
|
|
" icon_img.addClass('ui-corner-all');\n",
|
|
"\n",
|
|
" var tooltip_span = $('<span/>');\n",
|
|
" tooltip_span.addClass('ui-button-text');\n",
|
|
" tooltip_span.html(tooltip);\n",
|
|
"\n",
|
|
" button.append(icon_img);\n",
|
|
" button.append(tooltip_span);\n",
|
|
"\n",
|
|
" nav_element.append(button);\n",
|
|
" }\n",
|
|
"\n",
|
|
" var fmt_picker_span = $('<span/>');\n",
|
|
"\n",
|
|
" var fmt_picker = $('<select/>');\n",
|
|
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
|
|
" fmt_picker_span.append(fmt_picker);\n",
|
|
" nav_element.append(fmt_picker_span);\n",
|
|
" this.format_dropdown = fmt_picker[0];\n",
|
|
"\n",
|
|
" for (var ind in mpl.extensions) {\n",
|
|
" var fmt = mpl.extensions[ind];\n",
|
|
" var option = $(\n",
|
|
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
|
|
" fmt_picker.append(option)\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Add hover states to the ui-buttons\n",
|
|
" $( \".ui-button\" ).hover(\n",
|
|
" function() { $(this).addClass(\"ui-state-hover\");},\n",
|
|
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
|
|
" );\n",
|
|
"\n",
|
|
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
|
|
" nav_element.append(status_bar);\n",
|
|
" this.message = status_bar[0];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
|
|
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
|
|
" // which will in turn request a refresh of the image.\n",
|
|
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.send_message = function(type, properties) {\n",
|
|
" properties['type'] = type;\n",
|
|
" properties['figure_id'] = this.id;\n",
|
|
" this.ws.send(JSON.stringify(properties));\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.send_draw_message = function() {\n",
|
|
" if (!this.waiting) {\n",
|
|
" this.waiting = true;\n",
|
|
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
|
" var format_dropdown = fig.format_dropdown;\n",
|
|
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
|
|
" fig.ondownload(fig, format);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
|
|
" var size = msg['size'];\n",
|
|
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
|
|
" fig._resize_canvas(size[0], size[1]);\n",
|
|
" fig.send_message(\"refresh\", {});\n",
|
|
" };\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
|
|
" var x0 = msg['x0'] / mpl.ratio;\n",
|
|
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
|
|
" var x1 = msg['x1'] / mpl.ratio;\n",
|
|
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
|
|
" x0 = Math.floor(x0) + 0.5;\n",
|
|
" y0 = Math.floor(y0) + 0.5;\n",
|
|
" x1 = Math.floor(x1) + 0.5;\n",
|
|
" y1 = Math.floor(y1) + 0.5;\n",
|
|
" var min_x = Math.min(x0, x1);\n",
|
|
" var min_y = Math.min(y0, y1);\n",
|
|
" var width = Math.abs(x1 - x0);\n",
|
|
" var height = Math.abs(y1 - y0);\n",
|
|
"\n",
|
|
" fig.rubberband_context.clearRect(\n",
|
|
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
|
|
"\n",
|
|
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
|
|
" // Updates the figure title.\n",
|
|
" fig.header.textContent = msg['label'];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
|
|
" var cursor = msg['cursor'];\n",
|
|
" switch(cursor)\n",
|
|
" {\n",
|
|
" case 0:\n",
|
|
" cursor = 'pointer';\n",
|
|
" break;\n",
|
|
" case 1:\n",
|
|
" cursor = 'default';\n",
|
|
" break;\n",
|
|
" case 2:\n",
|
|
" cursor = 'crosshair';\n",
|
|
" break;\n",
|
|
" case 3:\n",
|
|
" cursor = 'move';\n",
|
|
" break;\n",
|
|
" }\n",
|
|
" fig.rubberband_canvas.style.cursor = cursor;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
|
|
" fig.message.textContent = msg['message'];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
|
|
" // Request the server to send over a new figure.\n",
|
|
" fig.send_draw_message();\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
|
|
" fig.image_mode = msg['mode'];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
|
" // Called whenever the canvas gets updated.\n",
|
|
" this.send_message(\"ack\", {});\n",
|
|
"}\n",
|
|
"\n",
|
|
"// A function to construct a web socket function for onmessage handling.\n",
|
|
"// Called in the figure constructor.\n",
|
|
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
|
|
" return function socket_on_message(evt) {\n",
|
|
" if (evt.data instanceof Blob) {\n",
|
|
" /* FIXME: We get \"Resource interpreted as Image but\n",
|
|
" * transferred with MIME type text/plain:\" errors on\n",
|
|
" * Chrome. But how to set the MIME type? It doesn't seem\n",
|
|
" * to be part of the websocket stream */\n",
|
|
" evt.data.type = \"image/png\";\n",
|
|
"\n",
|
|
" /* Free the memory for the previous frames */\n",
|
|
" if (fig.imageObj.src) {\n",
|
|
" (window.URL || window.webkitURL).revokeObjectURL(\n",
|
|
" fig.imageObj.src);\n",
|
|
" }\n",
|
|
"\n",
|
|
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
|
|
" evt.data);\n",
|
|
" fig.updated_canvas_event();\n",
|
|
" fig.waiting = false;\n",
|
|
" return;\n",
|
|
" }\n",
|
|
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
|
|
" fig.imageObj.src = evt.data;\n",
|
|
" fig.updated_canvas_event();\n",
|
|
" fig.waiting = false;\n",
|
|
" return;\n",
|
|
" }\n",
|
|
"\n",
|
|
" var msg = JSON.parse(evt.data);\n",
|
|
" var msg_type = msg['type'];\n",
|
|
"\n",
|
|
" // Call the \"handle_{type}\" callback, which takes\n",
|
|
" // the figure and JSON message as its only arguments.\n",
|
|
" try {\n",
|
|
" var callback = fig[\"handle_\" + msg_type];\n",
|
|
" } catch (e) {\n",
|
|
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
|
|
" return;\n",
|
|
" }\n",
|
|
"\n",
|
|
" if (callback) {\n",
|
|
" try {\n",
|
|
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
|
|
" callback(fig, msg);\n",
|
|
" } catch (e) {\n",
|
|
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
|
|
" }\n",
|
|
" }\n",
|
|
" };\n",
|
|
"}\n",
|
|
"\n",
|
|
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
|
|
"mpl.findpos = function(e) {\n",
|
|
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
|
|
" var targ;\n",
|
|
" if (!e)\n",
|
|
" e = window.event;\n",
|
|
" if (e.target)\n",
|
|
" targ = e.target;\n",
|
|
" else if (e.srcElement)\n",
|
|
" targ = e.srcElement;\n",
|
|
" if (targ.nodeType == 3) // defeat Safari bug\n",
|
|
" targ = targ.parentNode;\n",
|
|
"\n",
|
|
" // jQuery normalizes the pageX and pageY\n",
|
|
" // pageX,Y are the mouse positions relative to the document\n",
|
|
" // offset() returns the position of the element relative to the document\n",
|
|
" var x = e.pageX - $(targ).offset().left;\n",
|
|
" var y = e.pageY - $(targ).offset().top;\n",
|
|
"\n",
|
|
" return {\"x\": x, \"y\": y};\n",
|
|
"};\n",
|
|
"\n",
|
|
"/*\n",
|
|
" * return a copy of an object with only non-object keys\n",
|
|
" * we need this to avoid circular references\n",
|
|
" * http://stackoverflow.com/a/24161582/3208463\n",
|
|
" */\n",
|
|
"function simpleKeys (original) {\n",
|
|
" return Object.keys(original).reduce(function (obj, key) {\n",
|
|
" if (typeof original[key] !== 'object')\n",
|
|
" obj[key] = original[key]\n",
|
|
" return obj;\n",
|
|
" }, {});\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
|
|
" var canvas_pos = mpl.findpos(event)\n",
|
|
"\n",
|
|
" if (name === 'button_press')\n",
|
|
" {\n",
|
|
" this.canvas.focus();\n",
|
|
" this.canvas_div.focus();\n",
|
|
" }\n",
|
|
"\n",
|
|
" var x = canvas_pos.x * mpl.ratio;\n",
|
|
" var y = canvas_pos.y * mpl.ratio;\n",
|
|
"\n",
|
|
" this.send_message(name, {x: x, y: y, button: event.button,\n",
|
|
" step: event.step,\n",
|
|
" guiEvent: simpleKeys(event)});\n",
|
|
"\n",
|
|
" /* This prevents the web browser from automatically changing to\n",
|
|
" * the text insertion cursor when the button is pressed. We want\n",
|
|
" * to control all of the cursor setting manually through the\n",
|
|
" * 'cursor' event from matplotlib */\n",
|
|
" event.preventDefault();\n",
|
|
" return false;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
|
" // Handle any extra behaviour associated with a key event\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.key_event = function(event, name) {\n",
|
|
"\n",
|
|
" // Prevent repeat events\n",
|
|
" if (name == 'key_press')\n",
|
|
" {\n",
|
|
" if (event.which === this._key)\n",
|
|
" return;\n",
|
|
" else\n",
|
|
" this._key = event.which;\n",
|
|
" }\n",
|
|
" if (name == 'key_release')\n",
|
|
" this._key = null;\n",
|
|
"\n",
|
|
" var value = '';\n",
|
|
" if (event.ctrlKey && event.which != 17)\n",
|
|
" value += \"ctrl+\";\n",
|
|
" if (event.altKey && event.which != 18)\n",
|
|
" value += \"alt+\";\n",
|
|
" if (event.shiftKey && event.which != 16)\n",
|
|
" value += \"shift+\";\n",
|
|
"\n",
|
|
" value += 'k';\n",
|
|
" value += event.which.toString();\n",
|
|
"\n",
|
|
" this._key_event_extra(event, name);\n",
|
|
"\n",
|
|
" this.send_message(name, {key: value,\n",
|
|
" guiEvent: simpleKeys(event)});\n",
|
|
" return false;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
|
|
" if (name == 'download') {\n",
|
|
" this.handle_save(this, null);\n",
|
|
" } else {\n",
|
|
" this.send_message(\"toolbar_button\", {name: name});\n",
|
|
" }\n",
|
|
"};\n",
|
|
"\n",
|
|
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
|
|
" this.message.textContent = tooltip;\n",
|
|
"};\n",
|
|
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
|
|
"\n",
|
|
"mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
|
|
"\n",
|
|
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
|
|
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
|
|
" // object with the appropriate methods. Currently this is a non binary\n",
|
|
" // socket, so there is still some room for performance tuning.\n",
|
|
" var ws = {};\n",
|
|
"\n",
|
|
" ws.close = function() {\n",
|
|
" comm.close()\n",
|
|
" };\n",
|
|
" ws.send = function(m) {\n",
|
|
" //console.log('sending', m);\n",
|
|
" comm.send(m);\n",
|
|
" };\n",
|
|
" // Register the callback with on_msg.\n",
|
|
" comm.on_msg(function(msg) {\n",
|
|
" //console.log('receiving', msg['content']['data'], msg);\n",
|
|
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
|
|
" ws.onmessage(msg['content']['data'])\n",
|
|
" });\n",
|
|
" return ws;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.mpl_figure_comm = function(comm, msg) {\n",
|
|
" // This is the function which gets called when the mpl process\n",
|
|
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
|
|
"\n",
|
|
" var id = msg.content.data.id;\n",
|
|
" // Get hold of the div created by the display call when the Comm\n",
|
|
" // socket was opened in Python.\n",
|
|
" var element = $(\"#\" + id);\n",
|
|
" var ws_proxy = comm_websocket_adapter(comm)\n",
|
|
"\n",
|
|
" function ondownload(figure, format) {\n",
|
|
" window.open(figure.imageObj.src);\n",
|
|
" }\n",
|
|
"\n",
|
|
" var fig = new mpl.figure(id, ws_proxy,\n",
|
|
" ondownload,\n",
|
|
" element.get(0));\n",
|
|
"\n",
|
|
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
|
|
" // web socket which is closed, not our websocket->open comm proxy.\n",
|
|
" ws_proxy.onopen();\n",
|
|
"\n",
|
|
" fig.parent_element = element.get(0);\n",
|
|
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
|
|
" if (!fig.cell_info) {\n",
|
|
" console.error(\"Failed to find cell for figure\", id, fig);\n",
|
|
" return;\n",
|
|
" }\n",
|
|
"\n",
|
|
" var output_index = fig.cell_info[2]\n",
|
|
" var cell = fig.cell_info[0];\n",
|
|
"\n",
|
|
"};\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
|
|
" var width = fig.canvas.width/mpl.ratio\n",
|
|
" fig.root.unbind('remove')\n",
|
|
"\n",
|
|
" // Update the output cell to use the data from the current canvas.\n",
|
|
" fig.push_to_output();\n",
|
|
" var dataURL = fig.canvas.toDataURL();\n",
|
|
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
|
|
" // the notebook keyboard shortcuts fail.\n",
|
|
" IPython.keyboard_manager.enable()\n",
|
|
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
|
|
" fig.close_ws(fig, msg);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
|
|
" fig.send_message('closing', msg);\n",
|
|
" // fig.ws.close()\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
|
|
" // Turn the data on the canvas into data in the output cell.\n",
|
|
" var width = this.canvas.width/mpl.ratio\n",
|
|
" var dataURL = this.canvas.toDataURL();\n",
|
|
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
|
" // Tell IPython that the notebook contents must change.\n",
|
|
" IPython.notebook.set_dirty(true);\n",
|
|
" this.send_message(\"ack\", {});\n",
|
|
" var fig = this;\n",
|
|
" // Wait a second, then push the new image to the DOM so\n",
|
|
" // that it is saved nicely (might be nice to debounce this).\n",
|
|
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_toolbar = function() {\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" var nav_element = $('<div/>')\n",
|
|
" nav_element.attr('style', 'width: 100%');\n",
|
|
" this.root.append(nav_element);\n",
|
|
"\n",
|
|
" // Define a callback function for later on.\n",
|
|
" function toolbar_event(event) {\n",
|
|
" return fig.toolbar_button_onclick(event['data']);\n",
|
|
" }\n",
|
|
" function toolbar_mouse_event(event) {\n",
|
|
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" for(var toolbar_ind in mpl.toolbar_items){\n",
|
|
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
|
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
|
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
|
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
|
"\n",
|
|
" if (!name) { continue; };\n",
|
|
"\n",
|
|
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
|
|
" button.click(method_name, toolbar_event);\n",
|
|
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
|
" nav_element.append(button);\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Add the status bar.\n",
|
|
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
|
|
" nav_element.append(status_bar);\n",
|
|
" this.message = status_bar[0];\n",
|
|
"\n",
|
|
" // Add the close button to the window.\n",
|
|
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
|
|
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
|
|
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
|
|
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
|
|
" buttongrp.append(button);\n",
|
|
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
|
|
" titlebar.prepend(buttongrp);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._root_extra_style = function(el){\n",
|
|
" var fig = this\n",
|
|
" el.on(\"remove\", function(){\n",
|
|
"\tfig.close_ws(fig, {});\n",
|
|
" });\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
|
|
" // this is important to make the div 'focusable\n",
|
|
" el.attr('tabindex', 0)\n",
|
|
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
|
|
" // off when our div gets focus\n",
|
|
"\n",
|
|
" // location in version 3\n",
|
|
" if (IPython.notebook.keyboard_manager) {\n",
|
|
" IPython.notebook.keyboard_manager.register_events(el);\n",
|
|
" }\n",
|
|
" else {\n",
|
|
" // location in version 2\n",
|
|
" IPython.keyboard_manager.register_events(el);\n",
|
|
" }\n",
|
|
"\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
|
" var manager = IPython.notebook.keyboard_manager;\n",
|
|
" if (!manager)\n",
|
|
" manager = IPython.keyboard_manager;\n",
|
|
"\n",
|
|
" // Check for shift+enter\n",
|
|
" if (event.shiftKey && event.which == 13) {\n",
|
|
" this.canvas_div.blur();\n",
|
|
" // select the cell after this one\n",
|
|
" var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
|
|
" IPython.notebook.select(index + 1);\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
|
" fig.ondownload(fig, null);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.find_output_cell = function(html_output) {\n",
|
|
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
|
|
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
|
|
" // IPython event is triggered only after the cells have been serialised, which for\n",
|
|
" // our purposes (turning an active figure into a static one), is too late.\n",
|
|
" var cells = IPython.notebook.get_cells();\n",
|
|
" var ncells = cells.length;\n",
|
|
" for (var i=0; i<ncells; i++) {\n",
|
|
" var cell = cells[i];\n",
|
|
" if (cell.cell_type === 'code'){\n",
|
|
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
|
|
" var data = cell.output_area.outputs[j];\n",
|
|
" if (data.data) {\n",
|
|
" // IPython >= 3 moved mimebundle to data attribute of output\n",
|
|
" data = data.data;\n",
|
|
" }\n",
|
|
" if (data['text/html'] == html_output) {\n",
|
|
" return [cell, data, j];\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"// Register the function which deals with the matplotlib target/channel.\n",
|
|
"// The kernel may be null if the page has been refreshed.\n",
|
|
"if (IPython.notebook.kernel != null) {\n",
|
|
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
|
|
"}\n"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.Javascript object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgCAYAAADbcAZoAAAgAElEQVR4Xu3XMQ0AAAzDsJU/6bHI5RGoZO3JzhEgQIAAAQIECBAgQCASWLRjhgABAgQIECBAgAABAidAPAEBAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQAH/z5sAABIaSURBVIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQICBA/AABAgQIECBAgAABApmAAMmoDREgQIAAAQIECBAgIED8AAECBAgQIECAAAECmYAAyagNESBAgAABAgQIECAgQPwAAQIECBAgQIAAAQKZgADJqA0RIECAAAECBAgQIPAWJAMhH4HbWQAAAABJRU5ErkJggg==\" width=\"800\">"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.HTML object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"weights_init_range = 0.5\n",
|
|
"biases_init_range = 0.1\n",
|
|
"\n",
|
|
"# Randomly initialise weights matrix\n",
|
|
"weights = rng.uniform(\n",
|
|
" low=-weights_init_range, \n",
|
|
" high=weights_init_range, \n",
|
|
" size=(output_dim, input_dim)\n",
|
|
")\n",
|
|
"\n",
|
|
"# Randomly initialise biases vector\n",
|
|
"biases = rng.uniform(\n",
|
|
" low=-biases_init_range, \n",
|
|
" high=biases_init_range, \n",
|
|
" size=output_dim\n",
|
|
")\n",
|
|
"# Calculate predicted model outputs\n",
|
|
"outputs = fprop(inputs, weights, biases)\n",
|
|
"\n",
|
|
"# Plot target and predicted outputs against inputs on same axis\n",
|
|
"fig = plt.figure(figsize=(8, 8))\n",
|
|
"ax = fig.add_subplot(111, projection='3d')\n",
|
|
"ax.plot(inputs[:, 0], inputs[:, 1], targets[:, 0], 'r.', ms=2)\n",
|
|
"ax.plot(inputs[:, 0], inputs[:, 1], outputs[:, 0], 'b.', ms=2)\n",
|
|
"ax.set_xlabel('Input dim 1')\n",
|
|
"ax.set_ylabel('Input dim 2')\n",
|
|
"ax.set_zlabel('Output')\n",
|
|
"ax.legend(['Targets', 'Predictions'], frameon=False)\n",
|
|
"fig.tight_layout()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Exercise 3: computing the error function and its gradient\n",
|
|
"\n",
|
|
"Here we will consider the task of regression as covered in the first lecture slides. The aim in a regression problem is given inputs $\\left\\lbrace \\boldsymbol{x}^{(n)}\\right\\rbrace_{n=1}^N$ to produce outputs $\\left\\lbrace \\boldsymbol{y}^{(n)}\\right\\rbrace_{n=1}^N$ that are as 'close' as possible to a set of target outputs $\\left\\lbrace \\boldsymbol{t}^{(n)}\\right\\rbrace_{n=1}^N$. The measure of 'closeness' or distance between target and predicted outputs is a design choice. \n",
|
|
"\n",
|
|
"A very common choice is the squared Euclidean distance between the predicted and target outputs. This can be computed as the sum of the squared differences between each element in the target and predicted outputs. A common convention is to multiply this value by $\\frac{1}{2}$ as this gives a slightly nicer expression for the error gradient. The error for the $n^{\\textrm{th}}$ training example is then\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" E^{(n)} = \\frac{1}{2} \\sum_{k=1}^K \\left\\lbrace \\left( y^{(n)}_k - t^{(n)}_k \\right)^2 \\right\\rbrace.\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"The overall error is then the *average* of this value across all training examples\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" \\bar{E} = \\frac{1}{N} \\sum_{n=1}^N \\left\\lbrace E^{(n)} \\right\\rbrace. \n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"*Note here we are using a slightly different convention from the lectures. There the overall error was considered to be the sum of the individual error terms rather than the mean. To differentiate between the two we will use $\\bar{E}$ to represent the average error here as opposed to sum of errors $E$ as used in the slides with $\\bar{E} = \\frac{E}{N}$. Normalising by the number of training examples is helpful to do in practice as this means we can more easily compare errors across data sets / batches of different sizes, and more importantly it means the size of our gradient updates will be independent of the number of training examples summed over.*\n",
|
|
"\n",
|
|
"The regression problem is then to find parameters of the model which minimise $\\bar{E}$. For our simple single-layer affine model here that corresponds to finding weights $\\mathbf{W}$ and biases $\\boldsymbol{b}$ which minimise $\\bar{E}$. \n",
|
|
"\n",
|
|
"As mentioned in the lecture, for this simple case there is actually a closed form solution for the optimal weights and bias parameters. This is the linear least-squares solution those doing MLPR will have come across.\n",
|
|
"\n",
|
|
"However in general we will be interested in models where closed form solutions do not exist. We will therefore generally use iterative, gradient descent based training methods to find parameters which (locally) minimise the error function. A basic requirement of being able to do gradient-descent based training is (unsuprisingly) the ability to evaluate gradients of the error function.\n",
|
|
"\n",
|
|
"In the next exercise we will consider how to calculate gradients of the error function with respect to the model parameters $\\mathbf{W}$ and $\\boldsymbol{b}$, but as a first step here we will consider the gradient of the error function with respect to the model outputs $\\left\\lbrace \\boldsymbol{y}^{(n)}\\right\\rbrace_{n=1}^N$. This can be written\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" \\frac{\\partial \\bar{E}}{\\partial \\boldsymbol{y}^{(n)}} = \\frac{1}{N} \\left( \\boldsymbol{y}^{(n)} - \\boldsymbol{t}^{(n)} \\right)\n",
|
|
" \\qquad \\Leftrightarrow \\qquad\n",
|
|
" \\frac{\\partial \\bar{E}}{\\partial y^{(n)}_k} = \\frac{1}{N} \\left( y^{(n)}_k - t^{(n)}_k \\right) \\quad \\forall k \\in \\left\\lbrace 1 \\dots K\\right\\rbrace\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"i.e. the gradient of the error function with respect to the $n^{\\textrm{th}}$ model output is just the difference between the $n^{\\textrm{th}}$ model and target outputs, corresponding to the $\\boldsymbol{\\delta}^{(n)}$ terms mentioned in the lecture slides.\n",
|
|
"\n",
|
|
"The third exercise is, using the equations given above, to implement functions computing the mean sum of squared differences error and its gradient with respect to the model outputs. You should implement the functions using the provided skeleton definitions in the cell below."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def error(outputs, targets):\n",
|
|
" \"\"\"Calculates error function given a batch of outputs and targets.\n",
|
|
"\n",
|
|
" Args:\n",
|
|
" outputs: Array of model outputs of shape (batch_size, output_dim).\n",
|
|
" targets: Array of target outputs of shape (batch_size, output_dim).\n",
|
|
"\n",
|
|
" Returns:\n",
|
|
" Scalar error function value.\n",
|
|
" \"\"\"\n",
|
|
" return 0.5 * ((outputs - targets)**2).sum() / outputs.shape[0]\n",
|
|
" \n",
|
|
"def error_grad(outputs, targets):\n",
|
|
" \"\"\"Calculates gradient of error function with respect to model outputs.\n",
|
|
"\n",
|
|
" Args:\n",
|
|
" outputs: Array of model outputs of shape (batch_size, output_dim).\n",
|
|
" targets: Array of target outputs of shape (batch_size, output_dim).\n",
|
|
"\n",
|
|
" Returns:\n",
|
|
" Gradient of error function with respect to outputs.\n",
|
|
" This will be an array of shape (batch_size, output_dim).\n",
|
|
" \"\"\"\n",
|
|
" return (outputs - targets) / outputs.shape[0]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Check your implementation by running the test cell below."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Error function and gradient computed correctly!\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"outputs = np.array([[1., 2.], [-1., 0.], [6., -5.], [-1., 1.]])\n",
|
|
"targets = np.array([[0., 1.], [3., -2.], [7., -3.], [1., -2.]])\n",
|
|
"true_error = 5.\n",
|
|
"true_error_grad = np.array([[0.25, 0.25], [-1., 0.5], [-0.25, -0.5], [-0.5, 0.75]])\n",
|
|
"\n",
|
|
"if not error(outputs, targets) == true_error:\n",
|
|
" print('Error calculated incorrectly.')\n",
|
|
"elif not np.allclose(error_grad(outputs, targets), true_error_grad):\n",
|
|
" print('Error gradient calculated incorrectly.')\n",
|
|
"else:\n",
|
|
" print('Error function and gradient computed correctly!')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Exercise 4: computing gradients with respect to the parameters\n",
|
|
"\n",
|
|
"In the previous exercise you implemented a function computing the gradient of the error function with respect to the model outputs. For gradient-descent based training, we need to be able to evaluate the gradient of the error function with respect to the model parameters.\n",
|
|
"\n",
|
|
"Using the [chain rule for derivatives](https://en.wikipedia.org/wiki/Chain_rule#Higher_dimensions) we can write the partial deriviative of the error function with respect to single elements of the weight matrix and bias vector as\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" \\frac{\\partial E}{\\partial W_{kj}} = \\sum_{n=1}^N \\left\\lbrace \\frac{\\partial E}{\\partial y^{(n)}_k} \\frac{\\partial y^{(n)}_k}{\\partial W_{kj}} \\right\\rbrace\n",
|
|
" \\quad \\textrm{and} \\quad\n",
|
|
" \\frac{\\partial E}{\\partial b_k} = \\sum_{n=1}^N \\left\\lbrace \\frac{\\partial E}{\\partial y^{(n)}_k} \\frac{\\partial y^{(n)}_k}{\\partial b_k} \\right\\rbrace.\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"From the definition of our model at the beginning we have \n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" y^{(n)}_k = \\sum_{d=1}^D \\left\\lbrace W_{kd} x^{(n)}_d \\right\\rbrace + b_k\n",
|
|
" \\quad \\Rightarrow \\quad\n",
|
|
" \\frac{\\partial y^{(n)}_k}{\\partial W_{kj}} = x^{(n)}_j\n",
|
|
" \\quad \\textrm{and} \\quad\n",
|
|
" \\frac{\\partial y^{(n)}_k}{\\partial b_k} = 1.\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"Putting this together we get that\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
" \\frac{\\partial E}{\\partial W_{kj}} = \n",
|
|
" \\sum_{n=1}^N \\left\\lbrace \\frac{\\partial E}{\\partial y^{(n)}_k} x^{(n)}_j \\right\\rbrace\n",
|
|
" \\quad \\textrm{and} \\quad\n",
|
|
" \\frac{\\partial E}{\\partial b_{k}} = \n",
|
|
" \\sum_{n=1}^N \\left\\lbrace \\frac{\\partial E}{\\partial y^{(n)}_k} \\right\\rbrace.\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"Although this may seem a bit of a roundabout way to get to these results, this method of decomposing the error gradient with respect to the parameters in terms of the gradient of the error function with respect to the model outputs and the derivatives of the model outputs with respect to the model parameters, will be key when calculating the parameter gradients of more complex models later in the course.\n",
|
|
"\n",
|
|
"Your task in this exercise is to implement a function calculating the gradient of the error function with respect to the weight and bias parameters of the model given the already computed gradient of the error function with respect to the model outputs. You should implement this in the `grads_wrt_params` function in the cell below."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def grads_wrt_params(inputs, grads_wrt_outputs):\n",
|
|
" \"\"\"Calculates gradients with respect to model parameters.\n",
|
|
"\n",
|
|
" Args:\n",
|
|
" inputs: array of inputs to model of shape (batch_size, input_dim)\n",
|
|
" grads_wrt_to_outputs: array of gradients of with respect to the model\n",
|
|
" outputs of shape (batch_size, output_dim).\n",
|
|
"\n",
|
|
" Returns:\n",
|
|
" list of arrays of gradients with respect to the model parameters\n",
|
|
" `[grads_wrt_weights, grads_wrt_biases]`.\n",
|
|
" \"\"\"\n",
|
|
" grads_wrt_weights = grads_wrt_outputs.T.dot(inputs)\n",
|
|
" grads_wrt_biases = grads_wrt_outputs.sum(0)\n",
|
|
" return [grads_wrt_weights, grads_wrt_biases]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Check your implementation by running the test cell below."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"All parameter gradients calculated correctly!\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"inputs = np.array([[1., 2., 3.], [-1., 4., -9.]])\n",
|
|
"grads_wrt_outputs = np.array([[-1., 1.], [2., -3.]])\n",
|
|
"true_grads_wrt_weights = np.array([[-3., 6., -21.], [4., -10., 30.]])\n",
|
|
"true_grads_wrt_biases = np.array([1., -2.])\n",
|
|
"\n",
|
|
"grads_wrt_weights, grads_wrt_biases = grads_wrt_params(\n",
|
|
" inputs, grads_wrt_outputs)\n",
|
|
"\n",
|
|
"if not np.allclose(true_grads_wrt_weights, grads_wrt_weights):\n",
|
|
" print('Gradients with respect to weights incorrect.')\n",
|
|
"elif not np.allclose(true_grads_wrt_biases, grads_wrt_biases):\n",
|
|
" print('Gradients with respect to biases incorrect.')\n",
|
|
"else:\n",
|
|
" print('All parameter gradients calculated correctly!')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Exercise 5: wrapping the functions into reusable components\n",
|
|
"\n",
|
|
"In exercises 1, 3 and 4 you implemented methods to compute the predicted outputs of our model, evaluate the error function and its gradient on the outputs and finally to calculate the gradients of the error with respect to the model parameters. Together they constitute all the basic ingredients we need to implement a gradient-descent based iterative learning procedure for the model.\n",
|
|
"\n",
|
|
"Although you could implement training code which directly uses the functions you defined, this would only be usable for this particular model architecture. In subsequent labs we will want to use the affine transform functions as the basis for more interesting multi-layer models. We will therefore wrap the implementations you just wrote in to reusable components that we can build more complex models with later in the course.\n",
|
|
"\n",
|
|
" * In the [`mlp.layers`](/edit/mlp/layers.py) module, use your implementations of `fprop` and `grad_wrt_params` above to implement the corresponding methods in the skeleton `AffineLayer` class provided.\n",
|
|
" * In the [`mlp.errors`](/edit/mlp/errors.py) module use your implementation of `error` and `error_grad` to implement the `__call__` and `grad` methods respectively of the skeleton `SumOfSquaredDiffsError` class provided. Note `__call__` is a special Python method that allows an object to be used with a function call syntax.\n",
|
|
"\n",
|
|
"Run the cell below to use your completed `AffineLayer` and `SumOfSquaredDiffsError` implementations to train a single-layer model using batch gradient descent on the CCPP dataset."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 1: 0.0s to complete\n",
|
|
" error(train)=1.67e-01\n",
|
|
"Epoch 2: 0.0s to complete\n",
|
|
" error(train)=9.30e-02\n",
|
|
"Epoch 3: 0.0s to complete\n",
|
|
" error(train)=7.95e-02\n",
|
|
"Epoch 4: 0.0s to complete\n",
|
|
" error(train)=7.71e-02\n",
|
|
"Epoch 5: 0.0s to complete\n",
|
|
" error(train)=7.66e-02\n",
|
|
"Epoch 6: 0.0s to complete\n",
|
|
" error(train)=7.65e-02\n",
|
|
"Epoch 7: 0.0s to complete\n",
|
|
" error(train)=7.65e-02\n",
|
|
"Epoch 8: 0.0s to complete\n",
|
|
" error(train)=7.65e-02\n",
|
|
"Epoch 9: 0.0s to complete\n",
|
|
" error(train)=7.63e-02\n",
|
|
"Epoch 10: 0.0s to complete\n",
|
|
" error(train)=7.64e-02\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"application/javascript": [
|
|
"/* Put everything inside the global mpl namespace */\n",
|
|
"window.mpl = {};\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.get_websocket_type = function() {\n",
|
|
" if (typeof(WebSocket) !== 'undefined') {\n",
|
|
" return WebSocket;\n",
|
|
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
|
|
" return MozWebSocket;\n",
|
|
" } else {\n",
|
|
" alert('Your browser does not have WebSocket support.' +\n",
|
|
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
|
|
" 'Firefox 4 and 5 are also supported but you ' +\n",
|
|
" 'have to enable WebSockets in about:config.');\n",
|
|
" };\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
|
|
" this.id = figure_id;\n",
|
|
"\n",
|
|
" this.ws = websocket;\n",
|
|
"\n",
|
|
" this.supports_binary = (this.ws.binaryType != undefined);\n",
|
|
"\n",
|
|
" if (!this.supports_binary) {\n",
|
|
" var warnings = document.getElementById(\"mpl-warnings\");\n",
|
|
" if (warnings) {\n",
|
|
" warnings.style.display = 'block';\n",
|
|
" warnings.textContent = (\n",
|
|
" \"This browser does not support binary websocket messages. \" +\n",
|
|
" \"Performance may be slow.\");\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.imageObj = new Image();\n",
|
|
"\n",
|
|
" this.context = undefined;\n",
|
|
" this.message = undefined;\n",
|
|
" this.canvas = undefined;\n",
|
|
" this.rubberband_canvas = undefined;\n",
|
|
" this.rubberband_context = undefined;\n",
|
|
" this.format_dropdown = undefined;\n",
|
|
"\n",
|
|
" this.image_mode = 'full';\n",
|
|
"\n",
|
|
" this.root = $('<div/>');\n",
|
|
" this._root_extra_style(this.root)\n",
|
|
" this.root.attr('style', 'display: inline-block');\n",
|
|
"\n",
|
|
" $(parent_element).append(this.root);\n",
|
|
"\n",
|
|
" this._init_header(this);\n",
|
|
" this._init_canvas(this);\n",
|
|
" this._init_toolbar(this);\n",
|
|
"\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" this.waiting = false;\n",
|
|
"\n",
|
|
" this.ws.onopen = function () {\n",
|
|
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
|
|
" fig.send_message(\"send_image_mode\", {});\n",
|
|
" if (mpl.ratio != 1) {\n",
|
|
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
|
|
" }\n",
|
|
" fig.send_message(\"refresh\", {});\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.imageObj.onload = function() {\n",
|
|
" if (fig.image_mode == 'full') {\n",
|
|
" // Full images could contain transparency (where diff images\n",
|
|
" // almost always do), so we need to clear the canvas so that\n",
|
|
" // there is no ghosting.\n",
|
|
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
|
|
" }\n",
|
|
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
|
|
" };\n",
|
|
"\n",
|
|
" this.imageObj.onunload = function() {\n",
|
|
" this.ws.close();\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.ws.onmessage = this._make_on_message_function(this);\n",
|
|
"\n",
|
|
" this.ondownload = ondownload;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_header = function() {\n",
|
|
" var titlebar = $(\n",
|
|
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
|
|
" 'ui-helper-clearfix\"/>');\n",
|
|
" var titletext = $(\n",
|
|
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
|
|
" 'text-align: center; padding: 3px;\"/>');\n",
|
|
" titlebar.append(titletext)\n",
|
|
" this.root.append(titlebar);\n",
|
|
" this.header = titletext[0];\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
|
|
"\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
|
|
"\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_canvas = function() {\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" var canvas_div = $('<div/>');\n",
|
|
"\n",
|
|
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
|
|
"\n",
|
|
" function canvas_keyboard_event(event) {\n",
|
|
" return fig.key_event(event, event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
|
|
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
|
|
" this.canvas_div = canvas_div\n",
|
|
" this._canvas_extra_style(canvas_div)\n",
|
|
" this.root.append(canvas_div);\n",
|
|
"\n",
|
|
" var canvas = $('<canvas/>');\n",
|
|
" canvas.addClass('mpl-canvas');\n",
|
|
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
|
|
"\n",
|
|
" this.canvas = canvas[0];\n",
|
|
" this.context = canvas[0].getContext(\"2d\");\n",
|
|
"\n",
|
|
" var backingStore = this.context.backingStorePixelRatio ||\n",
|
|
"\tthis.context.webkitBackingStorePixelRatio ||\n",
|
|
"\tthis.context.mozBackingStorePixelRatio ||\n",
|
|
"\tthis.context.msBackingStorePixelRatio ||\n",
|
|
"\tthis.context.oBackingStorePixelRatio ||\n",
|
|
"\tthis.context.backingStorePixelRatio || 1;\n",
|
|
"\n",
|
|
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
|
|
"\n",
|
|
" var rubberband = $('<canvas/>');\n",
|
|
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
|
|
"\n",
|
|
" var pass_mouse_events = true;\n",
|
|
"\n",
|
|
" canvas_div.resizable({\n",
|
|
" start: function(event, ui) {\n",
|
|
" pass_mouse_events = false;\n",
|
|
" },\n",
|
|
" resize: function(event, ui) {\n",
|
|
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
|
" },\n",
|
|
" stop: function(event, ui) {\n",
|
|
" pass_mouse_events = true;\n",
|
|
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
|
" },\n",
|
|
" });\n",
|
|
"\n",
|
|
" function mouse_event_fn(event) {\n",
|
|
" if (pass_mouse_events)\n",
|
|
" return fig.mouse_event(event, event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" rubberband.mousedown('button_press', mouse_event_fn);\n",
|
|
" rubberband.mouseup('button_release', mouse_event_fn);\n",
|
|
" // Throttle sequential mouse events to 1 every 20ms.\n",
|
|
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
|
|
"\n",
|
|
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
|
|
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
|
|
"\n",
|
|
" canvas_div.on(\"wheel\", function (event) {\n",
|
|
" event = event.originalEvent;\n",
|
|
" event['data'] = 'scroll'\n",
|
|
" if (event.deltaY < 0) {\n",
|
|
" event.step = 1;\n",
|
|
" } else {\n",
|
|
" event.step = -1;\n",
|
|
" }\n",
|
|
" mouse_event_fn(event);\n",
|
|
" });\n",
|
|
"\n",
|
|
" canvas_div.append(canvas);\n",
|
|
" canvas_div.append(rubberband);\n",
|
|
"\n",
|
|
" this.rubberband = rubberband;\n",
|
|
" this.rubberband_canvas = rubberband[0];\n",
|
|
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
|
|
" this.rubberband_context.strokeStyle = \"#000000\";\n",
|
|
"\n",
|
|
" this._resize_canvas = function(width, height) {\n",
|
|
" // Keep the size of the canvas, canvas container, and rubber band\n",
|
|
" // canvas in synch.\n",
|
|
" canvas_div.css('width', width)\n",
|
|
" canvas_div.css('height', height)\n",
|
|
"\n",
|
|
" canvas.attr('width', width * mpl.ratio);\n",
|
|
" canvas.attr('height', height * mpl.ratio);\n",
|
|
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
|
|
"\n",
|
|
" rubberband.attr('width', width);\n",
|
|
" rubberband.attr('height', height);\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
|
|
" // upon first draw.\n",
|
|
" this._resize_canvas(600, 600);\n",
|
|
"\n",
|
|
" // Disable right mouse context menu.\n",
|
|
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
|
|
" return false;\n",
|
|
" });\n",
|
|
"\n",
|
|
" function set_focus () {\n",
|
|
" canvas.focus();\n",
|
|
" canvas_div.focus();\n",
|
|
" }\n",
|
|
"\n",
|
|
" window.setTimeout(set_focus, 100);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_toolbar = function() {\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" var nav_element = $('<div/>')\n",
|
|
" nav_element.attr('style', 'width: 100%');\n",
|
|
" this.root.append(nav_element);\n",
|
|
"\n",
|
|
" // Define a callback function for later on.\n",
|
|
" function toolbar_event(event) {\n",
|
|
" return fig.toolbar_button_onclick(event['data']);\n",
|
|
" }\n",
|
|
" function toolbar_mouse_event(event) {\n",
|
|
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" for(var toolbar_ind in mpl.toolbar_items) {\n",
|
|
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
|
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
|
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
|
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
|
"\n",
|
|
" if (!name) {\n",
|
|
" // put a spacer in here.\n",
|
|
" continue;\n",
|
|
" }\n",
|
|
" var button = $('<button/>');\n",
|
|
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
|
|
" 'ui-button-icon-only');\n",
|
|
" button.attr('role', 'button');\n",
|
|
" button.attr('aria-disabled', 'false');\n",
|
|
" button.click(method_name, toolbar_event);\n",
|
|
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
|
"\n",
|
|
" var icon_img = $('<span/>');\n",
|
|
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
|
|
" icon_img.addClass(image);\n",
|
|
" icon_img.addClass('ui-corner-all');\n",
|
|
"\n",
|
|
" var tooltip_span = $('<span/>');\n",
|
|
" tooltip_span.addClass('ui-button-text');\n",
|
|
" tooltip_span.html(tooltip);\n",
|
|
"\n",
|
|
" button.append(icon_img);\n",
|
|
" button.append(tooltip_span);\n",
|
|
"\n",
|
|
" nav_element.append(button);\n",
|
|
" }\n",
|
|
"\n",
|
|
" var fmt_picker_span = $('<span/>');\n",
|
|
"\n",
|
|
" var fmt_picker = $('<select/>');\n",
|
|
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
|
|
" fmt_picker_span.append(fmt_picker);\n",
|
|
" nav_element.append(fmt_picker_span);\n",
|
|
" this.format_dropdown = fmt_picker[0];\n",
|
|
"\n",
|
|
" for (var ind in mpl.extensions) {\n",
|
|
" var fmt = mpl.extensions[ind];\n",
|
|
" var option = $(\n",
|
|
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
|
|
" fmt_picker.append(option)\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Add hover states to the ui-buttons\n",
|
|
" $( \".ui-button\" ).hover(\n",
|
|
" function() { $(this).addClass(\"ui-state-hover\");},\n",
|
|
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
|
|
" );\n",
|
|
"\n",
|
|
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
|
|
" nav_element.append(status_bar);\n",
|
|
" this.message = status_bar[0];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
|
|
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
|
|
" // which will in turn request a refresh of the image.\n",
|
|
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.send_message = function(type, properties) {\n",
|
|
" properties['type'] = type;\n",
|
|
" properties['figure_id'] = this.id;\n",
|
|
" this.ws.send(JSON.stringify(properties));\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.send_draw_message = function() {\n",
|
|
" if (!this.waiting) {\n",
|
|
" this.waiting = true;\n",
|
|
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
|
" var format_dropdown = fig.format_dropdown;\n",
|
|
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
|
|
" fig.ondownload(fig, format);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
|
|
" var size = msg['size'];\n",
|
|
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
|
|
" fig._resize_canvas(size[0], size[1]);\n",
|
|
" fig.send_message(\"refresh\", {});\n",
|
|
" };\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
|
|
" var x0 = msg['x0'] / mpl.ratio;\n",
|
|
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
|
|
" var x1 = msg['x1'] / mpl.ratio;\n",
|
|
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
|
|
" x0 = Math.floor(x0) + 0.5;\n",
|
|
" y0 = Math.floor(y0) + 0.5;\n",
|
|
" x1 = Math.floor(x1) + 0.5;\n",
|
|
" y1 = Math.floor(y1) + 0.5;\n",
|
|
" var min_x = Math.min(x0, x1);\n",
|
|
" var min_y = Math.min(y0, y1);\n",
|
|
" var width = Math.abs(x1 - x0);\n",
|
|
" var height = Math.abs(y1 - y0);\n",
|
|
"\n",
|
|
" fig.rubberband_context.clearRect(\n",
|
|
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
|
|
"\n",
|
|
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
|
|
" // Updates the figure title.\n",
|
|
" fig.header.textContent = msg['label'];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
|
|
" var cursor = msg['cursor'];\n",
|
|
" switch(cursor)\n",
|
|
" {\n",
|
|
" case 0:\n",
|
|
" cursor = 'pointer';\n",
|
|
" break;\n",
|
|
" case 1:\n",
|
|
" cursor = 'default';\n",
|
|
" break;\n",
|
|
" case 2:\n",
|
|
" cursor = 'crosshair';\n",
|
|
" break;\n",
|
|
" case 3:\n",
|
|
" cursor = 'move';\n",
|
|
" break;\n",
|
|
" }\n",
|
|
" fig.rubberband_canvas.style.cursor = cursor;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
|
|
" fig.message.textContent = msg['message'];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
|
|
" // Request the server to send over a new figure.\n",
|
|
" fig.send_draw_message();\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
|
|
" fig.image_mode = msg['mode'];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
|
" // Called whenever the canvas gets updated.\n",
|
|
" this.send_message(\"ack\", {});\n",
|
|
"}\n",
|
|
"\n",
|
|
"// A function to construct a web socket function for onmessage handling.\n",
|
|
"// Called in the figure constructor.\n",
|
|
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
|
|
" return function socket_on_message(evt) {\n",
|
|
" if (evt.data instanceof Blob) {\n",
|
|
" /* FIXME: We get \"Resource interpreted as Image but\n",
|
|
" * transferred with MIME type text/plain:\" errors on\n",
|
|
" * Chrome. But how to set the MIME type? It doesn't seem\n",
|
|
" * to be part of the websocket stream */\n",
|
|
" evt.data.type = \"image/png\";\n",
|
|
"\n",
|
|
" /* Free the memory for the previous frames */\n",
|
|
" if (fig.imageObj.src) {\n",
|
|
" (window.URL || window.webkitURL).revokeObjectURL(\n",
|
|
" fig.imageObj.src);\n",
|
|
" }\n",
|
|
"\n",
|
|
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
|
|
" evt.data);\n",
|
|
" fig.updated_canvas_event();\n",
|
|
" fig.waiting = false;\n",
|
|
" return;\n",
|
|
" }\n",
|
|
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
|
|
" fig.imageObj.src = evt.data;\n",
|
|
" fig.updated_canvas_event();\n",
|
|
" fig.waiting = false;\n",
|
|
" return;\n",
|
|
" }\n",
|
|
"\n",
|
|
" var msg = JSON.parse(evt.data);\n",
|
|
" var msg_type = msg['type'];\n",
|
|
"\n",
|
|
" // Call the \"handle_{type}\" callback, which takes\n",
|
|
" // the figure and JSON message as its only arguments.\n",
|
|
" try {\n",
|
|
" var callback = fig[\"handle_\" + msg_type];\n",
|
|
" } catch (e) {\n",
|
|
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
|
|
" return;\n",
|
|
" }\n",
|
|
"\n",
|
|
" if (callback) {\n",
|
|
" try {\n",
|
|
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
|
|
" callback(fig, msg);\n",
|
|
" } catch (e) {\n",
|
|
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
|
|
" }\n",
|
|
" }\n",
|
|
" };\n",
|
|
"}\n",
|
|
"\n",
|
|
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
|
|
"mpl.findpos = function(e) {\n",
|
|
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
|
|
" var targ;\n",
|
|
" if (!e)\n",
|
|
" e = window.event;\n",
|
|
" if (e.target)\n",
|
|
" targ = e.target;\n",
|
|
" else if (e.srcElement)\n",
|
|
" targ = e.srcElement;\n",
|
|
" if (targ.nodeType == 3) // defeat Safari bug\n",
|
|
" targ = targ.parentNode;\n",
|
|
"\n",
|
|
" // jQuery normalizes the pageX and pageY\n",
|
|
" // pageX,Y are the mouse positions relative to the document\n",
|
|
" // offset() returns the position of the element relative to the document\n",
|
|
" var x = e.pageX - $(targ).offset().left;\n",
|
|
" var y = e.pageY - $(targ).offset().top;\n",
|
|
"\n",
|
|
" return {\"x\": x, \"y\": y};\n",
|
|
"};\n",
|
|
"\n",
|
|
"/*\n",
|
|
" * return a copy of an object with only non-object keys\n",
|
|
" * we need this to avoid circular references\n",
|
|
" * http://stackoverflow.com/a/24161582/3208463\n",
|
|
" */\n",
|
|
"function simpleKeys (original) {\n",
|
|
" return Object.keys(original).reduce(function (obj, key) {\n",
|
|
" if (typeof original[key] !== 'object')\n",
|
|
" obj[key] = original[key]\n",
|
|
" return obj;\n",
|
|
" }, {});\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
|
|
" var canvas_pos = mpl.findpos(event)\n",
|
|
"\n",
|
|
" if (name === 'button_press')\n",
|
|
" {\n",
|
|
" this.canvas.focus();\n",
|
|
" this.canvas_div.focus();\n",
|
|
" }\n",
|
|
"\n",
|
|
" var x = canvas_pos.x * mpl.ratio;\n",
|
|
" var y = canvas_pos.y * mpl.ratio;\n",
|
|
"\n",
|
|
" this.send_message(name, {x: x, y: y, button: event.button,\n",
|
|
" step: event.step,\n",
|
|
" guiEvent: simpleKeys(event)});\n",
|
|
"\n",
|
|
" /* This prevents the web browser from automatically changing to\n",
|
|
" * the text insertion cursor when the button is pressed. We want\n",
|
|
" * to control all of the cursor setting manually through the\n",
|
|
" * 'cursor' event from matplotlib */\n",
|
|
" event.preventDefault();\n",
|
|
" return false;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
|
" // Handle any extra behaviour associated with a key event\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.key_event = function(event, name) {\n",
|
|
"\n",
|
|
" // Prevent repeat events\n",
|
|
" if (name == 'key_press')\n",
|
|
" {\n",
|
|
" if (event.which === this._key)\n",
|
|
" return;\n",
|
|
" else\n",
|
|
" this._key = event.which;\n",
|
|
" }\n",
|
|
" if (name == 'key_release')\n",
|
|
" this._key = null;\n",
|
|
"\n",
|
|
" var value = '';\n",
|
|
" if (event.ctrlKey && event.which != 17)\n",
|
|
" value += \"ctrl+\";\n",
|
|
" if (event.altKey && event.which != 18)\n",
|
|
" value += \"alt+\";\n",
|
|
" if (event.shiftKey && event.which != 16)\n",
|
|
" value += \"shift+\";\n",
|
|
"\n",
|
|
" value += 'k';\n",
|
|
" value += event.which.toString();\n",
|
|
"\n",
|
|
" this._key_event_extra(event, name);\n",
|
|
"\n",
|
|
" this.send_message(name, {key: value,\n",
|
|
" guiEvent: simpleKeys(event)});\n",
|
|
" return false;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
|
|
" if (name == 'download') {\n",
|
|
" this.handle_save(this, null);\n",
|
|
" } else {\n",
|
|
" this.send_message(\"toolbar_button\", {name: name});\n",
|
|
" }\n",
|
|
"};\n",
|
|
"\n",
|
|
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
|
|
" this.message.textContent = tooltip;\n",
|
|
"};\n",
|
|
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
|
|
"\n",
|
|
"mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
|
|
"\n",
|
|
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
|
|
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
|
|
" // object with the appropriate methods. Currently this is a non binary\n",
|
|
" // socket, so there is still some room for performance tuning.\n",
|
|
" var ws = {};\n",
|
|
"\n",
|
|
" ws.close = function() {\n",
|
|
" comm.close()\n",
|
|
" };\n",
|
|
" ws.send = function(m) {\n",
|
|
" //console.log('sending', m);\n",
|
|
" comm.send(m);\n",
|
|
" };\n",
|
|
" // Register the callback with on_msg.\n",
|
|
" comm.on_msg(function(msg) {\n",
|
|
" //console.log('receiving', msg['content']['data'], msg);\n",
|
|
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
|
|
" ws.onmessage(msg['content']['data'])\n",
|
|
" });\n",
|
|
" return ws;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.mpl_figure_comm = function(comm, msg) {\n",
|
|
" // This is the function which gets called when the mpl process\n",
|
|
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
|
|
"\n",
|
|
" var id = msg.content.data.id;\n",
|
|
" // Get hold of the div created by the display call when the Comm\n",
|
|
" // socket was opened in Python.\n",
|
|
" var element = $(\"#\" + id);\n",
|
|
" var ws_proxy = comm_websocket_adapter(comm)\n",
|
|
"\n",
|
|
" function ondownload(figure, format) {\n",
|
|
" window.open(figure.imageObj.src);\n",
|
|
" }\n",
|
|
"\n",
|
|
" var fig = new mpl.figure(id, ws_proxy,\n",
|
|
" ondownload,\n",
|
|
" element.get(0));\n",
|
|
"\n",
|
|
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
|
|
" // web socket which is closed, not our websocket->open comm proxy.\n",
|
|
" ws_proxy.onopen();\n",
|
|
"\n",
|
|
" fig.parent_element = element.get(0);\n",
|
|
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
|
|
" if (!fig.cell_info) {\n",
|
|
" console.error(\"Failed to find cell for figure\", id, fig);\n",
|
|
" return;\n",
|
|
" }\n",
|
|
"\n",
|
|
" var output_index = fig.cell_info[2]\n",
|
|
" var cell = fig.cell_info[0];\n",
|
|
"\n",
|
|
"};\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
|
|
" var width = fig.canvas.width/mpl.ratio\n",
|
|
" fig.root.unbind('remove')\n",
|
|
"\n",
|
|
" // Update the output cell to use the data from the current canvas.\n",
|
|
" fig.push_to_output();\n",
|
|
" var dataURL = fig.canvas.toDataURL();\n",
|
|
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
|
|
" // the notebook keyboard shortcuts fail.\n",
|
|
" IPython.keyboard_manager.enable()\n",
|
|
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
|
|
" fig.close_ws(fig, msg);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
|
|
" fig.send_message('closing', msg);\n",
|
|
" // fig.ws.close()\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
|
|
" // Turn the data on the canvas into data in the output cell.\n",
|
|
" var width = this.canvas.width/mpl.ratio\n",
|
|
" var dataURL = this.canvas.toDataURL();\n",
|
|
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
|
" // Tell IPython that the notebook contents must change.\n",
|
|
" IPython.notebook.set_dirty(true);\n",
|
|
" this.send_message(\"ack\", {});\n",
|
|
" var fig = this;\n",
|
|
" // Wait a second, then push the new image to the DOM so\n",
|
|
" // that it is saved nicely (might be nice to debounce this).\n",
|
|
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_toolbar = function() {\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" var nav_element = $('<div/>')\n",
|
|
" nav_element.attr('style', 'width: 100%');\n",
|
|
" this.root.append(nav_element);\n",
|
|
"\n",
|
|
" // Define a callback function for later on.\n",
|
|
" function toolbar_event(event) {\n",
|
|
" return fig.toolbar_button_onclick(event['data']);\n",
|
|
" }\n",
|
|
" function toolbar_mouse_event(event) {\n",
|
|
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" for(var toolbar_ind in mpl.toolbar_items){\n",
|
|
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
|
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
|
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
|
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
|
"\n",
|
|
" if (!name) { continue; };\n",
|
|
"\n",
|
|
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
|
|
" button.click(method_name, toolbar_event);\n",
|
|
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
|
" nav_element.append(button);\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Add the status bar.\n",
|
|
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
|
|
" nav_element.append(status_bar);\n",
|
|
" this.message = status_bar[0];\n",
|
|
"\n",
|
|
" // Add the close button to the window.\n",
|
|
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
|
|
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
|
|
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
|
|
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
|
|
" buttongrp.append(button);\n",
|
|
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
|
|
" titlebar.prepend(buttongrp);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._root_extra_style = function(el){\n",
|
|
" var fig = this\n",
|
|
" el.on(\"remove\", function(){\n",
|
|
"\tfig.close_ws(fig, {});\n",
|
|
" });\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
|
|
" // this is important to make the div 'focusable\n",
|
|
" el.attr('tabindex', 0)\n",
|
|
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
|
|
" // off when our div gets focus\n",
|
|
"\n",
|
|
" // location in version 3\n",
|
|
" if (IPython.notebook.keyboard_manager) {\n",
|
|
" IPython.notebook.keyboard_manager.register_events(el);\n",
|
|
" }\n",
|
|
" else {\n",
|
|
" // location in version 2\n",
|
|
" IPython.keyboard_manager.register_events(el);\n",
|
|
" }\n",
|
|
"\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
|
" var manager = IPython.notebook.keyboard_manager;\n",
|
|
" if (!manager)\n",
|
|
" manager = IPython.keyboard_manager;\n",
|
|
"\n",
|
|
" // Check for shift+enter\n",
|
|
" if (event.shiftKey && event.which == 13) {\n",
|
|
" this.canvas_div.blur();\n",
|
|
" // select the cell after this one\n",
|
|
" var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
|
|
" IPython.notebook.select(index + 1);\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
|
" fig.ondownload(fig, null);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.find_output_cell = function(html_output) {\n",
|
|
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
|
|
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
|
|
" // IPython event is triggered only after the cells have been serialised, which for\n",
|
|
" // our purposes (turning an active figure into a static one), is too late.\n",
|
|
" var cells = IPython.notebook.get_cells();\n",
|
|
" var ncells = cells.length;\n",
|
|
" for (var i=0; i<ncells; i++) {\n",
|
|
" var cell = cells[i];\n",
|
|
" if (cell.cell_type === 'code'){\n",
|
|
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
|
|
" var data = cell.output_area.outputs[j];\n",
|
|
" if (data.data) {\n",
|
|
" // IPython >= 3 moved mimebundle to data attribute of output\n",
|
|
" data = data.data;\n",
|
|
" }\n",
|
|
" if (data['text/html'] == html_output) {\n",
|
|
" return [cell, data, j];\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"// Register the function which deals with the matplotlib target/channel.\n",
|
|
"// The kernel may be null if the page has been refreshed.\n",
|
|
"if (IPython.notebook.kernel != null) {\n",
|
|
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
|
|
"}\n"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.Javascript object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<img src=\"data:image/png;base64,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\" width=\"800\">"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.HTML object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<matplotlib.text.Text at 0x7f2e8c192e80>"
|
|
]
|
|
},
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from mlp.layers import AffineLayer\n",
|
|
"from mlp.errors import SumOfSquaredDiffsError\n",
|
|
"from mlp.models import SingleLayerModel\n",
|
|
"from mlp.initialisers import UniformInit, ConstantInit\n",
|
|
"from mlp.learning_rules import GradientDescentLearningRule\n",
|
|
"from mlp.optimisers import Optimiser\n",
|
|
"import logging\n",
|
|
"\n",
|
|
"# Seed a random number generator\n",
|
|
"seed = 27092016 \n",
|
|
"rng = np.random.RandomState(seed)\n",
|
|
"\n",
|
|
"# Set up a logger object to print info about the training run to stdout\n",
|
|
"logger = logging.getLogger()\n",
|
|
"logger.setLevel(logging.INFO)\n",
|
|
"logger.handlers = [logging.StreamHandler()]\n",
|
|
"\n",
|
|
"# Create data provider objects for the CCPP training set\n",
|
|
"train_data = CCPPDataProvider('train', [0, 1], batch_size=100, rng=rng)\n",
|
|
"input_dim, output_dim = 2, 1\n",
|
|
"\n",
|
|
"# Create a parameter initialiser which will sample random uniform values\n",
|
|
"# from [-0.1, 0.1]\n",
|
|
"param_init = UniformInit(-0.1, 0.1, rng=rng)\n",
|
|
"\n",
|
|
"# Create our single layer model\n",
|
|
"layer = AffineLayer(input_dim, output_dim, param_init, param_init)\n",
|
|
"model = SingleLayerModel(layer)\n",
|
|
"\n",
|
|
"# Initialise the error object\n",
|
|
"error = SumOfSquaredDiffsError()\n",
|
|
"\n",
|
|
"# Use a basic gradient descent learning rule with a small learning rate\n",
|
|
"learning_rule = GradientDescentLearningRule(learning_rate=1e-2)\n",
|
|
"\n",
|
|
"# Use the created objects to initialise a new Optimiser instance.\n",
|
|
"optimiser = Optimiser(model, error, learning_rule, train_data)\n",
|
|
"\n",
|
|
"# Run the optimiser for 5 epochs (full passes through the training set)\n",
|
|
"# printing statistics every epoch.\n",
|
|
"stats, keys, _ = optimiser.train(num_epochs=10, stats_interval=1)\n",
|
|
"\n",
|
|
"# Plot the change in the error over training.\n",
|
|
"fig = plt.figure(figsize=(8, 4))\n",
|
|
"ax = fig.add_subplot(111)\n",
|
|
"ax.plot(np.arange(1, stats.shape[0] + 1), stats[:, keys['error(train)']])\n",
|
|
"ax.set_xlabel('Epoch number')\n",
|
|
"ax.set_ylabel('Error')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Using similar code to previously we can now visualise the joint input-output space for the trained model. If you implemented the required methods correctly you should now see a much improved fit between predicted and target outputs when running the cell below."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"application/javascript": [
|
|
"/* Put everything inside the global mpl namespace */\n",
|
|
"window.mpl = {};\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.get_websocket_type = function() {\n",
|
|
" if (typeof(WebSocket) !== 'undefined') {\n",
|
|
" return WebSocket;\n",
|
|
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
|
|
" return MozWebSocket;\n",
|
|
" } else {\n",
|
|
" alert('Your browser does not have WebSocket support.' +\n",
|
|
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
|
|
" 'Firefox 4 and 5 are also supported but you ' +\n",
|
|
" 'have to enable WebSockets in about:config.');\n",
|
|
" };\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
|
|
" this.id = figure_id;\n",
|
|
"\n",
|
|
" this.ws = websocket;\n",
|
|
"\n",
|
|
" this.supports_binary = (this.ws.binaryType != undefined);\n",
|
|
"\n",
|
|
" if (!this.supports_binary) {\n",
|
|
" var warnings = document.getElementById(\"mpl-warnings\");\n",
|
|
" if (warnings) {\n",
|
|
" warnings.style.display = 'block';\n",
|
|
" warnings.textContent = (\n",
|
|
" \"This browser does not support binary websocket messages. \" +\n",
|
|
" \"Performance may be slow.\");\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.imageObj = new Image();\n",
|
|
"\n",
|
|
" this.context = undefined;\n",
|
|
" this.message = undefined;\n",
|
|
" this.canvas = undefined;\n",
|
|
" this.rubberband_canvas = undefined;\n",
|
|
" this.rubberband_context = undefined;\n",
|
|
" this.format_dropdown = undefined;\n",
|
|
"\n",
|
|
" this.image_mode = 'full';\n",
|
|
"\n",
|
|
" this.root = $('<div/>');\n",
|
|
" this._root_extra_style(this.root)\n",
|
|
" this.root.attr('style', 'display: inline-block');\n",
|
|
"\n",
|
|
" $(parent_element).append(this.root);\n",
|
|
"\n",
|
|
" this._init_header(this);\n",
|
|
" this._init_canvas(this);\n",
|
|
" this._init_toolbar(this);\n",
|
|
"\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" this.waiting = false;\n",
|
|
"\n",
|
|
" this.ws.onopen = function () {\n",
|
|
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
|
|
" fig.send_message(\"send_image_mode\", {});\n",
|
|
" if (mpl.ratio != 1) {\n",
|
|
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
|
|
" }\n",
|
|
" fig.send_message(\"refresh\", {});\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.imageObj.onload = function() {\n",
|
|
" if (fig.image_mode == 'full') {\n",
|
|
" // Full images could contain transparency (where diff images\n",
|
|
" // almost always do), so we need to clear the canvas so that\n",
|
|
" // there is no ghosting.\n",
|
|
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
|
|
" }\n",
|
|
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
|
|
" };\n",
|
|
"\n",
|
|
" this.imageObj.onunload = function() {\n",
|
|
" this.ws.close();\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.ws.onmessage = this._make_on_message_function(this);\n",
|
|
"\n",
|
|
" this.ondownload = ondownload;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_header = function() {\n",
|
|
" var titlebar = $(\n",
|
|
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
|
|
" 'ui-helper-clearfix\"/>');\n",
|
|
" var titletext = $(\n",
|
|
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
|
|
" 'text-align: center; padding: 3px;\"/>');\n",
|
|
" titlebar.append(titletext)\n",
|
|
" this.root.append(titlebar);\n",
|
|
" this.header = titletext[0];\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
|
|
"\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
|
|
"\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_canvas = function() {\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" var canvas_div = $('<div/>');\n",
|
|
"\n",
|
|
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
|
|
"\n",
|
|
" function canvas_keyboard_event(event) {\n",
|
|
" return fig.key_event(event, event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
|
|
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
|
|
" this.canvas_div = canvas_div\n",
|
|
" this._canvas_extra_style(canvas_div)\n",
|
|
" this.root.append(canvas_div);\n",
|
|
"\n",
|
|
" var canvas = $('<canvas/>');\n",
|
|
" canvas.addClass('mpl-canvas');\n",
|
|
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
|
|
"\n",
|
|
" this.canvas = canvas[0];\n",
|
|
" this.context = canvas[0].getContext(\"2d\");\n",
|
|
"\n",
|
|
" var backingStore = this.context.backingStorePixelRatio ||\n",
|
|
"\tthis.context.webkitBackingStorePixelRatio ||\n",
|
|
"\tthis.context.mozBackingStorePixelRatio ||\n",
|
|
"\tthis.context.msBackingStorePixelRatio ||\n",
|
|
"\tthis.context.oBackingStorePixelRatio ||\n",
|
|
"\tthis.context.backingStorePixelRatio || 1;\n",
|
|
"\n",
|
|
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
|
|
"\n",
|
|
" var rubberband = $('<canvas/>');\n",
|
|
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
|
|
"\n",
|
|
" var pass_mouse_events = true;\n",
|
|
"\n",
|
|
" canvas_div.resizable({\n",
|
|
" start: function(event, ui) {\n",
|
|
" pass_mouse_events = false;\n",
|
|
" },\n",
|
|
" resize: function(event, ui) {\n",
|
|
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
|
" },\n",
|
|
" stop: function(event, ui) {\n",
|
|
" pass_mouse_events = true;\n",
|
|
" fig.request_resize(ui.size.width, ui.size.height);\n",
|
|
" },\n",
|
|
" });\n",
|
|
"\n",
|
|
" function mouse_event_fn(event) {\n",
|
|
" if (pass_mouse_events)\n",
|
|
" return fig.mouse_event(event, event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" rubberband.mousedown('button_press', mouse_event_fn);\n",
|
|
" rubberband.mouseup('button_release', mouse_event_fn);\n",
|
|
" // Throttle sequential mouse events to 1 every 20ms.\n",
|
|
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
|
|
"\n",
|
|
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
|
|
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
|
|
"\n",
|
|
" canvas_div.on(\"wheel\", function (event) {\n",
|
|
" event = event.originalEvent;\n",
|
|
" event['data'] = 'scroll'\n",
|
|
" if (event.deltaY < 0) {\n",
|
|
" event.step = 1;\n",
|
|
" } else {\n",
|
|
" event.step = -1;\n",
|
|
" }\n",
|
|
" mouse_event_fn(event);\n",
|
|
" });\n",
|
|
"\n",
|
|
" canvas_div.append(canvas);\n",
|
|
" canvas_div.append(rubberband);\n",
|
|
"\n",
|
|
" this.rubberband = rubberband;\n",
|
|
" this.rubberband_canvas = rubberband[0];\n",
|
|
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
|
|
" this.rubberband_context.strokeStyle = \"#000000\";\n",
|
|
"\n",
|
|
" this._resize_canvas = function(width, height) {\n",
|
|
" // Keep the size of the canvas, canvas container, and rubber band\n",
|
|
" // canvas in synch.\n",
|
|
" canvas_div.css('width', width)\n",
|
|
" canvas_div.css('height', height)\n",
|
|
"\n",
|
|
" canvas.attr('width', width * mpl.ratio);\n",
|
|
" canvas.attr('height', height * mpl.ratio);\n",
|
|
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
|
|
"\n",
|
|
" rubberband.attr('width', width);\n",
|
|
" rubberband.attr('height', height);\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
|
|
" // upon first draw.\n",
|
|
" this._resize_canvas(600, 600);\n",
|
|
"\n",
|
|
" // Disable right mouse context menu.\n",
|
|
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
|
|
" return false;\n",
|
|
" });\n",
|
|
"\n",
|
|
" function set_focus () {\n",
|
|
" canvas.focus();\n",
|
|
" canvas_div.focus();\n",
|
|
" }\n",
|
|
"\n",
|
|
" window.setTimeout(set_focus, 100);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_toolbar = function() {\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" var nav_element = $('<div/>')\n",
|
|
" nav_element.attr('style', 'width: 100%');\n",
|
|
" this.root.append(nav_element);\n",
|
|
"\n",
|
|
" // Define a callback function for later on.\n",
|
|
" function toolbar_event(event) {\n",
|
|
" return fig.toolbar_button_onclick(event['data']);\n",
|
|
" }\n",
|
|
" function toolbar_mouse_event(event) {\n",
|
|
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" for(var toolbar_ind in mpl.toolbar_items) {\n",
|
|
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
|
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
|
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
|
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
|
"\n",
|
|
" if (!name) {\n",
|
|
" // put a spacer in here.\n",
|
|
" continue;\n",
|
|
" }\n",
|
|
" var button = $('<button/>');\n",
|
|
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
|
|
" 'ui-button-icon-only');\n",
|
|
" button.attr('role', 'button');\n",
|
|
" button.attr('aria-disabled', 'false');\n",
|
|
" button.click(method_name, toolbar_event);\n",
|
|
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
|
"\n",
|
|
" var icon_img = $('<span/>');\n",
|
|
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
|
|
" icon_img.addClass(image);\n",
|
|
" icon_img.addClass('ui-corner-all');\n",
|
|
"\n",
|
|
" var tooltip_span = $('<span/>');\n",
|
|
" tooltip_span.addClass('ui-button-text');\n",
|
|
" tooltip_span.html(tooltip);\n",
|
|
"\n",
|
|
" button.append(icon_img);\n",
|
|
" button.append(tooltip_span);\n",
|
|
"\n",
|
|
" nav_element.append(button);\n",
|
|
" }\n",
|
|
"\n",
|
|
" var fmt_picker_span = $('<span/>');\n",
|
|
"\n",
|
|
" var fmt_picker = $('<select/>');\n",
|
|
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
|
|
" fmt_picker_span.append(fmt_picker);\n",
|
|
" nav_element.append(fmt_picker_span);\n",
|
|
" this.format_dropdown = fmt_picker[0];\n",
|
|
"\n",
|
|
" for (var ind in mpl.extensions) {\n",
|
|
" var fmt = mpl.extensions[ind];\n",
|
|
" var option = $(\n",
|
|
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
|
|
" fmt_picker.append(option)\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Add hover states to the ui-buttons\n",
|
|
" $( \".ui-button\" ).hover(\n",
|
|
" function() { $(this).addClass(\"ui-state-hover\");},\n",
|
|
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
|
|
" );\n",
|
|
"\n",
|
|
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
|
|
" nav_element.append(status_bar);\n",
|
|
" this.message = status_bar[0];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
|
|
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
|
|
" // which will in turn request a refresh of the image.\n",
|
|
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.send_message = function(type, properties) {\n",
|
|
" properties['type'] = type;\n",
|
|
" properties['figure_id'] = this.id;\n",
|
|
" this.ws.send(JSON.stringify(properties));\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.send_draw_message = function() {\n",
|
|
" if (!this.waiting) {\n",
|
|
" this.waiting = true;\n",
|
|
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
|
" var format_dropdown = fig.format_dropdown;\n",
|
|
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
|
|
" fig.ondownload(fig, format);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
|
|
" var size = msg['size'];\n",
|
|
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
|
|
" fig._resize_canvas(size[0], size[1]);\n",
|
|
" fig.send_message(\"refresh\", {});\n",
|
|
" };\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
|
|
" var x0 = msg['x0'] / mpl.ratio;\n",
|
|
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
|
|
" var x1 = msg['x1'] / mpl.ratio;\n",
|
|
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
|
|
" x0 = Math.floor(x0) + 0.5;\n",
|
|
" y0 = Math.floor(y0) + 0.5;\n",
|
|
" x1 = Math.floor(x1) + 0.5;\n",
|
|
" y1 = Math.floor(y1) + 0.5;\n",
|
|
" var min_x = Math.min(x0, x1);\n",
|
|
" var min_y = Math.min(y0, y1);\n",
|
|
" var width = Math.abs(x1 - x0);\n",
|
|
" var height = Math.abs(y1 - y0);\n",
|
|
"\n",
|
|
" fig.rubberband_context.clearRect(\n",
|
|
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
|
|
"\n",
|
|
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
|
|
" // Updates the figure title.\n",
|
|
" fig.header.textContent = msg['label'];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
|
|
" var cursor = msg['cursor'];\n",
|
|
" switch(cursor)\n",
|
|
" {\n",
|
|
" case 0:\n",
|
|
" cursor = 'pointer';\n",
|
|
" break;\n",
|
|
" case 1:\n",
|
|
" cursor = 'default';\n",
|
|
" break;\n",
|
|
" case 2:\n",
|
|
" cursor = 'crosshair';\n",
|
|
" break;\n",
|
|
" case 3:\n",
|
|
" cursor = 'move';\n",
|
|
" break;\n",
|
|
" }\n",
|
|
" fig.rubberband_canvas.style.cursor = cursor;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
|
|
" fig.message.textContent = msg['message'];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
|
|
" // Request the server to send over a new figure.\n",
|
|
" fig.send_draw_message();\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
|
|
" fig.image_mode = msg['mode'];\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
|
" // Called whenever the canvas gets updated.\n",
|
|
" this.send_message(\"ack\", {});\n",
|
|
"}\n",
|
|
"\n",
|
|
"// A function to construct a web socket function for onmessage handling.\n",
|
|
"// Called in the figure constructor.\n",
|
|
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
|
|
" return function socket_on_message(evt) {\n",
|
|
" if (evt.data instanceof Blob) {\n",
|
|
" /* FIXME: We get \"Resource interpreted as Image but\n",
|
|
" * transferred with MIME type text/plain:\" errors on\n",
|
|
" * Chrome. But how to set the MIME type? It doesn't seem\n",
|
|
" * to be part of the websocket stream */\n",
|
|
" evt.data.type = \"image/png\";\n",
|
|
"\n",
|
|
" /* Free the memory for the previous frames */\n",
|
|
" if (fig.imageObj.src) {\n",
|
|
" (window.URL || window.webkitURL).revokeObjectURL(\n",
|
|
" fig.imageObj.src);\n",
|
|
" }\n",
|
|
"\n",
|
|
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
|
|
" evt.data);\n",
|
|
" fig.updated_canvas_event();\n",
|
|
" fig.waiting = false;\n",
|
|
" return;\n",
|
|
" }\n",
|
|
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
|
|
" fig.imageObj.src = evt.data;\n",
|
|
" fig.updated_canvas_event();\n",
|
|
" fig.waiting = false;\n",
|
|
" return;\n",
|
|
" }\n",
|
|
"\n",
|
|
" var msg = JSON.parse(evt.data);\n",
|
|
" var msg_type = msg['type'];\n",
|
|
"\n",
|
|
" // Call the \"handle_{type}\" callback, which takes\n",
|
|
" // the figure and JSON message as its only arguments.\n",
|
|
" try {\n",
|
|
" var callback = fig[\"handle_\" + msg_type];\n",
|
|
" } catch (e) {\n",
|
|
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
|
|
" return;\n",
|
|
" }\n",
|
|
"\n",
|
|
" if (callback) {\n",
|
|
" try {\n",
|
|
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
|
|
" callback(fig, msg);\n",
|
|
" } catch (e) {\n",
|
|
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
|
|
" }\n",
|
|
" }\n",
|
|
" };\n",
|
|
"}\n",
|
|
"\n",
|
|
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
|
|
"mpl.findpos = function(e) {\n",
|
|
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
|
|
" var targ;\n",
|
|
" if (!e)\n",
|
|
" e = window.event;\n",
|
|
" if (e.target)\n",
|
|
" targ = e.target;\n",
|
|
" else if (e.srcElement)\n",
|
|
" targ = e.srcElement;\n",
|
|
" if (targ.nodeType == 3) // defeat Safari bug\n",
|
|
" targ = targ.parentNode;\n",
|
|
"\n",
|
|
" // jQuery normalizes the pageX and pageY\n",
|
|
" // pageX,Y are the mouse positions relative to the document\n",
|
|
" // offset() returns the position of the element relative to the document\n",
|
|
" var x = e.pageX - $(targ).offset().left;\n",
|
|
" var y = e.pageY - $(targ).offset().top;\n",
|
|
"\n",
|
|
" return {\"x\": x, \"y\": y};\n",
|
|
"};\n",
|
|
"\n",
|
|
"/*\n",
|
|
" * return a copy of an object with only non-object keys\n",
|
|
" * we need this to avoid circular references\n",
|
|
" * http://stackoverflow.com/a/24161582/3208463\n",
|
|
" */\n",
|
|
"function simpleKeys (original) {\n",
|
|
" return Object.keys(original).reduce(function (obj, key) {\n",
|
|
" if (typeof original[key] !== 'object')\n",
|
|
" obj[key] = original[key]\n",
|
|
" return obj;\n",
|
|
" }, {});\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
|
|
" var canvas_pos = mpl.findpos(event)\n",
|
|
"\n",
|
|
" if (name === 'button_press')\n",
|
|
" {\n",
|
|
" this.canvas.focus();\n",
|
|
" this.canvas_div.focus();\n",
|
|
" }\n",
|
|
"\n",
|
|
" var x = canvas_pos.x * mpl.ratio;\n",
|
|
" var y = canvas_pos.y * mpl.ratio;\n",
|
|
"\n",
|
|
" this.send_message(name, {x: x, y: y, button: event.button,\n",
|
|
" step: event.step,\n",
|
|
" guiEvent: simpleKeys(event)});\n",
|
|
"\n",
|
|
" /* This prevents the web browser from automatically changing to\n",
|
|
" * the text insertion cursor when the button is pressed. We want\n",
|
|
" * to control all of the cursor setting manually through the\n",
|
|
" * 'cursor' event from matplotlib */\n",
|
|
" event.preventDefault();\n",
|
|
" return false;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
|
" // Handle any extra behaviour associated with a key event\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.key_event = function(event, name) {\n",
|
|
"\n",
|
|
" // Prevent repeat events\n",
|
|
" if (name == 'key_press')\n",
|
|
" {\n",
|
|
" if (event.which === this._key)\n",
|
|
" return;\n",
|
|
" else\n",
|
|
" this._key = event.which;\n",
|
|
" }\n",
|
|
" if (name == 'key_release')\n",
|
|
" this._key = null;\n",
|
|
"\n",
|
|
" var value = '';\n",
|
|
" if (event.ctrlKey && event.which != 17)\n",
|
|
" value += \"ctrl+\";\n",
|
|
" if (event.altKey && event.which != 18)\n",
|
|
" value += \"alt+\";\n",
|
|
" if (event.shiftKey && event.which != 16)\n",
|
|
" value += \"shift+\";\n",
|
|
"\n",
|
|
" value += 'k';\n",
|
|
" value += event.which.toString();\n",
|
|
"\n",
|
|
" this._key_event_extra(event, name);\n",
|
|
"\n",
|
|
" this.send_message(name, {key: value,\n",
|
|
" guiEvent: simpleKeys(event)});\n",
|
|
" return false;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
|
|
" if (name == 'download') {\n",
|
|
" this.handle_save(this, null);\n",
|
|
" } else {\n",
|
|
" this.send_message(\"toolbar_button\", {name: name});\n",
|
|
" }\n",
|
|
"};\n",
|
|
"\n",
|
|
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
|
|
" this.message.textContent = tooltip;\n",
|
|
"};\n",
|
|
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
|
|
"\n",
|
|
"mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
|
|
"\n",
|
|
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
|
|
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
|
|
" // object with the appropriate methods. Currently this is a non binary\n",
|
|
" // socket, so there is still some room for performance tuning.\n",
|
|
" var ws = {};\n",
|
|
"\n",
|
|
" ws.close = function() {\n",
|
|
" comm.close()\n",
|
|
" };\n",
|
|
" ws.send = function(m) {\n",
|
|
" //console.log('sending', m);\n",
|
|
" comm.send(m);\n",
|
|
" };\n",
|
|
" // Register the callback with on_msg.\n",
|
|
" comm.on_msg(function(msg) {\n",
|
|
" //console.log('receiving', msg['content']['data'], msg);\n",
|
|
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
|
|
" ws.onmessage(msg['content']['data'])\n",
|
|
" });\n",
|
|
" return ws;\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.mpl_figure_comm = function(comm, msg) {\n",
|
|
" // This is the function which gets called when the mpl process\n",
|
|
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
|
|
"\n",
|
|
" var id = msg.content.data.id;\n",
|
|
" // Get hold of the div created by the display call when the Comm\n",
|
|
" // socket was opened in Python.\n",
|
|
" var element = $(\"#\" + id);\n",
|
|
" var ws_proxy = comm_websocket_adapter(comm)\n",
|
|
"\n",
|
|
" function ondownload(figure, format) {\n",
|
|
" window.open(figure.imageObj.src);\n",
|
|
" }\n",
|
|
"\n",
|
|
" var fig = new mpl.figure(id, ws_proxy,\n",
|
|
" ondownload,\n",
|
|
" element.get(0));\n",
|
|
"\n",
|
|
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
|
|
" // web socket which is closed, not our websocket->open comm proxy.\n",
|
|
" ws_proxy.onopen();\n",
|
|
"\n",
|
|
" fig.parent_element = element.get(0);\n",
|
|
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
|
|
" if (!fig.cell_info) {\n",
|
|
" console.error(\"Failed to find cell for figure\", id, fig);\n",
|
|
" return;\n",
|
|
" }\n",
|
|
"\n",
|
|
" var output_index = fig.cell_info[2]\n",
|
|
" var cell = fig.cell_info[0];\n",
|
|
"\n",
|
|
"};\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
|
|
" var width = fig.canvas.width/mpl.ratio\n",
|
|
" fig.root.unbind('remove')\n",
|
|
"\n",
|
|
" // Update the output cell to use the data from the current canvas.\n",
|
|
" fig.push_to_output();\n",
|
|
" var dataURL = fig.canvas.toDataURL();\n",
|
|
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
|
|
" // the notebook keyboard shortcuts fail.\n",
|
|
" IPython.keyboard_manager.enable()\n",
|
|
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
|
|
" fig.close_ws(fig, msg);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
|
|
" fig.send_message('closing', msg);\n",
|
|
" // fig.ws.close()\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
|
|
" // Turn the data on the canvas into data in the output cell.\n",
|
|
" var width = this.canvas.width/mpl.ratio\n",
|
|
" var dataURL = this.canvas.toDataURL();\n",
|
|
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.updated_canvas_event = function() {\n",
|
|
" // Tell IPython that the notebook contents must change.\n",
|
|
" IPython.notebook.set_dirty(true);\n",
|
|
" this.send_message(\"ack\", {});\n",
|
|
" var fig = this;\n",
|
|
" // Wait a second, then push the new image to the DOM so\n",
|
|
" // that it is saved nicely (might be nice to debounce this).\n",
|
|
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._init_toolbar = function() {\n",
|
|
" var fig = this;\n",
|
|
"\n",
|
|
" var nav_element = $('<div/>')\n",
|
|
" nav_element.attr('style', 'width: 100%');\n",
|
|
" this.root.append(nav_element);\n",
|
|
"\n",
|
|
" // Define a callback function for later on.\n",
|
|
" function toolbar_event(event) {\n",
|
|
" return fig.toolbar_button_onclick(event['data']);\n",
|
|
" }\n",
|
|
" function toolbar_mouse_event(event) {\n",
|
|
" return fig.toolbar_button_onmouseover(event['data']);\n",
|
|
" }\n",
|
|
"\n",
|
|
" for(var toolbar_ind in mpl.toolbar_items){\n",
|
|
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
|
|
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
|
|
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
|
|
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
|
|
"\n",
|
|
" if (!name) { continue; };\n",
|
|
"\n",
|
|
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
|
|
" button.click(method_name, toolbar_event);\n",
|
|
" button.mouseover(tooltip, toolbar_mouse_event);\n",
|
|
" nav_element.append(button);\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Add the status bar.\n",
|
|
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
|
|
" nav_element.append(status_bar);\n",
|
|
" this.message = status_bar[0];\n",
|
|
"\n",
|
|
" // Add the close button to the window.\n",
|
|
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
|
|
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
|
|
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
|
|
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
|
|
" buttongrp.append(button);\n",
|
|
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
|
|
" titlebar.prepend(buttongrp);\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._root_extra_style = function(el){\n",
|
|
" var fig = this\n",
|
|
" el.on(\"remove\", function(){\n",
|
|
"\tfig.close_ws(fig, {});\n",
|
|
" });\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
|
|
" // this is important to make the div 'focusable\n",
|
|
" el.attr('tabindex', 0)\n",
|
|
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
|
|
" // off when our div gets focus\n",
|
|
"\n",
|
|
" // location in version 3\n",
|
|
" if (IPython.notebook.keyboard_manager) {\n",
|
|
" IPython.notebook.keyboard_manager.register_events(el);\n",
|
|
" }\n",
|
|
" else {\n",
|
|
" // location in version 2\n",
|
|
" IPython.keyboard_manager.register_events(el);\n",
|
|
" }\n",
|
|
"\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
|
|
" var manager = IPython.notebook.keyboard_manager;\n",
|
|
" if (!manager)\n",
|
|
" manager = IPython.keyboard_manager;\n",
|
|
"\n",
|
|
" // Check for shift+enter\n",
|
|
" if (event.shiftKey && event.which == 13) {\n",
|
|
" this.canvas_div.blur();\n",
|
|
" // select the cell after this one\n",
|
|
" var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
|
|
" IPython.notebook.select(index + 1);\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
|
|
" fig.ondownload(fig, null);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"mpl.find_output_cell = function(html_output) {\n",
|
|
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
|
|
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
|
|
" // IPython event is triggered only after the cells have been serialised, which for\n",
|
|
" // our purposes (turning an active figure into a static one), is too late.\n",
|
|
" var cells = IPython.notebook.get_cells();\n",
|
|
" var ncells = cells.length;\n",
|
|
" for (var i=0; i<ncells; i++) {\n",
|
|
" var cell = cells[i];\n",
|
|
" if (cell.cell_type === 'code'){\n",
|
|
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
|
|
" var data = cell.output_area.outputs[j];\n",
|
|
" if (data.data) {\n",
|
|
" // IPython >= 3 moved mimebundle to data attribute of output\n",
|
|
" data = data.data;\n",
|
|
" }\n",
|
|
" if (data['text/html'] == html_output) {\n",
|
|
" return [cell, data, j];\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"// Register the function which deals with the matplotlib target/channel.\n",
|
|
"// The kernel may be null if the page has been refreshed.\n",
|
|
"if (IPython.notebook.kernel != null) {\n",
|
|
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
|
|
"}\n"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.Javascript object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgCAYAAADbcAZoAAAgAElEQVR4XuydB9QeRb3/h6v03gmdUBN6SUjASEkhisd6FWxgvWJBEWwIF0QBERWxIaD3ithFRY8FElOAEBIIUoTQIUCoQlBBqXr5n8/cO/lvNs/z7Mw+M7v7PPudc97zBt7dnZnvzM7+vr+6glETAkJACAgBISAEhIAQEAJCQAhUhMAKFfWjboSAEBACQkAICAEhIASEgBAQAkYERJtACAgBISAEhIAQEAJCQAgIgcoQEAGpDGp1JASEgBAQAkJACAgBISAEhIAIiPaAEBACQkAICAEhIASEgBAQApUhIAJSGdTqSAgIASEgBISAEBACQkAICAEREO0BISAEhIAQEAJCQAgIASEgBCpDQASkMqjVkRAQAkJACAgBISAEhIAQEAIiINoDQkAICAEhIASEgBAQAkJACFSGgAhIZVCrIyEgBISAEBACQkAICAEhIAREQLQHhIAQEAJCQAgIASEgBISAEKgMARGQyqBWR0JACAgBISAEhIAQEAJCQAiIgGgPCAEhIASEgBAQAkJACAgBIVAZAiIglUGtjoSAEBACQkAICAEhIASEgBAQAdEeEAJCQAgIASEgBISAEBACQqAyBERAKoNaHQkBISAEhIAQEAJCQAgIASEgAqI9IASEgBAQAkJACAgBISAEhEBlCIiAVAa1OhICQkAICAEhIASEgBAQAkJABER7QAgIASEgBISAEBACQkAICIHKEIhKQF588cUXKxu5OhICQkAICAEhIASEgBAQAkKgMgRWWGGFKNwhykPcrEVAKlt/dSQEhIAQEAJCQAgIASEgBCpFQASkUrjVmRAQAkJACAgBISAEhIAQaDcCIiDtXn/NXggIASEgBISAEBACQkAIVIqACEilcKszISAEhIAQEAJCQAgIASHQbgREQNq9/pq9EBACQkAICAEhIASEgBCoFAERkErhVmdCQAgIASEgBISAEBACQqDdCIiAtHv9NXshIASEgBAQAkJACAgBIVApAiIglcKtzoSAEBACQkAICAEhIASEQLsREAFp9/pr9kJACAgBISAEhIAQEAJCoFIEREAqhVudCQEhIASEgBAQAkJACAiBdiMgAtLu9dfshYAQEAJCQAgIASEgBIRApQiIgFQKtzoTAkJACAgBISAEhIAQEALtRkAEpN3rr9kLASEgBISAEBACQkAI/B8CK6ywQk8sTj75ZPOZz3ymVrw+9alPmcsuu8zMnz+/1nH007kISD/o6V4hIASEgBAQAkJACAiBoUHgkUceWTqXn/70p+akk04yt99++9L/t8Yaaxh+Qtvzzz9vVlpppdDbOl4vAvL/YelNFwPhfvHFF18MvEWXCwEhIASEgBAQAkJACAiBaAhccMEF5phjjjF//etfl3nmc889Z973vveZ2bNnmz//+c9mq622Mh/+8IfNBz7wgaXXHX744fbfO+64oznvvPPMuuuua2699VbzwAMPmHe/+93m8ssvN5tttpn5whe+YD70oQ9Zq8pRRx1l71myZIk57rjjzG9/+1vzwgsvmLFjx5qzzz7b7Lzzzubcc88173//+5cZz49//GNz2GGHmRNPPNFceOGFdkwbbrihYQxf+tKXouER80GygMREU88SAkJACAgBISAEhIAQGAoEuhGQf/zjH+bLX/6yOfTQQ816661nrrjiCksesJi8+tWvtnNH+P/d735nicGxxx5r/9/o0aPNhAkTDATmm9/8psHd66Mf/ahZsGCBJRiOgLz85S+3BOKEE06w1pavf/3r5qKLLjJ33HGHWXHFFc0nPvEJc9VVV9nn09ZZZx3z85//3JKgn/zkJ2annXYyDz/8sFm4cKF517ve1ci1EAFp5LJoUEJACAgBISAEhIAQEAJLETj3XGPOOMOYT33KmP+zFKRGpxsB6dTve97zHvPss8+aH/zgB0sJCCThnnvuMS996Uvt/7vhhhvMnnvuaW666Sazyy672P938803m1133dV861vfsgRkxowZlrxAICAbNByDttxyS3PaaaeZI444wnRywTr99NMNlhD6eMlLXpIamr6fLwLSN4R6gBAQAkJACAgBISAEhEBSBLbe2pj77jNmq62MuffepF25h/ciIFgscHe6//77LfEgxmPcuHHWGkKDRGAp+c1vfrN0rFhIsEjw/7NttdVWM2eddZYlIFhWsHCsuuqqy1zzzDPPWBerU045pSMBgehgXYHsTJ061Vpn+GkqGREBqWQLqxMhIASEgBAQAkJACAiB0gg0yAICMfngBz9ovvKVr5gxY8aYNddc05x66qnmtttuW5qZysWA4BLlmg8BgWBAbKZNm7YcVMSRrL/++h0JCBc//fTTZvr06daKgsvWqFGjzMyZMxtJQkRASr8JulEICAEhIASEgBAQAkJgWBHoZgF573vfax566KGlMRjM/2Uve5n55z//2ZOAOBcs3K4IKKcRp4E7lnPBwmLy7//+79Z1iyD1To3MXJdccomNHenWbrzxRrPHHnvY5xN70rQmAtK0FdF4hIAQEAJCQAgIASEgBGpHoBsBOfPMM80ZZ5xhrQxbbLGF+a//+i+bnQqLg6vN0ckCwoRwkyKz1Te+8Q07P7JdXX311earX/2qzaz1r3/9y+y33372N31su+225sEHH7SuXG9961vNbrvtZv77v//bBrbPmTPHjBgxwqy11lrWaoL7FRYZ3LfIvHXOOedYooSFpmlNBKRpK6LxCAEhIASEgBAQAkJACNSOQDcCQjwGVhBIAUI/xICA8blz5xYSkMWLF9s0vMSKYOGAzBAX8rWvfc0ceeSRds5/+9vfzPHHH28uvvhi88QTT5hNNtnEHHjggZaQQDiIIaFPihFyLcHnxHp88YtftG5gBK1DVD7/+c8bMmo1sYmANHFVNCYhIASEgBAQAkJACAiBoUfg7rvvNtttt5258sorzf777z/083UTFAFpzVJrokJACAgBISAEhIAQEAJ1IkCQOBmziAHBtepjH/uY+ctf/mJuueWWRgaLp8JKBCQVsnquEBACQkAICAEhIASEgBDIIIDb1ic/+Ulz77332tgNYkLIprX55pu3CicRkFYttyYrBISAEBACQkAICAEhIATqRUAEpF781bsQEAJCQAgIASEgBISAEGgVAiIgrVpuTVYICAEhIASEgBAQAkJACNSLgAhIvfirdyEgBISAEBACQkAICAEh0CoEREBatdyarBAQAkJACAgBISAEhIAQqBcBEZB68VfvQkAICAEhIASEgBAQAkKgVQiIgLRquTVZISAEhIAQEAJCQAgIASFQLwIiIPXir96FgBAQAkJACAgBISAEWooA9UC22WYbc/3115s99tjDXHbZZeaggw6yxQnXWWedUqjEeEapjgNuEgEJAEuXCgEhIASEgBAQAkJACAw/Au94xzvM9773PTvRFVdc0Wy55ZbmiCOOMJ/+9KfNS1/60mgA5AkIVdKfeOIJs/HGG5sVVlihsJ8DDzzQEpezzz576bWhzyjsJMEFIiAJQNUjhYAQEAJCQAgIASEgBAYXAQjIo48+ar773e+a5557zvz+9783H/zgB81pp51mjj/++GUm9q9//cuShX/7t38LnnCegIQ+oBMBCX1GHdeLgNSBuvoUAkJACAgBISAEhIAQaCwCEJC//vWv5le/+tXSMU6ZMsU89dRT5n3ve5855phjzIUXXmg+9alPmTvuuMPcddddZuuttzbf+c53zJe//GWzaNEi+98f/vCHzQc+8IGlz7jmmmvs/bfeeqvZZZddzAknnGBe//rX93TBmjt3rr2Oe1deeWUzduxY85Of/MR89KMfXWqlcR3QL6Qm78b1i1/8wpx00kl2nCNGjDBHH320Oe6445aOi7H+x3/8h/37RRddZNZdd11z4okn2v9Hw6py7LHHGp6DexgWmqOOOmo5Mua7oCIgvkjpOiEgBISAEBACQkAICIFWINCJgLzmNa8xDzzwgBXeEczHjBljvvjFL5r111/fbLHFFubiiy82H//4x803vvENs+eee1pS8d73vtecddZZ5sgjjzR///vfzciRI83kyZOtKxdk4SMf+Yi55557uhKQG264wYwbN868613vssQF96/Zs2ebww8/3LqGveIVr7BE5rOf/axdlw033NDMmTNnGQLyxz/+0ZKWz3zmM+awww4zV111lSVF55xzjmGeNAgI5Opzn/ucgWj9/Oc/t6TnlltuMTvuuKP50pe+ZL72ta+ZH/7wh9YdbfHixfbnzW9+c6n9IAJSCjbdJASEgBAQAkJACAgBIVAVAueea8wZZxjzqU8Zc9RR6XvNEpAXX3zRzJw507zqVa+y5GPnnXc273znOw3kYPfdd186mO22284K8Fmh/NRTT7XuWwj9559/viUekJhVVlnF3nfuueea97///V0JyFve8hZz//33myuvvLLjpDu5YOWD0N/61reaxx57zEyfPn3pMz7xiU+Y3/3ud2bhwoVLCciECRPM97//ffvfzHmTTTYxp5xyirV0YMnh2hkzZnjFphStkAhIEUL6uxAQAkJACAgBISAEhECtCGy9tTH33WfMVlsZc++96YcCAfnBD35gicILL7xg/ud//sdABrAa4KKENeLZZ59dKoz/4x//MGussYZZddVVl4kF+ec//2nWXnttG0+Cy9SNN95oZs2atXQC/DdB5N2yYI0ePdq88Y1vtESgU/MhIHvttZfBenPyyScvfcSvf/1r+9xnnnnGvOQlL7EWEGJcsOC4Brl6wxveYF23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MHv2bItZIe1wIamFyxaYBi4CCSMgAZKwCVN3RUAESk9g/fr1djLbunVrCZDST4d6kDICVGbv0aOHWULI7KUmAiKQPgISIOmbU41IBEQgBAL4z/ND4bdyqf0RAkZdUgQqJTBw4EA3btw4SyF84oknWtX3/fbbT8REQARSSEACJIWTqiGJgAiES6CqmJFw76yri0ByCFx77bUWSF5VI5314Ycfbi/56KOPHNaP7du3u6FDh1qWLkSIBH9y5lw9FYF8CUiA5EtKrxMBERABERABEcibwIcffug+/vjjKl9PVrlcFdt37txpBT9xdSQ4XU0ERCBdBCRA0jWfGo0IiIAIiIAIJJ4AtXYoELp48WJ3yimnJH48GoAIiMAPCUiAaEWIgAiIgAiIgAiUjACFQMkyR5V2aoBs3brVDRkyxH3wwQfujTfecHvssUfJ+qYbi4AIhENAAiQcrrqqCIiACIiACIhAHgRee+0116dPH/fqq6+6L7/80mqBtG3b1g0ePNjVqVMnjyvoJSIgAkkjIAGStBlTf0VABERABERABERABEQgwQQkQBI8eeq6CIiACIhAeARuvfVW95e//MVt3LjR7bnnnq5p06aW1alBgwbh3VRXFgEREIEyICABUgaTrCGKgAiIgAgUTgA3oE6dOrkmTZq47777zl133XXu9ddfdxs2bHB777134RfUO0RABERABIyABIgWggiIgAiIgAjkQYC0svvvv79bunSpa968eR7v0EtEQAREQARyEZAA0boQAREQAREQgTwIbNmyxdWvX98RNN2oUaM83qGXiIAIiIAISIBoDYiACIiACIhADQj8+9//dmeddZb75z//6ZYvX16DK+gtIiACIiACnoAsIFoLIiACIiACIlANgR49erh58+aZ+Khbt654iYAIiIAIFEFAAqQIeHqrCIiACIhA+gn06tXLzZo1yz3//PPukEMOSf+ANUIREAERCJmABEjIgHV5ERABERCBZBL4z3/+43r37u2efvppt2TJEov/UBMBERABESiegARI8Qx1BREQAREQgRQS6Nmzp5s2bZpZPzJrf+y7775WF0RNBERABESgZgQkQGrGTe8SAREQARFIOYEf/ehHOUc4ZcoU17Vr15SPXsMTAREQgfAISICEx1ZXFgEREAEREAEREAEREAERyCIgAaIlIQIiIAIiIAIiIAIiIAIiEBkBCZDIUOtGIiACIiACIiACIiACIiACEiBaAyIgAiIgAiIgAiIgAiIgApERkACJDLVuJAIiIAIiIAIiIAIiIAIiIAGiNSACIiACIiACIiACIiACIhAZAQmQyFDrRiIgAiIgAiIgAiIgAiIgAhIgWgMiIAIiIAIiIAIiIAIiIAKREZAAiQy1biQCIiACIiACIiACIiACIiABojUgAiIgAiIgAiIgAiIgAiIQGQEJkMhQ60YiIAIiIAIiIAIiIAIiIAISIFoDIiACIiACIiACIiACIiACkRGQAIkMtW4kAiIgAiIgAiIgAiIgAiIgAaI1IAIiIAIiIAIiIAIiIAIiEBkBCZDIUOtGIiACIiACIiACIiACIiACEiBaAyIgAiIgAiIgAiIgAiIgApERkACJDLVuJAIiIAIiIAIiIAIiIAIiIAGiNSACIiACIiACIiACIiACIhAZAQmQyFDrRiIgAiIgAiIgAiIgAiIgAhIgWgMiIAIiIAIiIAIiIAIiIAKREZAAiQy1biQCIiACIiACIiACIiACIiABojUgAiIgAiIgAiIgAiIgAiIQGQEJkMhQ60YiIAIiIAIiIAIiIAIiIAISIFoDIiACIiACIiACIiACIiACkRGQAIkMtW4kAiIgAiIgAiIgAiIgAiIgAaI1IAIiIAIiIAIiIAIiIAIiEBmBWAqQyEavG4mACIiACIiACIiACIiACCSSwI8S2Wt1WgREQAREQAREQAREQAREIJEEJEASOW3qtAiIgAiIgAiIgAiIgAgkk4AESDLnTb0WAREQAREQAREQAREQgUQSkABJ5LSp0yIgAiIgAiIgAiIgAiKQTAISIMmcN/VaBERABERABERABERABBJJQAIkkdOmTouACIiACIiACIiACIhAMglIgCRz3tRrERABERABERABERABEUgkAQmQRE6bOi0CIiACIiACIiACIiACySQgAZLMeVOvRUAEREAEREAEREAERCCRBCRAEjlt6rQIiIAIiIAIiIAIiIAIJJOABEgy5029FgEREAEREAEREAEREIFEEpAASeS0qdMiIAIiIAIiIAIiIAIikEwCEiDJnDf1WgREQAREQAREQAREQAQSSUACJJHTpk6LgAiIgAiIgAiIgAiIQDIJSIAkc97UaxEQAREQAREQAREQARFIJAEJkEROmzotAiIgAiIgAiIgAiIgAskkIAGSzHlTr0VABERABERABERABEQgkQT+H4UCNDHw/4I4AAAAAElFTkSuQmCC\" width=\"800\">"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.HTML object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"data_provider = CCPPDataProvider(\n",
|
|
" which_set='train',\n",
|
|
" input_dims=[0, 1],\n",
|
|
" batch_size=5000, \n",
|
|
" max_num_batches=1, \n",
|
|
" shuffle_order=False\n",
|
|
")\n",
|
|
"\n",
|
|
"inputs, targets = data_provider.next()\n",
|
|
"\n",
|
|
"# Calculate predicted model outputs\n",
|
|
"outputs = model.fprop(inputs)[-1]\n",
|
|
"\n",
|
|
"# Plot target and predicted outputs against inputs on same axis\n",
|
|
"fig = plt.figure(figsize=(8, 8))\n",
|
|
"ax = fig.add_subplot(111, projection='3d')\n",
|
|
"ax.plot(inputs[:, 0], inputs[:, 1], targets[:, 0], 'r.', ms=2)\n",
|
|
"ax.plot(inputs[:, 0], inputs[:, 1], outputs[:, 0], 'b.', ms=2)\n",
|
|
"ax.set_xlabel('Input dim 1')\n",
|
|
"ax.set_ylabel('Input dim 2')\n",
|
|
"ax.set_zlabel('Output')\n",
|
|
"ax.legend(['Targets', 'Predictions'], frameon=False)\n",
|
|
"fig.tight_layout()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Exercise 6: visualising training trajectories in parameter space"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Running the cell below will display an interactive widget which plots the trajectories of gradient-based training of the single-layer affine model on the CCPP dataset in the three dimensional parameter space (two weights plus bias) from random initialisations. Also shown on the right is a plot of the evolution of the error function (evaluated on the current batch) over training. By moving the sliders you can alter the training hyperparameters to investigate the effect they have on how training procedes.\n",
|
|
"\n",
|
|
"Some questions to explore:\n",
|
|
"\n",
|
|
" * Are there multiple local minima in parameter space here? Why?\n",
|
|
" * What happens to learning for very small learning rates? And very large learning rates?\n",
|
|
" * How does the batch size affect learning?\n",
|
|
" \n",
|
|
"**Note:** You don't need to understand how the code below works. The idea of this exercise is to help you understand the role of the various hyperparameters involved in gradient-descent based training methods."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {
|
|
"scrolled": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA3UAAAHFCAYAAABVW9B8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XecVOWh//HPMzPbgQVhacuyLCBVKSo2sPcoKnZFLBhN\nvUmUm5hifmquMdF7TaL3+ooxUeyaWFCxYNeooGJBpCkgvUrdPu08vz9mz7CdXdw9077v12tfMGfO\nnOc5swP7fPdpxlqLiIiIiIiIpCZfoisgIiIiIiIi+06hTkREREREJIUp1ImIiIiIiKQwhToRERER\nEZEUplAnIiIiIiKSwhTqREREREREUphCnYiIiIiISApTqBMREREREUlhCnUiIiIiIiIpLNDO822n\n1EJERKRzmURXQEREpLOop05ERERERCSFKdSJiIiIiIikMIU6ERERERGRFKZQJyIiIiIiksIU6kRE\nRERERFKYQp2IiIiIiEgKU6gTERERERFJYQp1IiIiIiIiKUyhTkREREREJIUp1ImIiIiIiKQwhToR\nEREREZEUplAnIiIiIiKSwhTqREREREREUphCnYiIiIiISApTqBMREREREUlhCnUiIiIiIiIpTKFO\nREREREQkhSnUiYiIiIiIpDCFOpE2evTRRzn55JMTXQ3Wrl1Lly5diEajia5K0nj33XcZPnx4h58r\nIiIikgqMtbY957frZEmsQYMGsWXLFvx+PwUFBZx22mn83//9H126dEl01Vp1xRVXMGDAAG655Zak\nvua+WL16NWVlZYTDYQKBQELrkixuuukmVqxYwSOPPJLoqkh6M4mugIiISGdRT12amz17NpWVlXz6\n6ad8/PHH+xRqIpFIJ9Ss8+xLfVPlHlOlni3Zl/pba3EcpxNqIyIiIpIeFOoyRHFxMaeddhqLFi0C\nYObMmYwcOZKuXbsyePBg/va3v8XPffvttxkwYAC33XYbffv25corr2Tnzp2cccYZFBUV0aNHD844\n4wzWr18ff82xxx7LDTfcwJFHHkmXLl2YPHky27dvZ+rUqXTr1o0JEyawevXq+PnLli3jpJNOYr/9\n9mP48OH861//AuDee+/l0Ucf5fbbb49fB2Djxo2ce+65FBUVUVZWxl133RW/1k033cR5553HpZde\nSrdu3XjggQca3HtL1xw0aBC33XYbY8aMoaCggEgkwh//+EeGDBlC165dGTVqFLNmzYpf54EHHmDS\npEl7vQeAmpoaZsyYQWlpKYWFhUyaNImamhqOPvpoALp3706XLl2YN28ejuNwyy23UFpaSu/evbns\nssvYvXs3EOvZM8Zw3333MXDgQI4//vj4MTcg7d69m6uuuop+/fpRXFzMDTfcEB+auWLFCo455hgK\nCwvp1asXF154YYufkeeff57Ro0fTvXt3jj32WJYuXQrAbbfdxnnnndfg3J/+9Kf85Cc/2Wv5Dzzw\nABMnTuTaa6+lZ8+e3HTTTQ2uM2fOHG699Vb++c9/0qVLF8aOHRv/PP3mN79h4sSJ5Ofn8/XXX7fp\nM+saNGgQ//M//8OYMWMoLCzkwgsvpLa2tt3nAtx+++3069eP/v37849//ANjDCtWrGjxfRQRERHx\nnLW2PV+SQkpLS+1rr71mrbV27dq1dtSoUfaGG26w1lr7wgsv2BUrVljHcezbb79t8/Ly7CeffGKt\ntfatt96yfr/f/uIXv7C1tbW2urrabtu2zT711FO2qqrKlpeX2/POO8+eddZZ8bKOOeYYO2TIELti\nxQq7a9cuO3LkSLv//vvb1157zYbDYTtt2jR7xRVXWGutraystAMGDLD333+/DYfD9tNPP7U9e/a0\nixcvttZae/nll9vf/OY38WtHo1F70EEH2ZtvvtkGg0G7cuVKW1ZWZufMmWOttfbGG2+0gUDAzpo1\ny0ajUVtdXd3kvWh8Tff9GTt2rF27dm38Nf/617/shg0bbDQatU888YTNz8+3GzdutNZaO3PmTDtx\n4sQ23cMPf/hDe8wxx9j169fbSCRi33//fVtbW2tXrVplARsOh+P1uO++++yQIUPsypUrbUVFhZ0y\nZYq99NJLrbU2fv60adNsZWWlra6ubnKNs88+215zzTW2srLSbtmyxU6YMMHec8891lprL7roInvL\nLbfYaDRqa2pq7LvvvtvsZ+XLL7+0+fn59tVXX7WhUMjedtttdsiQITYYDNrVq1fbvLw8W15ebq21\nNhKJ2L59+9p58+bttfyZM2dav99v77rrLhsOh5v93tx444126tSpDY4dc8wxtqSkxC5atMiGw2Eb\nCoX2+pktLi5u8L2dMGGC3bBhg92+fbsdMWKE/etf/9ruc19++WXbp08fu2jRIltVVWWnTp1qAbt8\n+fJm30dJau39eacvfelLX/rSV8p8tfcFkkJKS0ttQUGBLSwstAMHDrQ/+MEPmm1UW2vtWWedZf/y\nl79Ya2ON3qysLFtTU9PitT/77DPbvXv3+ONjjjnG3nLLLfHH1113nT311FPjj59//nk7duxYa621\nTzzxhJ00aVKD611zzTX2pptustY2DWAffPCBLSkpaXD+rbfeGg+JN954oz3qqKNafiOauaa1sffn\nvvvua/V1Y8eOtc8++6y1tmGoa+0eotGozc3NtQsWLGhyveZC3fHHH2/vvvvu+ONly5bZQCBgw+Fw\n/PyVK1c2e43Nmzfb7OzsBt/Xxx57zB577LHWWmunTZtmr776artu3bpW7/N3v/udPf/88+OPo9Go\n7d+/v33rrbestdZOnDjRPvjgg9Zaa1999VU7ePBga63da/kzZ85s8r1rrKVQ99vf/rbV1zX+zDYO\nag8//HD88c9//nP7ve99r93nXnnllfaXv/xl/Lnly5cr1KWuhP/A1Ze+9KUvfemrs760UkOae/bZ\nZznxxBObHH/55Ze5+eab+eqrr3Ach+rqag488MD480VFReTm5sYfV1dXc+211zJnzhx27twJQEVF\nBdFoFL/fD0CfPn3i5+fl5TV5XFlZCcCaNWv48MMP6d69e/z5SCTCtGnTmr2HNWvWsHHjxgbnR6NR\njjrqqPjjkpKStr0hjTR+3UMPPcSf/vSn+FDRyspKtm3b1mydWrqHbdu2UVtby5AhQ9pUh40bN1Ja\nWhp/XFpaSiQSYcuWLS3Ws349wuEw/fr1ix9zHCd+/u23385vf/tbDj30UHr06MGMGTOYPn36Xuvg\n8/koKSlhw4YNAFxyySU8/vjjXHbZZTz22GNccsklbSq/tbrvTePX7e0z21jfvn3jf8/Pz2fjxo3t\nPnfjxo0ccsghLdZJREREJBko1GWgYDDIueeey0MPPcRZZ51FVlYWZ599NtbuWdzUmIYLxd1xxx18\n+eWXfPjhh/Tt25cFCxYwfvz4Bq9pq5KSEo455hhee+21Zp9vXHZJSQllZWUsX768xWs2fk1bn69/\nfM2aNVx99dW88cYbHHHEEfj9fsaNG9fsPbZ2D47jkJuby8qVK+NzxFqrR//+/VmzZk388dq1awkE\nAvTp0yc+b7Gl+peUlJCTk8O2bduaXU2zb9++/P3vfwfgvffe48QTT+Too49m6NChTerwxRdfxB9b\na1m3bh3FxcUAnH/++cyYMYP169cza9Ys5s2b16byW6v73p6vf7wtn9nO0K9fvwZzR9etW9ep5YmI\niIjsCy2UkoFCoRDBYJCioiICgQAvv/wyr776aquvqaioIC8vj+7du7Njxw5uvvnmfS7/jDPO4Kuv\nvuLhhx8mHA4TDoeZP39+fGGOPn368PXXX8fPP/TQQ+natSu33XYbNTU1RKNRFi1axPz589tcZuNr\nNqeqqgpjDEVFRUBsMRl3YZn23IPP52P69Olcd911bNy4kWg0yrx58+Lvuc/na1CXiy++mD//+c+s\nWrWKyspKfv3rX3PhhRe2acuDfv36cfLJJzNjxgzKy8txHIeVK1fyzjvvAPDkk0/GQ0mPHj0wxuDz\nNf1nf8EFF/Diiy/yxhtvEA6HueOOO8jJyeHII48EYj23xx57LFdeeSVlZWWMHDmyTeW3RZ8+fVi9\nenWrK1zuy2e2I1xwwQXMnDmTpUuXUl1dzX/91391epkiIiIi7aVQl4G6du3KXXfdxQUXXECPHj14\n7LHHOPPMM1t9zc9+9jNqamro1asXhx9+OKeeeuq3Kv/VV1/liSeeoH///vTt25frr7+eYDAIwFVX\nXcWSJUvo3r07Z599Nn6/nxdeeIEFCxZQVlZGr169+O53vxtfIbItGl+zOaNGjWLGjBkcccQR9OnT\nhy+++IKJEyfu0z38z//8DwceeCATJkxgv/324/rrr8dxHPLz8+OrOnbv3p0PPviA6dOnM23aNI4+\n+mjKysrIzc3lf//3f9t8bw899BChUIhRo0bRo0cPzjvvPDZt2gTA/PnzOeyww+jSpQtnnnkmd955\nJ4MHD25yjeHDh/PII4/wH//xH/Tq1YvZs2cze/ZssrOz4+dccsklvP766/Ghl20pvy3OP/98AHr2\n7MlBBx3U7Dn78pntCKeddho/+clPOO644xg6dCiHH344ADk5OZ1etohIMjHGrDbGNJ3PIZ4zxtxj\njPltR58rqU2bj4u00f33388jjzzCm2++meiqSIIsXbqUAw44gGAwqM3jU482H5e0Y4xZDfQBokAY\nmAt831q717HixphBwCogy1q7101E68r6rrX29X2vseh9lM6injqRNlq8eDFlZWWJroZ4bNasWQSD\nQXbu3Mn111/P5MmTFehEJJlMttZ2AfoBW4C2D/VIAsaYJv+hNndsL9cwxpikatPua53ae+8irqT6\nByCSrM4++2zmzJnDjBkzEl0V8djf/vY3evfuzZAhQ/D7/fz1r39NdJVERJqw1tYCTwGj3GPGmNON\n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\nSUVORK5CYII=\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f2e8a086710>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"from ipywidgets import interact\n",
|
|
"%matplotlib inline\n",
|
|
"\n",
|
|
"def setup_figure():\n",
|
|
" # create figure and axes\n",
|
|
" fig = plt.figure(figsize=(12, 6))\n",
|
|
" ax1 = fig.add_axes([0., 0., 0.5, 1.], projection='3d')\n",
|
|
" ax2 = fig.add_axes([0.6, 0.1, 0.4, 0.8])\n",
|
|
" # set axes properties\n",
|
|
" ax2.spines['right'].set_visible(False)\n",
|
|
" ax2.spines['top'].set_visible(False)\n",
|
|
" ax2.yaxis.set_ticks_position('left')\n",
|
|
" ax2.xaxis.set_ticks_position('bottom')\n",
|
|
" ax2.set_yscale('log')\n",
|
|
" ax1.set_xlim((-2, 2))\n",
|
|
" ax1.set_ylim((-2, 2))\n",
|
|
" ax1.set_zlim((-2, 2))\n",
|
|
" #set axes labels and title\n",
|
|
" ax1.set_title('Parameter trajectories over training')\n",
|
|
" ax1.set_xlabel('Weight 1')\n",
|
|
" ax1.set_ylabel('Weight 2')\n",
|
|
" ax1.set_zlabel('Bias')\n",
|
|
" ax2.set_title('Batch errors over training')\n",
|
|
" ax2.set_xlabel('Batch update number')\n",
|
|
" ax2.set_ylabel('Batch error')\n",
|
|
" return fig, ax1, ax2\n",
|
|
"\n",
|
|
"def visualise_training(n_epochs=1, batch_size=200, log_lr=-1., n_inits=5,\n",
|
|
" w_scale=1., b_scale=1., elev=30., azim=0.):\n",
|
|
" fig, ax1, ax2 = setup_figure()\n",
|
|
" # create seeded random number generator\n",
|
|
" rng = np.random.RandomState(1234)\n",
|
|
" # create data provider\n",
|
|
" data_provider = CCPPDataProvider(\n",
|
|
" input_dims=[0, 1],\n",
|
|
" batch_size=batch_size, \n",
|
|
" shuffle_order=False,\n",
|
|
" )\n",
|
|
" learning_rate = 10 ** log_lr\n",
|
|
" n_batches = data_provider.num_batches\n",
|
|
" weights_traj = np.empty((n_inits, n_epochs * n_batches + 1, 1, 2))\n",
|
|
" biases_traj = np.empty((n_inits, n_epochs * n_batches + 1, 1))\n",
|
|
" errors_traj = np.empty((n_inits, n_epochs * n_batches))\n",
|
|
" # randomly initialise parameters\n",
|
|
" weights = rng.uniform(-w_scale, w_scale, (n_inits, 1, 2))\n",
|
|
" biases = rng.uniform(-b_scale, b_scale, (n_inits, 1))\n",
|
|
" # store initial parameters\n",
|
|
" weights_traj[:, 0] = weights\n",
|
|
" biases_traj[:, 0] = biases\n",
|
|
" # iterate across different initialisations\n",
|
|
" for i in range(n_inits):\n",
|
|
" # iterate across epochs\n",
|
|
" for e in range(n_epochs):\n",
|
|
" # iterate across batches\n",
|
|
" for b, (inputs, targets) in enumerate(data_provider):\n",
|
|
" outputs = fprop(inputs, weights[i], biases[i])\n",
|
|
" errors_traj[i, e * n_batches + b] = error(outputs, targets)\n",
|
|
" grad_wrt_outputs = error_grad(outputs, targets)\n",
|
|
" weights_grad, biases_grad = grads_wrt_params(inputs, grad_wrt_outputs)\n",
|
|
" weights[i] -= learning_rate * weights_grad\n",
|
|
" biases[i] -= learning_rate * biases_grad\n",
|
|
" weights_traj[i, e * n_batches + b + 1] = weights[i]\n",
|
|
" biases_traj[i, e * n_batches + b + 1] = biases[i]\n",
|
|
" # choose a different color for each trajectory\n",
|
|
" colors = plt.cm.jet(np.linspace(0, 1, n_inits))\n",
|
|
" # plot all trajectories\n",
|
|
" for i in range(n_inits):\n",
|
|
" lines_1 = ax1.plot(\n",
|
|
" weights_traj[i, :, 0, 0], \n",
|
|
" weights_traj[i, :, 0, 1], \n",
|
|
" biases_traj[i, :, 0], \n",
|
|
" '-', c=colors[i], lw=2)\n",
|
|
" lines_2 = ax2.plot(\n",
|
|
" np.arange(n_batches * n_epochs),\n",
|
|
" errors_traj[i],\n",
|
|
" c=colors[i]\n",
|
|
" )\n",
|
|
" ax1.view_init(elev, azim)\n",
|
|
" plt.show()\n",
|
|
"\n",
|
|
"w = interact(\n",
|
|
" visualise_training,\n",
|
|
" elev=(-90, 90, 2),\n",
|
|
" azim=(-180, 180, 2), \n",
|
|
" n_epochs=(1, 5), \n",
|
|
" batch_size=(100, 1000, 100),\n",
|
|
" log_lr=(-3., 1.),\n",
|
|
" w_scale=(0., 2.),\n",
|
|
" b_scale=(0., 2.),\n",
|
|
" n_inits=(1, 10)\n",
|
|
")\n",
|
|
"\n",
|
|
"for child in w.widget.children:\n",
|
|
" child.layout.width = '100%'"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"anaconda-cloud": {},
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.6.2"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 1
|
|
}
|