diff --git a/tutorial/15.quickstart.ipynb b/tutorial/15.quickstart.ipynb
index 011283a95..eaa1fdfc0 100644
--- a/tutorial/15.quickstart.ipynb
+++ b/tutorial/15.quickstart.ipynb
@@ -4,12 +4,15 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "# Quick start"
+ "# Quick start\n",
+ "(c) Deniz Yuret, 2019\n",
+ "\n",
+ "This notebook is for the impatient reader who wants to get a flavor of Julia/Knet possibly to compare it with other deep learning frameworks. In 15 lines of code and 30 seconds of GPU time we define, train, and evaluate the LeNet convolutional neural network model from scratch without any predefined layers."
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
@@ -18,31 +21,31 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Define convolutional layer:\n",
"struct Conv; w; b; f; end\n",
"(c::Conv)(x) = c.f.(pool(conv4(c.w, x) .+ c.b))\n",
- "Conv(w1,w2,cx,cy,f=relu) = Conv(param(w1,w2,cx,cy), param0(1,1,cy,1), f)"
+ "Conv(w1,w2,cx,cy,f=relu) = Conv(param(w1,w2,cx,cy), param0(1,1,cy,1), f);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# Define dense layer:\n",
"struct Dense; w; b; f; end\n",
"(d::Dense)(x) = d.f.(d.w * mat(x) .+ d.b)\n",
- "Dense(i::Int,o::Int,f=relu) = Dense(param(o,i), param0(o), f)"
+ "Dense(i::Int,o::Int,f=relu) = Dense(param(o,i), param0(o), f);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
@@ -54,33 +57,53 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "┌ Info: Loading MNIST...\n",
+ "└ @ Main /home/deniz/.julia/dev/Knet/data/mnist.jl:33\n"
+ ]
+ }
+ ],
"source": [
"# Load MNIST data\n",
"include(Knet.dir(\"data\",\"mnist.jl\"))\n",
- "dtrn, dtst = mnistdata()"
+ "dtrn, dtst = mnistdata();"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "3.40e-02 100.00%┣████████████████████████████████████████████████████████████┫ 6000/6000 [00:25/00:25, 238.78i/s]\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "0.9921"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Train and test LeNet (about 30 secs on a gpu to reach 99% accuracy)\n",
"LeNet = Chain(Conv(5,5,1,20), Conv(5,5,20,50), Dense(800,500), Dense(500,10,identity))\n",
"progress!(adam(LeNet, repeat(dtrn,10)))\n",
"accuracy(LeNet, dtst)"
]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
}
],
"metadata": {
diff --git a/tutorial/20.mnist.ipynb b/tutorial/20.mnist.ipynb
index 22a519459..0e4ea7a60 100644
--- a/tutorial/20.mnist.ipynb
+++ b/tutorial/20.mnist.ipynb
@@ -9,27 +9,16 @@
},
"source": [
"# Load and minibatch MNIST data\n",
- "(c) Deniz Yuret, 2019"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "* Objective: Load the [MNIST](http://yann.lecun.com/exdb/mnist) dataset, convert into Julia arrays, split into minibatches using Knet's [minibatch](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.minibatch) function and [Data](https://github.com/denizyuret/Knet.jl/blob/master/src/data.jl) iterator type.\n",
+ "(c) Deniz Yuret, 2019\n",
+ "* Objective: Load the [MNIST](http://yann.lecun.com/exdb/mnist) dataset, convert into Julia arrays, split into minibatches using Knet's [minibatch](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.minibatch) function and [Data](https://github.com/denizyuret/Knet.jl/blob/master/src/data.jl) iterator type.\n",
"* Prerequisites: [Julia arrays](https://docs.julialang.org/en/v1/manual/arrays)\n",
- "* New functions: [dir](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.dir), [minibatch, Data](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.minibatch), [mnist, mnistview](https://github.com/denizyuret/Knet.jl/blob/master/data/mnist.jl)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "In the next few notebooks, we build classification models for the MNIST handwritten digit recognition dataset. MNIST has 60000 training and 10000 test examples. Each input x consists of 784 pixels representing a 28x28 image. The corresponding output indicates the identity of the digit 0..9."
+ "* New functions: [dir](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.dir), [minibatch, Data](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.minibatch), [mnist, mnistview](https://github.com/denizyuret/Knet.jl/blob/master/data/mnist.jl)\n",
+ "\n",
+ "In the next few notebooks, we build classification models for the MNIST handwritten digit recognition dataset. MNIST has 60000 training and 10000 test examples. Each input x consists of 784 pixels representing a 28x28 image. The corresponding output indicates the identity of the digit 0..9.\n",
+ "\n",
+ "![](http://yann.lecun.com/exdb/lenet/gifs/asamples.gif \"MNIST\")\n",
+ "\n",
+ "[image source](http://yann.lecun.com/exdb/lenet)"
]
},
{
diff --git a/tutorial/25.iterators.ipynb b/tutorial/25.iterators.ipynb
index 8339f3f5a..d8b20563c 100644
--- a/tutorial/25.iterators.ipynb
+++ b/tutorial/25.iterators.ipynb
@@ -22,12 +22,19 @@
"[drop](https://docs.julialang.org/en/v1/base/iterators/#Base.Iterators.drop), \n",
"[cycle](https://docs.julialang.org/en/v1/base/iterators/#Base.Iterators.cycle), \n",
"[Stateful](https://docs.julialang.org/en/v1/base/iterators/#Base.Iterators.Stateful), \n",
- "[iterate](https://docs.julialang.org/en/v1/base/collections/#lib-collections-iteration-1)"
+ "[iterate](https://docs.julialang.org/en/v1/base/collections/#lib-collections-iteration-1)\n",
+ "\n",
+ "The `minibatch` function returns a `Knet.Data` object implemented as a Julia iterator that generates (x,y) minibatches. Iterators are lazy objects that only generate their next element when asked. This has the advantage of not wasting time and memory trying to create and store all the elements at once. We can even have infinite iterators! The training algorithms in Knet are also implemented as iterators so that:\n",
+ "1. We can monitor and report the training loss\n",
+ "2. We can take snapshots of the model during training\n",
+ "3. We can pause/terminate training when necessary\n",
+ "\n",
+ "Here are some things Julia can do with iterators:"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -35,7 +42,8 @@
},
"outputs": [],
"source": [
- "# Load packages, import symbols\n",
+ "# Set display width, load packages, import symbols\n",
+ "ENV[\"COLUMNS\"]=72\n",
"using Pkg; haskey(Pkg.installed(),\"Knet\") || Pkg.add(\"Knet\")\n",
"using Base.Iterators: take, drop, cycle, Stateful\n",
"using Knet"
@@ -43,9 +51,28 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "┌ Info: Loading MNIST...\n",
+ "└ @ Main /home/deniz/.julia/dev/Knet/data/mnist.jl:33\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Knet.Data{Tuple{Array{Float32,4},Array{UInt8,1}}}(Float32[0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0], UInt8[0x07 0x02 … 0x05 0x06], 100, 10000, false, 9901, 1:10000, false, (28, 28, 1, 10000), (10000,), Array{Float32,4}, Array{UInt8,1})"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Load data\n",
"include(Knet.dir(\"data\",\"mnist.jl\"))\n",
@@ -53,23 +80,22 @@
"dtst = minibatch(xtst,ytst,100)"
]
},
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The `minibatch` function returns a `Knet.Data` object implemented as a Julia iterator that generates (x,y) minibatches. Iterators are lazy objects that only generate their next element when asked. This has the advantage of not wasting time and memory trying to create and store all the elements at once. We can even have infinite iterators! The training algorithms in Knet are also implemented as iterators so that:\n",
- "1. We can monitor and report the training loss\n",
- "2. We can take snapshots of the model during training\n",
- "3. We can pause/terminate training when necessary\n",
- "\n",
- "Here are some things Julia can do with iterators:"
- ]
- },
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(\"28×28×1×100 Array{Float32,4}\", \"100-element Array{UInt8,1}\")"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# We can peek at the first element using first()\n",
"summary.(first(dtst))"
@@ -77,13 +103,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n = 100\n"
+ ]
+ }
+ ],
"source": [
"# Iterators can be used in for loops\n",
"# Let's count the elements in dtst:\n",
@@ -94,13 +128,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "\"100-element Array{Tuple{Array{Float32,4},Array{UInt8,1}},1}\""
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Iterators can be converted to arrays using `collect` \n",
"# (don't do this unless necessary, it just wastes memory. Use a for loop instead)\n",
@@ -109,13 +154,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n = 500\n"
+ ]
+ }
+ ],
"source": [
"# We can generate an iterator for multiple epochs using `repeat`\n",
"# (an epoch is a single pass over the dataset)\n",
@@ -126,13 +179,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n = 20\n"
+ ]
+ }
+ ],
"source": [
"# We can generate partial epochs using `take` which takes the first n elements\n",
"n = 0\n",
@@ -142,13 +203,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n = 80\n"
+ ]
+ }
+ ],
"source": [
"# We can also generate partial epochs using `drop` which drops the first n elements\n",
"n = 0\n",
@@ -158,13 +227,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n = 32502\n"
+ ]
+ }
+ ],
"source": [
"# We can repeat forever using `cycle` (this is useful to train until convergence)\n",
"# You do not want to collect a cycle or run a for loop without break! \n",
@@ -178,13 +255,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[7, 2, 1, 10, 4]\n",
+ "[7, 2, 1, 10, 4]\n",
+ "[7, 2, 1, 10, 4]\n",
+ "[6, 10, 5, 4, 9]\n"
+ ]
+ }
+ ],
"source": [
"# We can make an iterator `Stateful` so it remembers where it left off.\n",
"# (by default iterators start from the beginning)\n",
@@ -198,13 +286,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[7, 2, 1, 10, 4]\n",
+ "[7, 2, 1, 10, 4]\n",
+ "[6, 9, 2, 2, 6]\n",
+ "[7, 4, 9, 9, 9]\n"
+ ]
+ }
+ ],
"source": [
"# We can shuffle instances at every epoch using the keyword argument `shuffle=true`\n",
"# (by default elements are generated in the same order)\n",
@@ -218,13 +317,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1×100 LinearAlgebra.Adjoint{Float32,Array{Float32,1}}:\n",
+ " 7990.35 7842.33 8162.68 7692.77 … 8494.0 7361.33 8643.01"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# We can construct new iterators using [Generator expressions](https://docs.julialang.org/en/v1/manual/arrays/#Generator-Expressions-1)\n",
"# The following example constructs an iterator over the x norms in a dataset:\n",
@@ -234,13 +345,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n = 100\n"
+ ]
+ }
+ ],
"source": [
"# Every iterator implements the `iterate` function which returns\n",
"# the next element and state (or nothing if no elements left).\n",
@@ -256,13 +375,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1×100 LinearAlgebra.Adjoint{Any,Array{Any,1}}:\n",
+ " 7990.35 7842.33 8162.68 7692.77 … 8494.0 7361.33 8643.01"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# You can define your own iterator by declaring a new type and overriding the `iterate` method.\n",
"# Here is another way to define an iterator over the x norms in a dataset:\n",
@@ -279,13 +410,6 @@
"\n",
"collect(Xnorm(dtst))'"
]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
}
],
"metadata": {
diff --git a/tutorial/30.lin.ipynb b/tutorial/30.lin.ipynb
index c31cf82eb..16291cb03 100644
--- a/tutorial/30.lin.ipynb
+++ b/tutorial/30.lin.ipynb
@@ -9,36 +9,33 @@
},
"source": [
"# Linear models, loss functions, gradients, SGD\n",
- "(c) Deniz Yuret, 2019"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
+ "(c) Deniz Yuret, 2019\n",
"* Objectives: Define, train and visualize a simple model; understand gradients and SGD; learn to use the GPU.\n",
"* Prerequisites: [Callable objects](https://docs.julialang.org/en/v1/manual/methods/#Function-like-objects-1), [Generator expressions](https://docs.julialang.org/en/v1/manual/arrays/#Generator-Expressions-1), [MNIST](20.mnist.ipynb), [Iterators](25.iterators.ipynb)\n",
"* New functions: \n",
"[mnistdata](https://github.com/denizyuret/Knet.jl/blob/master/data/mnist.jl),\n",
- "[accuracy](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.accuracy), \n",
- "[zeroone](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.zeroone), \n",
- "[nll](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.nll), \n",
- "[Param, @diff, value, params, grad](http://denizyuret.github.io/Knet.jl/latest/reference.html#AutoGrad),\n",
- "[sgd](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.sgd),\n",
- "[progress, progress!](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.progress), \n",
- "[gpu](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.gpu), \n",
- "[KnetArray](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.KnetArray), \n",
- "[load](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.load), \n",
- "[save](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.save)"
+ "[accuracy](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.accuracy), \n",
+ "[zeroone](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.zeroone), \n",
+ "[nll](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.nll), \n",
+ "[Param, @diff, value, params, grad](http://denizyuret.github.io/Knet.jl/latest/reference/#AutoGrad),\n",
+ "[sgd](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.sgd),\n",
+ "[progress, progress!](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.progress), \n",
+ "[gpu](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.gpu), \n",
+ "[KnetArray](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.KnetArray), \n",
+ "[load](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.load), \n",
+ "[save](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.save)\n",
+ "\n",
+ "\n",
+ " ([image source](https://www.oreilly.com/library/view/tensorflow-for-deep/9781491980446/ch04.html))\n",
+ "\n",
+ "In Knet, a machine learning model is defined using plain Julia code. A typical model consists of a **prediction** and a **loss** function. The prediction function takes some input, returns the prediction of the model for that input. The loss function measures how bad the prediction is with respect to some desired output. We train a model by adjusting its parameters to reduce the loss.\n",
+ "\n",
+ "In this section we will implement a simple linear model to classify MNIST digits. The prediction function will return 10 scores for each of the possible labels 0..9 as a linear combination of the pixel values. The loss function will convert these scores to normalized probabilities and return the average -log probability of the correct answers. Minimizing this loss should maximize the scores assigned to correct answers by the model. We will make use of the loss gradient with respect to each parameter, which tells us the direction of the greatest loss increase. We will improve the model by moving the parameters in the opposite direction (using a GPU if available). We will visualize the model weights and performance over time. The final accuracy of about 92% is close to the limit of what we can achieve with this type of model. To improve further we must look beyond linear models."
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -51,7 +48,7 @@
"using Pkg; for p in (\"Knet\",\"AutoGrad\",\"Plots\",\"Images\",\"ImageMagick\"); haskey(Pkg.installed(),p) || Pkg.add(p); end\n",
"using Statistics: mean\n",
"using Base.Iterators: flatten\n",
- "using Random: seed!\n",
+ "import Random # seed!\n",
"using Knet: Knet, AutoGrad, dir, Data, Param, @diff, value, params, grad, progress, progress!, gpu, KnetArray, load, save\n",
"# The following are defined for instruction even though they are provided in Knet\n",
"# using Knet: accuracy, zeroone, nll, sgd"
@@ -59,13 +56,30 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "┌ Info: Loading MNIST...\n",
+ "└ @ Main /home/deniz/.julia/dev/Knet/data/mnist.jl:33\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "600-element Data{Tuple{Array{Float32,2},Array{UInt8,1}}}\n",
+ "100-element Data{Tuple{Array{Float32,2},Array{UInt8,1}}}\n"
+ ]
+ }
+ ],
"source": [
"# Load data (mnistdata basically replicates mnist.ipynb)\n",
"include(Knet.dir(\"data\",\"mnist.jl\"))\n",
@@ -81,18 +95,29 @@
}
},
"source": [
- "## Define linear model"
+ "## Model definition"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Linear([-0.00577016 0.00740097 … 0.000858401 0.0100368; 0.00508172 0.00706544 … 0.000725378 -0.00708007; … ; -0.0163844 -0.0174381 … -0.0148394 -0.00358024; 0.00810655 0.00301301 … 0.011367 -0.00975392], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# In Julia we define a new datatype using `struct`:\n",
"struct Linear; w; b; end\n",
@@ -115,12 +140,12 @@
}
},
"source": [
- "## Prediction and accuracy"
+ "## Prediction"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -134,13 +159,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(\"784×100 Array{Float32,2}\", \"100-element Array{UInt8,1}\")"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"x,y = first(dtst) # The first minibatch from the test set\n",
"summary.((x,y))"
@@ -148,40 +184,84 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1×100 LinearAlgebra.Adjoint{Int64,Array{Int64,1}}:\n",
+ " 7 2 1 10 4 1 4 9 5 9 … 1 3 6 9 3 1 4 1 7 6 9"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"Int.(y)' # correct answers are given as an array of integers (remember we use 10 for 0)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "10×100 Array{Float64,2}:\n",
+ " -0.0573706 0.0836898 -0.0993739 … 0.0341014 -0.125484 \n",
+ " -0.0340025 0.0118058 0.0451012 -0.0658874 0.0276873 \n",
+ " 0.0293171 0.070559 -0.00201588 0.085163 0.0388435 \n",
+ " 0.068166 -0.0514477 -0.0772223 -0.0186688 0.0323772 \n",
+ " -0.00441849 -0.025335 -0.0217464 0.0426281 -0.000801449\n",
+ " 0.102021 0.0436141 0.0867583 … 0.0987738 0.0433309 \n",
+ " -0.0436877 0.0792506 -0.00330623 -0.0109909 -0.113095 \n",
+ " 0.167162 0.00859507 -0.0264033 0.0839035 0.17578 \n",
+ " 0.0891127 -0.0194897 0.0988181 -0.00689439 0.151461 \n",
+ " -0.0394966 -0.0226349 -0.129688 0.0667691 0.117331 "
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"ypred = model(x) # Predictions on the first minibatch: a 10x100 score matrix"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.15"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# We can calculate the accuracy of our model for the first minibatch\n",
"accuracy(model,x,y) = mean(y' .== map(i->i[1], findmax(Array(model(x)),dims=1)[2]))\n",
@@ -190,13 +270,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.09829999999999998"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# We can calculate the accuracy of our model for the whole test set\n",
"accuracy(model,data) = mean(accuracy(model,x,y) for (x,y) in data)\n",
@@ -205,14 +296,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.9017000000000001"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# ZeroOne loss (or error) is defined as 1 - accuracy\n",
"zeroone(x...) = 1 - accuracy(x...)\n",
@@ -227,18 +329,29 @@
}
},
"source": [
- "## Negative log likelihood"
+ "## Loss function"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "nll (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# For classification we use negative log likelihood loss (aka cross entropy, softmax loss, NLL)\n",
"# This is the average -log probability assigned to correct answers by the model\n",
@@ -252,13 +365,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.2995940410919387"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# model(x) gives predictions, let model(x,y) give the loss\n",
"(m::Linear)(x, y) = nll(m(x), y)\n",
@@ -267,13 +391,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.2995940410919387"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# We can also use the Knet nll implementation for efficiency\n",
"(m::Linear)(x, y) = Knet.nll(m(x), y)\n",
@@ -282,7 +417,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "fragment"
@@ -296,18 +431,36 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.300518331889146"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Here is per-instance average negative log likelihood for the whole test set\n",
"model(dtst)"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Bonus question:** What is special about the loss value 2.3?"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {
@@ -321,27 +474,161 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 16,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "Usage:\n",
+ "\n",
+ "\\begin{verbatim}\n",
+ "x = Param([1,2,3]) # user declares parameters with `Param`\n",
+ "x => P([1,2,3]) # `Param` is just a struct wrapping a value\n",
+ "value(x) => [1,2,3] # `value` returns the thing wrapped\n",
+ "sum(x .* x) => 14 # Params act like regular values\n",
+ "y = @diff sum(x .* x) # Except when we differentiate using `@diff`\n",
+ "y => T(14) # you get another struct\n",
+ "value(y) => 14 # which carries the same result\n",
+ "params(y) => [x] # and the Params that it depends on \n",
+ "grad(y,x) => [2,4,6] # and the gradients for all Params\n",
+ "\\end{verbatim}\n",
+ "\\texttt{Param(x)} returns a struct that acts like \\texttt{x} but marks it as a parameter you want to compute gradients with respect to.\n",
+ "\n",
+ "\\texttt{@diff expr} evaluates an expression and returns a struct that contains the result (which should be a scalar) and gradient information.\n",
+ "\n",
+ "\\texttt{grad(y, x)} returns the gradient of \\texttt{y} (output by @diff) with respect to any parameter \\texttt{x::Param}, or \\texttt{nothing} if the gradient is 0.\n",
+ "\n",
+ "\\texttt{value(x)} returns the value associated with \\texttt{x} if \\texttt{x} is a \\texttt{Param} or the output of \\texttt{@diff}, otherwise returns \\texttt{x}.\n",
+ "\n",
+ "\\texttt{params(x)} returns an iterator of Params found by a recursive search of object \\texttt{x}.\n",
+ "\n",
+ "Alternative usage:\n",
+ "\n",
+ "\\begin{verbatim}\n",
+ "x = [1 2 3]\n",
+ "f(x) = sum(x .* x)\n",
+ "f(x) => 14\n",
+ "grad(f)(x) => [2 4 6]\n",
+ "gradloss(f)(x) => ([2 4 6], 14)\n",
+ "\\end{verbatim}\n",
+ "Given a scalar valued function \\texttt{f}, \\texttt{grad(f,argnum=1)} returns another function \\texttt{g} which takes the same inputs as \\texttt{f} and returns the gradient of the output with respect to the argnum'th argument. \\texttt{gradloss} is similar except the resulting function also returns f's output.\n",
+ "\n"
+ ],
+ "text/markdown": [
+ "Usage:\n",
+ "\n",
+ "```\n",
+ "x = Param([1,2,3]) # user declares parameters with `Param`\n",
+ "x => P([1,2,3]) # `Param` is just a struct wrapping a value\n",
+ "value(x) => [1,2,3] # `value` returns the thing wrapped\n",
+ "sum(x .* x) => 14 # Params act like regular values\n",
+ "y = @diff sum(x .* x) # Except when we differentiate using `@diff`\n",
+ "y => T(14) # you get another struct\n",
+ "value(y) => 14 # which carries the same result\n",
+ "params(y) => [x] # and the Params that it depends on \n",
+ "grad(y,x) => [2,4,6] # and the gradients for all Params\n",
+ "```\n",
+ "\n",
+ "`Param(x)` returns a struct that acts like `x` but marks it as a parameter you want to compute gradients with respect to.\n",
+ "\n",
+ "`@diff expr` evaluates an expression and returns a struct that contains the result (which should be a scalar) and gradient information.\n",
+ "\n",
+ "`grad(y, x)` returns the gradient of `y` (output by @diff) with respect to any parameter `x::Param`, or `nothing` if the gradient is 0.\n",
+ "\n",
+ "`value(x)` returns the value associated with `x` if `x` is a `Param` or the output of `@diff`, otherwise returns `x`.\n",
+ "\n",
+ "`params(x)` returns an iterator of Params found by a recursive search of object `x`.\n",
+ "\n",
+ "Alternative usage:\n",
+ "\n",
+ "```\n",
+ "x = [1 2 3]\n",
+ "f(x) = sum(x .* x)\n",
+ "f(x) => 14\n",
+ "grad(f)(x) => [2 4 6]\n",
+ "gradloss(f)(x) => ([2 4 6], 14)\n",
+ "```\n",
+ "\n",
+ "Given a scalar valued function `f`, `grad(f,argnum=1)` returns another function `g` which takes the same inputs as `f` and returns the gradient of the output with respect to the argnum'th argument. `gradloss` is similar except the resulting function also returns f's output.\n"
+ ],
+ "text/plain": [
+ " Usage:\n",
+ "\n",
+ "\u001b[36m x = Param([1,2,3]) # user declares parameters with `Param`\u001b[39m\n",
+ "\u001b[36m x => P([1,2,3]) # `Param` is just a struct wrapping a value\u001b[39m\n",
+ "\u001b[36m value(x) => [1,2,3] # `value` returns the thing wrapped\u001b[39m\n",
+ "\u001b[36m sum(x .* x) => 14 # Params act like regular values\u001b[39m\n",
+ "\u001b[36m y = @diff sum(x .* x) # Except when we differentiate using `@diff`\u001b[39m\n",
+ "\u001b[36m y => T(14) # you get another struct\u001b[39m\n",
+ "\u001b[36m value(y) => 14 # which carries the same result\u001b[39m\n",
+ "\u001b[36m params(y) => [x] # and the Params that it depends on \u001b[39m\n",
+ "\u001b[36m grad(y,x) => [2,4,6] # and the gradients for all Params\u001b[39m\n",
+ "\n",
+ " \u001b[36mParam(x)\u001b[39m returns a struct that acts like \u001b[36mx\u001b[39m but marks it as a\n",
+ " parameter you want to compute gradients with respect to.\n",
+ "\n",
+ " \u001b[36m@diff expr\u001b[39m evaluates an expression and returns a struct that\n",
+ " contains the result (which should be a scalar) and gradient\n",
+ " information.\n",
+ "\n",
+ " \u001b[36mgrad(y, x)\u001b[39m returns the gradient of \u001b[36my\u001b[39m (output by @diff) with respect\n",
+ " to any parameter \u001b[36mx::Param\u001b[39m, or \u001b[36mnothing\u001b[39m if the gradient is 0.\n",
+ "\n",
+ " \u001b[36mvalue(x)\u001b[39m returns the value associated with \u001b[36mx\u001b[39m if \u001b[36mx\u001b[39m is a \u001b[36mParam\u001b[39m or the\n",
+ " output of \u001b[36m@diff\u001b[39m, otherwise returns \u001b[36mx\u001b[39m.\n",
+ "\n",
+ " \u001b[36mparams(x)\u001b[39m returns an iterator of Params found by a recursive search\n",
+ " of object \u001b[36mx\u001b[39m.\n",
+ "\n",
+ " Alternative usage:\n",
+ "\n",
+ "\u001b[36m x = [1 2 3]\u001b[39m\n",
+ "\u001b[36m f(x) = sum(x .* x)\u001b[39m\n",
+ "\u001b[36m f(x) => 14\u001b[39m\n",
+ "\u001b[36m grad(f)(x) => [2 4 6]\u001b[39m\n",
+ "\u001b[36m gradloss(f)(x) => ([2 4 6], 14)\u001b[39m\n",
+ "\n",
+ " Given a scalar valued function \u001b[36mf\u001b[39m, \u001b[36mgrad(f,argnum=1)\u001b[39m returns another\n",
+ " function \u001b[36mg\u001b[39m which takes the same inputs as \u001b[36mf\u001b[39m and returns the gradient\n",
+ " of the output with respect to the argnum'th argument. \u001b[36mgradloss\u001b[39m is\n",
+ " similar except the resulting function also returns f's output."
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"@doc AutoGrad"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 17,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Linear"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Redefine the constructor to use Param's so we can compute gradients\n",
"Linear(i::Int,o::Int,scale=0.01) = \n",
@@ -350,7 +637,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 18,
"metadata": {
"slideshow": {
"slide_type": "fragment"
@@ -364,13 +651,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Linear(P(Array{Float64,2}(10,784)), P(Array{Float64,1}(10)))"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Use a larger scale to get a large initial loss\n",
"model = Linear(784,10,1.0)"
@@ -378,13 +676,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "19.10423456298375"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# We can still do predictions and calculate loss:\n",
"model(x,y)"
@@ -392,13 +701,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "T(19.10423456298375)"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# And we can do the same loss calculation also computing gradients:\n",
"J = @diff model(x,y)"
@@ -406,13 +726,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 22,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "19.10423456298375"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# To get the actual loss value from J:\n",
"value(J)"
@@ -420,13 +751,26 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 23,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2-element Array{Param,1}:\n",
+ " P(Array{Float64,1}(10)) \n",
+ " P(Array{Float64,2}(10,784))"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# params(J) returns an iterator of Params J depends on (i.e. model.b, model.w):\n",
"params(J) |> collect"
@@ -434,13 +778,34 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "10×784 Array{Float64,2}:\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# To get the gradient of a parameter from J:\n",
"∇w = grad(J,model.w)"
@@ -448,13 +813,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 25,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "∇b = grad(J, model.b) = [-0.139954, -0.064541, -0.109522, -0.1275, -0.059184, -0.0980703, -0.102617, 0.0133898, -0.104578, 0.792576]\n"
+ ]
+ }
+ ],
"source": [
"# Note that each gradient has the same size and shape as the corresponding parameter:\n",
"@show ∇b = grad(J,model.b);"
@@ -477,13 +850,31 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 26,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "value(model.b) = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "19.10423456298375"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Loss for the first minibatch with the original parameters\n",
"@show value(model.b)\n",
@@ -492,13 +883,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 27,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.1"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# To numerically check the gradient let's increase the last entry of b by +0.1.\n",
"model.b[10] = 0.1"
@@ -506,13 +908,31 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 28,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "value(model.b) = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1]\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "19.183620170313954"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# We see that the loss moves by ≈ +0.79*0.1 as expected.\n",
"@show value(model.b)\n",
@@ -521,13 +941,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 29,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Reset the change.\n",
"model.b[10] = 0"
@@ -546,7 +977,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 30,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -569,40 +1000,73 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 31,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "([0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0], [-0.139954, -0.064541, -0.109522, -0.1275, -0.059184, -0.0980703, -0.102617, 0.0133898, -0.104578, 0.792576])"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"∇w2,∇b2 = nllgrad(model,x,y)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 32,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"∇w2 ≈ ∇w"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 33,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"∇b2 ≈ ∇b"
]
@@ -620,13 +1084,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 34,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "sgdupdate! (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Here is a single SGD update:\n",
"function sgdupdate!(func, args; lr=0.1)\n",
@@ -641,13 +1116,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 35,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "sgd (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# We define SGD for a dataset as an iterator so that:\n",
"# 1. We can monitor and report the training loss\n",
@@ -659,17 +1145,27 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 36,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "model(dtst) = 2.313187215962106\n",
+ "3.03e-01 100.00%┣███████████████████┫ 6000/6000 [00:10/00:10, 598.92i/s]\n",
+ "model(dtst) = 0.2806535683801265\n"
+ ]
+ }
+ ],
"source": [
"# Let's train a model for 10 epochs to compare training speed on cpu vs gpu.\n",
"# progress!(itr) displays a progress bar when wrapped around an iterator like this:\n",
- "# 2.94e-01 100.00%┣████████████████████┫ 6000/6000 [00:10/00:10, 592.96/s]\n",
+ "# 2.94e-01 100.00%┣████████████████████┫ 6000/6000 [00:10/00:10, 592.96/s] 2.31->0.28\n",
"model = Linear(784,10)\n",
"@show model(dtst)\n",
"progress!(sgd(model, repeat(dtrn,10)))\n",
@@ -689,16 +1185,26 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 37,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "model(dtst) = 2.3035536f0\n",
+ "3.03e-01 100.00%┣██████████████████┫ 6000/6000 [00:04/00:04, 1654.96i/s]\n",
+ "model(dtst) = 0.28049186f0\n"
+ ]
+ }
+ ],
"source": [
"# The training would go a lot faster on a GPU:\n",
- "# 2.94e-01 100.00%┣███████████████████┫ 6000/6000 [00:02/00:02, 2653.45/s]\n",
+ "# 2.94e-01 100.00%┣███████████████████┫ 6000/6000 [00:02/00:02, 2653.45/s] 2.31->0.28\n",
"# To work on a GPU, all we have to do is convert Arrays to KnetArrays:\n",
"if gpu() >= 0 # gpu() returns a device id >= 0 if there is a GPU, -1 otherwise\n",
" atype = KnetArray{Float32} # KnetArrays are stored and operated in the GPU\n",
@@ -728,13 +1234,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 38,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "trainresults (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"function trainresults(file, model)\n",
" if (print(\"Train from scratch? (~77s) \"); readline()[1]=='y')\n",
@@ -758,9 +1275,17 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 39,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? (~77s) stdin> n\n"
+ ]
+ }
+ ],
"source": [
"# 2.43e-01 100.00%┣████████████████▉┫ 60000/60000 [00:44/00:44, 1349.13/s]\n",
"lin = trainresults(\"lin113.jld2\",Linear(784,10));"
@@ -779,7 +1304,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 40,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -792,13 +1317,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 41,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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IiI33nhjOByeOXPm1q1bc14bAAD9rpcg/Pa3v11ZWTl79uwtW7Y89NBDTz75pNfr/e53v5v74gAA6G/ufZv+9re//eIXvygrK1u8ePHs2bO/8pWvtLa2XnvttbkvDgCA/tZLj9DtdiulRGT16tUzZswQkUAgkEqlcl0aAAD9r5cgPOmkk1asWLFu3boXX3zxoosuSqfTS9TqzyoAABDiSURBVJcuPfbYY3NfHAAA/a2XIFy8ePHzzz8/adKkiy++uKKi4tprr33xxRfvvffe3BcHAEB/62WM8Jhjjtm6devOnTurqqpEZNGiRT//+c9dLlfOawMAoN/1EoQi4na7q6urncfFxcU5rAcAgJziPkIAgNG4jxAAYDTuIwQAGI37CAEARuM+QgCA0XJ3H2Fzc3NtbW1JScmcOXOam5t7LH366aenTJkSiUSmT5++cePGQ9wWAAAHqJcgdO4j3LZt2yOPPCIiixYtqq+vP/nkkw9xS4sWLaqpqWloaBgxYsTixYu7L9qyZctll132yCOPNDQ0zJkz54orrjjEbQEAcIB6n4/QuY/QGSksLi4+LHfTL1u2bP78+T6fb/78+U899VT3RZs2bbrkkktOOeWUQCBw+eWXb9iw4dA3BwDAgej9hvoVK1YsXrx43bp1tm1Pnjz5+9///rnnnnuIW6qvr6+pqRERp1/YfdEZZ5xxxhlniEg2m12wYMHFF1+878v//ve/73sLh9frve2226LRqMvlsm37ECvEQYlGo5lMJp1O57sQs0SjUcuyPB5PvgsxSzQa9fv9lsVM5jkVjUbb29sPcOVAIOB2955on6mXlz3xxBNf+9rXbrzxxrvvvlsptXLlyrlz5/7+97+/8MILP982HFprp4uptc5ms/uu8Pzzz990002zZs268847913q8/lKSkp6Vu92q24OpTwcLHZ7XrDb84Ldnhc52+e9BOFdd9110003LVy40Hl66qmn2ra9cOHCQwzCqqqqrVu3jh07tr6+vuv72xxa61tuuWX16tVLly4dN25cry8/+uijb7/99l4X2bbtcrlCodChlIeDlU6nA4GA3+/PdyFmSSQS4XCYHmGOxWKxcDhMjzDHQqFQOBzOwYZ6+X/duHHjaaed1r1lxowZhz5uV1tbW1dXp7Wuq6ubO3eu07hq1SoRee2115YtW/bMM89UVVVFo9FoNHqI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qS996UsTJkzIdxUAPsGpUQCA0QhCYKBYv369UuqDDz44++yzi4qKjj322Mcff7xrqW3b99133+TJk8Ph8NSpU5988smuRVrrBx54YNKkSYWFhaeffvqrr77ataihoeHcc8+NRCJHHXXUb3/72672d955Z/bs2SUlJUVFRbNmzWIoESYjCIGc2rRp0/p9dF/h3HPPPeOMM5YsWTJjxozLLrvsD3/4g9P+05/+9Pbbb//GN77xxBNPzJo165JLLula9OCDDy5YsODqq69+9NFHy8vLzzjjjDVr1jiLvvnNb1544YUrVqyYPn36FVdcEY1GRSSbzZ599tmlpaUPPfTQww8/7PV6582bl8N9AAwwh3G2ewD7t/8fw3Xr1onIo48+2rX+9ddfP336dK21bdulpaW/+tWvuhZ9//vfP/30051FQ4YMefzxx532bDY7e/bsJUuWOJu7//77nXYnAtetW6e13rp1q4i89957zqLGxsZf//rX/fzRgYGLHiGQU04U9dB9hdra2q7HF1xwwXvvvScijY2NTU1N5513Xteic845x1nU1NS0Y8eOWbNmOe2WZf3xj3+87LLLnKennnqq8yAUCnW9tqqq6oorrvjiF784d+7cxYsXx+Pxr3/96/3yaYEjAUEIDFyWZWUymb4WZbNZEXFWcLlcva7WPf+6v7auru6DDz748pe//Prrr0+aNOmmm246fFUDRxiCEBhYVqxY0fV4+fLlU6ZMEZHy8vLS0tI//vGPXYtWrlzpLKqsrCwuLn7hhRecdtu2TzjhhLvuums/m2hubr7qqqtKSkrmz5//xBNPPPHEEz//+c/75cMARwLuIwRy6vnnn9/3Es3zzz+/6/GNN964c+fOSZMmvfDCCw888MDTTz8tIkqpm2+++ZprrnEWvfLKK/fee+/y5cudRTfeeONVV121Y8eOMWPG/Nd//dc777zz2GOP7aeGwsLCZ555JhaLXXzxxYlEoq6uburUqYf/owJHitwPSwLG2v+PoXOxzOuvv37qqaeGw+Gjjz666xIYrXU2m/3pT386ceLEYDB43HHHPfnkk90X3XPPPWPGjAkGgyeeeOJzzz3XtbnuQ5Ldn/7P//zPtGnTQqFQcXHxBRdcsGXLln7/8MBApXTfP5wAcmn9+vUTJ07kRxLIMcYIAQBG+/94dZbOM91OcwAAAABJRU5ErkJggg=="
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Demonstrates underfitting: training loss not close to 0\n",
"# Also slight overfitting: test loss higher than train\n",
@@ -807,13 +1341,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 42,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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qVOnOhyOmTNnPv/888kizvkjjzwyZcqUzMzMuXPnvvnmm8milpaWq6++2ul0lpWVPfPMM8nln3zyyVVXXZWdnZ2VlbVo0SIMJYKAEIQA6fHll182HqfvB66++uoFCxZs3Lhx/vz5ixcvfvnll7XlDz/88L333vvjH/948+bNixYt+v73v58sevTRR2tra2+77bYnn3zS7XYvWLCgoaFBK/rJT35y/fXXv/TSS/Pmzbvpppv8fj8RKYpyxRVX5OTk/P73v3/88cdNJtOSJUt0PAYAI8NQPeoeAAZv4P+Pe/fuJaInn3wy+fnly5fPmzePc66qak5Ozh//+Mdk0S9/+cu5c+dqRQUFBc8++6y2XFGUq666auPGjdrm1q9fry3XInDv3r2c86amJiL67LPPtCKPx/P0008P864DjDhoEQKkhxZFKfp+oLKyMvn6uuuu++yzz4jI4/F0dnZec801yaKKigqtqLOzs7W1ddGiRdpySZJeeeWVxYsXa2/nzJmjvbDb7cl1CwsLb7rpposuuqi6unrt2rWhUOhHP/rRsOwtwAiGIAQ4C0iSFI/HT1SkKAoRaR+QZbnfj/XNv77r1tXVffHFF9/+9rfffffdKVOmrFixYuhqDXB2QBACjFAvvfRS8vXWrVunTZtGRG63Oycn55VXXkkWbd++XSvKz893uVw7d+7UlquqeuGFFz744IMDbMLn891yyy3Z2dk1NTWbN2/evHnz7373u2HZGYARDNcRAqTHjh07jp+iee211yZf33nnnW1tbVOmTNm5c+cjjzyybds2ImKM3XXXXcuWLdOKXn/99Yceemjr1q1a0Z133nnLLbe0traee+65zz333CeffPLUU08NUIfMzMwXX3wxEAh873vfC4fDdXV1M2fOHPpdBRjh9B+WBICB/z9qk2XefffdOXPmOByO8847LzkFhnOuKMrDDz88efJkm802ffr0559/vm/Rr3/963PPPddms82aNetPf/pTcnN9hyT7vv3LX/4ye/Zsu93ucrmuu+66gwcPDvvOA4wwjJ/4/yQApEVjY+PkyZPxfxNAHxgjBAAAof3/+vJe7g19qaAAAAAASUVORK5CYII="
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# this is the error plot, we get to about 7.5% test error, i.e. 92.5% accuracy\n",
"plot([lin[4,:], lin[5,:]],ylim=(.0,.12),labels=[:trnerr :tsterr],xlabel=\"Epochs\",ylabel=\"Error\")"
@@ -832,13 +1375,59 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 43,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "28×280 Array{Gray{Float64},2} with eltype Gray{Float64}:\n",
+ " Gray{Float64}(0.490824) … Gray{Float64}(0.500489)\n",
+ " Gray{Float64}(0.509466) Gray{Float64}(0.500019)\n",
+ " Gray{Float64}(0.499039) Gray{Float64}(0.490492)\n",
+ " Gray{Float64}(0.508941) Gray{Float64}(0.476173)\n",
+ " Gray{Float64}(0.494655) Gray{Float64}(0.488138)\n",
+ " Gray{Float64}(0.508286) … Gray{Float64}(0.485166)\n",
+ " Gray{Float64}(0.50035) Gray{Float64}(0.464198)\n",
+ " Gray{Float64}(0.485799) Gray{Float64}(0.508036)\n",
+ " Gray{Float64}(0.498516) Gray{Float64}(0.475252)\n",
+ " Gray{Float64}(0.490375) Gray{Float64}(0.491196)\n",
+ " Gray{Float64}(0.493878) … Gray{Float64}(0.498795)\n",
+ " Gray{Float64}(0.510057) Gray{Float64}(0.515459)\n",
+ " Gray{Float64}(0.507569) Gray{Float64}(0.510868)\n",
+ " ⋮ ⋱ \n",
+ " Gray{Float64}(0.493676) Gray{Float64}(0.49869) \n",
+ " Gray{Float64}(0.510784) Gray{Float64}(0.54785) \n",
+ " Gray{Float64}(0.513567) Gray{Float64}(0.501581)\n",
+ " Gray{Float64}(0.505647) Gray{Float64}(0.490174)\n",
+ " Gray{Float64}(0.506392) … Gray{Float64}(0.509558)\n",
+ " Gray{Float64}(0.484479) Gray{Float64}(0.491085)\n",
+ " Gray{Float64}(0.509207) Gray{Float64}(0.498947)\n",
+ " Gray{Float64}(0.500104) Gray{Float64}(0.494736)\n",
+ " Gray{Float64}(0.514525) Gray{Float64}(0.521575)\n",
+ " Gray{Float64}(0.506117) … Gray{Float64}(0.514865)\n",
+ " Gray{Float64}(0.509232) Gray{Float64}(0.490231)\n",
+ " Gray{Float64}(0.495311) Gray{Float64}(0.487005)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\"Epoch 99\""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"# Let us visualize the evolution of the weight matrix as images below\n",
"# Each row is turned into a 28x28 image with positive weights light and negative weights dark gray\n",
diff --git a/tutorial/40.mlp.ipynb b/tutorial/40.mlp.ipynb
index 5e5c09117..6df528f8c 100644
--- a/tutorial/40.mlp.ipynb
+++ b/tutorial/40.mlp.ipynb
@@ -9,31 +9,28 @@
},
"source": [
"# Multilayer Perceptron (MLP) \n",
- "(c) Deniz Yuret, 2019"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
+ "(c) Deniz Yuret, 2019\n",
"* Objectives: Stack multiple layers, demonstrate the power of nonlinear activation functions, use regularization and dropout to address overfitting.\n",
"* Prerequisites: [Linear models](30.lin.ipynb), [MNIST](20.mnist.ipynb)\n",
"* New functions: \n",
- "[relu](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.relu), \n",
- "[dropout](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.dropout), \n",
- "[param, param0](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.param), \n",
- "[xavier](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.xavier), \n",
- "[training](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.training), \n",
- "[gc](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.gc)"
+ "[relu](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.relu), \n",
+ "[dropout](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.dropout), \n",
+ "[param, param0](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.param), \n",
+ "[xavier](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.xavier), \n",
+ "[training](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.training), \n",
+ "[gc](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.gc)\n",
+ "\n",
+ "![image](https://github.com/denizyuret/Knet.jl/blob/master/docs/src/images/neural_net2.jpeg?raw=true)\n",
+ "([image source](http://cs231n.github.io/neural-networks-1))\n",
+ "\n",
+ "A multilayer perceptron, i.e. a fully connected feed-forward neural network, is basically a bunch of linear layers stuck together with non-linearities in between. In this notebook we will first chain together a couple of linear layers and see that it has no effect on performance (multiple linear layers still compute a linear function). However with a one line change (adding an elementwise nonlinear function between layers) the accuracy will go from 92% to 98%! It turns out the class of functions that can be represented by linear models is severely restricted and does not contain good MNIST classifiers. MLPs have no such restrictions, being **universal function approximators** they can represent any classifier given large enough layers and learn the correct classifier with sufficient data. \n",
+ "\n",
+ "Simple models with low capacity, e.g. the linear model, have an **underfitting** problem: the error does not drop to 0 even on the training set. Models with high capacity, e.g. MLP, have an **overfitting** problem: even when the training set error goes to 0, the test set error remains high. We will implement two methods to fight overfitting: **regularization** and **dropout**."
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -51,13 +48,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "┌ Info: Loading MNIST...\n",
+ "└ @ Main /home/deniz/.julia/dev/Knet/data/mnist.jl:33\n"
+ ]
+ }
+ ],
"source": [
"# Load data (see mnist.ipynb)\n",
"include(Knet.dir(\"data\",\"mnist.jl\")) # Load data\n",
@@ -66,13 +72,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "trainresults (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# For running experiments\n",
"function trainresults(file,model; o...)\n",
@@ -94,13 +111,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "atype (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Some utilities to make model definitions easier:\n",
"param(d...; init=xavier, atype=atype())=Param(atype(init(d...)))\n",
@@ -122,7 +150,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -153,7 +181,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -169,14 +197,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(\"64×784 Param{KnetArray{Float32,2}}\", \"64-element Param{KnetArray{Float32,1}}\")\n",
+ "(\"10×64 Param{KnetArray{Float32,2}}\", \"10-element Param{KnetArray{Float32,1}}\")\n"
+ ]
+ }
+ ],
"source": [
"# Here is an example two layer model\n",
"model=Chain(Layer0(784,64), Layer0(64,10))\n",
@@ -185,30 +222,49 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "2.04e-01 100.00%┣████████████████┫ 60000/60000 [00:51/00:51, 1179.52i/s]\n",
+ "Float32[0.240742; 0.282535; 0.0691333; 0.0794]\n"
+ ]
+ }
+ ],
"source": [
"# Train the two layer model\n",
- "# 52s [0.240726; 0.281965; 0.0691833; 0.0794]\n",
+ "# 2.04e-01 100.00%┣████████████████┫ 60000/60000 [00:51/00:51, 1179.52i/s]\n",
+ "# [0.240742; 0.282535; 0.0691333; 0.0794]\n",
"mlp1 = trainresults(\"mlp113a.jld2\", model);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(\"10×784 Param{KnetArray{Float32,2}}\", \"10-element Param{KnetArray{Float32,1}}\")\n"
+ ]
+ }
+ ],
"source": [
"# Here is a single layer (linear) model\n",
"model=Chain(Layer0(784,10))\n",
@@ -217,22 +273,33 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "2.30e-01 100.00%┣████████████████┫ 60000/60000 [00:40/00:40, 1502.26i/s]\n",
+ "Float32[0.242363; 0.267073; 0.0671333; 0.0746]\n"
+ ]
+ }
+ ],
"source": [
"# Train the single layer (linear) model\n",
- "# 43s [0.242353; 0.267041; 0.0669667; 0.0749]\n",
+ "# 2.30e-01 100.00%┣████████████████┫ 60000/60000 [00:40/00:40, 1502.26i/s]\n",
+ "# [0.242363; 0.267073; 0.0671333; 0.0746]\n",
"lin1 = trainresults(\"mlp113b.jld2\", model);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -245,13 +312,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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"
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# multilinear converges to a similar solution, not identical because problem is non-convex\n",
"plot([lin1[1,:], lin1[2,:], mlp1[1,:], mlp1[2,:]], ylim=(0.0,0.4),\n",
@@ -260,13 +336,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeXwU9f0/8Pcce9+bbE5yASEJ9ylyH+IFJlFqWxVFbLWtFvl6VVultLUK3rX9ff3ar20jtfVo/SqgUq0KBEUrAspNQriSkPvYZO/d2Zn5/TFhCSGEcG0g83o++uhjMp+Znc8ucV/5fOYznw8jyzIBAACoFdvXFQAAAOhLCEIAAFA1BCEAAKgaghAAAFQNQQgAAKqGIAQAAFVDEAIAgKrFLwjdbndhYaHT6SwqKnK73ScfIIpifn7+GZ0CAABwjuIXhE8//XRWVlZdXV1mZuYzzzzTpfT3v//95MmTy8vLe38KAADAuWPiNrNMXl7emjVr8vPzy8rKiouLu2Tehg0b/H5/YWFh5/r0fAoAAMC5i18Qms3mpqYmg8EQDAaTk5M9Hk83tWFOqE/Pp6xbt+7555/neb7LixQXFy9cuFAQBI1G021NQj5/VfneIeMmEFFbhLwCZZjO9d1BNBrlOI5hmL6uiFpIkiTLMsdxfV0RtZBlWRTFk79w4MI5o28VjuNY9iz7OOP3jyrLsvJ+lN+ncz9lxYoVEyZMGDt2bJf9AwcOFEWxsbExJSWl25dtrW6uWRUYNFokoo+qmTXVzN+nSWf6dqCLtrY2o9Go0+n6uiJqEQgEBEGw2Wx9XRG1EEWxtbXV5XL1dUVUpKWlxW639/KPj7NOQYpnEKalpVVXV+fm5tbU1KSnp5/7KVqtdtq0aXPnzu32XJ1Op9fruy1KTBzQIFZqo2HWbMt1ylXlol6vPaP3AidTPnAEYdxIksRx3Kl+yeG8E0Wxh28VuBCUDzwOrfD4DZYpLCwsKSmRZbmkpKS4uFjZWVpaeqannDt3qK1Zywj1VUSUY2GOeLH+BgCAesUvCJctW7Zz586MjIw9e/YsXbpU2Tlr1qwzPeXcOfT2JNYYbagioiQD+aPkE87XawMAwCUmfl2jdrt97dq1XXZ2GarT5cduTzl3QTEUYEloqCIihijLzBzxycMdGOUBAKBGapxZhmUY4rhoQ7XyY46Fjnj7tkYAANBn1DgU2J5sGfPDPJ35PuXHbAtzxCcToUUIAKBGqmwRatiVDf84LHY8lZhtxngZAAD1UmOLkIjuHXdXbDvHQl819mFdAACgL6mxRRjxRL9dXf76nv9TfhxsZcra0CIEAFApNQYhb+SyxqfObCHP2r8S0QgnUxeUG4J9XS0AAOgLagxClmecA6yVmkiw7jARcQxNS2E31mGWNQAANVJjECoOc+FAQ6WyPSuV2VCH3lEAADVSYxBGvNGqjxoXjF+obWuRhQgRzU5j1tciCAEA1EiNQSgGxabt7e8f+nRDpi3aXEtEI5yMOywf9SMLAQBUR41BqCgcfPW15vxofcdEazNTWfSOAgCokHqDMCAE3x1o5FOzlR9npTEb0DsKAKA+qgxChkgmPa+bMmyuJiVT2Tc7jVmHIAQAUB9VBiEREbEM6zQ4PJGO+bbzbIwo0yHMtQYAoDJqDEJWwxpTdET05dEtjf7m2P5ZqRg7CgCgOmqca1Rn1xTckUlE8/Pmtb//F3FKIedMIqJZacy6GvnOvL6uHwD0O8uWLXv//ff7uhaXhry8vLfeeiueV1RjEMbsa9n/XusX/1U3TAnCOWnMo1tEmTgsyAQA51dlZeX8+fOvu+66vq7IxW7//v3Lly+P80VVHYT5CblpjslCfbV+2OVElGlmjDxT1iYX2BGFAHCeZWZmjhkzpq9rcbFj2T64YafGe4ThNmFfifL4IPNvfbun4VCsCFPMAACojRqDUGfXFPyg46mJdNcgsbE2VoRJRwEA1EaNQdjZ+CEzQ81VJHeE3+w0trRWkhCFAACqodIglASJZCKiL5t37y7IlSMhZX+qkVwGZmcrkhAAQC1UOlhm1/8cySlKseYYZ2VNpaypnYuU24SjEzBeBgBAFVTaIrQNNrnLfUQUioZ/UfrbzkWzU5lParBILwCAWqg0CB35Zvc+LxHped1jkx/oXHRNBru5Sa4P9lHNAAAgvlQahNYcY6g5IviiRHSwoezQluMzPph4uj6LfeMAGoUAAKqg0iBkWMaWe6x3VI62rV0pet2x0ttz2Vf3IwgBADowTDfDJrrdeSlSaRASkSPf4i7zEdHEzIkDBl8W3P55rGh6KhOI0rctGDsKAP3ZnDlzzuX0Rx555HzVpG+pNwhdo205RSlEVOE+9FpSOLBtQ6yIIbotl/lrBRqFANCfrVu37lxOf+qpp85XTfqWeoOQ07NaC09EuY6BD815TGypjzbVxEoX5bJvHJAiiEIA6Keuv/56Iho9ejQRMQzzt7/9LSUlRdl+6623Ro0alZCQ8OKLL/bwCrGu0d6fcnFS6XOEXXzdsGPXiPTvfvuZ9aqblT3ZFibfznxYLRVnqfdvBQC4cBqD9KNNYnyulWyg/53Kddm5evVqhmG2b9+u/Lh58+ZYA7Gqqmr79u0bNmy47rrr7rvvvt5c4ixOuXioOgiDTeGj65pzb0of6Ro6YuKdwr6tnUtvz2X/WiEXZ/VV7QCgPzNraNGQOA02MfGnv9CvfvUrl8ulbN99990Mw8yePTsY7O2TZGdxysVD1UGoT9AO/m4aEel5/TZdmEaPGNep9LsD2Yc2C00hzqXvqwoCQL9l5On6i6nDKZaCRGSxWM709LM45eJxEf0zxB/DMsyxVXgTDM4sW0bnUquG5mWybx3EfUIA6LcEQejrKvQ9VQdhB5mIKNuW4Q17m4OtnUtuz2UxdhQA+qu5c+cOGjSolwfznVzQWsWf2oNQ8EW3Lt+vZGGF+3DLto8jR8pipVekMY1BwmIUANAvrV27tqqqiohk+fi3XLfbsixHOzm5tNvTLxVqD0KNmWc4xlcbIqKrcmY6w+T96l+xUpah23KZEswyAwDQf6k9CInIkW9uK/Mq2yu1NdVlX8pCJFa6eCj3j4PS5sZL728cAADoDQQhOfItDV+3BRvDRPSzaQ+muwaF9m2JlaYa6eWp3IJS0Ys7ygAA/RGCkBx55rRpzp3/fbjuy1Yieiot0LT5X50PuD6LnZnK3P9VnB59BQCAeEIQEjGUOjVh9AODLBkGIlox92ltU0No79edD/n9JO7zevmfh3CzEACgv0EQdtDZNeYMAxHxWv3a7MlRZ1LnUhNPb8zi7v2PWO3HzUIAUJH+vQCTAkHYFSMzE23TTUldp1Ybl8jcO5T7wWeihCgEgH6hh2WYel6hqd8swKRAEHbFsMzweYPfrVhb463rUvSL0WxIpOXb0UEKAP1BD8sw9bxCU79ZgEmBIOzesMS8RI2z/I/bhE6jRTmG3prF/e2A9MS3yEIAuLR1XoappKQkNTU1MTHxD3/4Q5eibvWbBZgU/W2mnPMlPyF3R8Pu9sadnuf5EUsK9E6tsj/dxHx2HX/Vh1GvID99WddlTQAAekkKeD0f/b3LTvPUQj5pgLLt2/RBtLG6c6kmfaBp4tXKtlBzyL/5311Ot133A0arU7bbP3hVjoSUbdZosV5za5eDOy/D9OCDD3722Wc6ne6nP/3pkiVLuqzQ1LNLegEmBYLwlPS8PvGWYd6/rN/+rMY62OQaa08YZmG1bLKBSufxc/8dvfsL8aXJHNuv7hkDQLywHJ+Y1mVfLMaIiLM5STrhqS3O6jx+pE5/8unEHu/k453JcrSjQ4vVG3uuy/Tp0x999NGFCxd++OGHva3/MZf0AkwKBOEp5SUMbja0lI/51yhhnZh3W+MWt3ufd8gtA4jIoaNPruWLP4ku3CiunM7x6GAGgDPE6o3m6cU9HGAYMbmHUj4xrefTTZPn9r4yq1ev/vjjj1euXPnKK6988sknvT+RLvEFmBT4Cu9JMBqyTZonVO0yiZuH/Sh7yM0dXRbhNsHEyu9dxTcG5YUbRRHjSAHg0qQsw5STk5OTk7Ns2bJt27Z1KVIDBGFPMqzpYzPGb7tmTtsHK0WPm471gtZ90RpqFUw8fXA17xXkm9eLUYyeAYBLTWwZpocffnjSpEkzZ8589tlnuxRRv16ASdE/39V5FBWjrNWZ+sgfWbMttjN7XrKyoWXpnTn8dz6N3rJBfGMW+kgB4FKydu1aZeOee+655557ui3qdlmlfrMAkwLf3Keh4TTXDppTGW17+ZtXTy5t3ukpe+nQn5L84ah0ywa0CwEALj1oEfZKli1jwfAb/UJACocs5uMDtxKGW0iW6za1Ptpcvy7ZfmfE/uerdWgXAgBcQhCEvcIyrFVrea/iI/2nqyePmGeadC3D8UTEsEziKFviKJu/NmT/vKV6w6EnKxzzbkken8gI3mj7oUDiKGtf1x0AAHqCIDwDRbnXCKa8Vf96esS6N9InzjNNnht7rMeUps/7fvrAohRPRfS768QJicyKAtmpQ9sQAOBih2/qM6NJy0m9elH2XStEr7vhqR+3vvaULEaPlxq4+SN1u+bzeXa6fD39PmAIRImIjnxQX/lRoxjBLUQAgIsOgvCMTcu4nE9OX5HYmvTLVw0jpyh9pJ2ZNfTbcdw3N/D72mjye9EjXjl1akK4NbJtRUXdF61S9FIdWAUA0C8hCM+GhtM8Pu0RVm+sy86M7Yw2VMuRcOzHDBPzj9ncPUPZSe9FNwX4IbcMGPrDTPc+77bl++s2tSAOAeASwjDMLbfc0nnPggULel6V8OTSi3YVQwThWdLz+ipPzda6b4lIJpmI/FvX1S+/M7jj886H/Sif/ecV/MJS8ekdknmAYeidWQV3ZLYd8EcDHVMItu7xxg5u2eWJtKtlKgcA6HM9LzrYRWlpaTjc8bd+JBIpLS0906tctKsYIgjPXrYt43sF1+9t3v/Kt68RkW3eooRFj7Z/sLL1jefl8PHJZ6elMJsKuTcOSnd+LoZFMmcYChZlaq0dHaq+o8eOlKllp+fb5w58++yBI+/Xt1X4ZSwBDAAXUs+LDnYxderU2DSk69evnzJlyple5aJdxRBBeK4KEnMXjvh+c7D1pW1/0WYXJD/8Mqs3Njz9k/Ch3bFjcizMF4W8P0qj3o2W1p0Qb5lXJ3VsMTRkwYCJjxcM/l46q2WPrK3/+jfl/tpQPN8LAMSNXwh8WfM1EZVWfRERI0e9tfta9hPRx4dLiWhX094Gf9P5OqbbCnRedJBhmL/97W8pKSl06iUG58+f/8477yjbq1atuuGGG2JFnfs8u/R/drnKOXxgF1D8gtDtdhcWFjqdzqKiIrfb3ZvSjRs3jh492mKxjB49+rPPPotbVc8IQ4yB19t1tvl51wlS9O/lq+3z77bd8BPfxtWdDzNr6M1Z3HMTuUUbxe+tE5tOFXAMWbIMmVcnjb5v0Kh7BxqSOtZkad7hkXsxt3ekXQi1Rs71LfWCLMoRbzTWkStFJF9FR59JNCju/t8j2393cOd/H95XUlXxVs3h9+qDjR2lTd+0xxrBzdvbK/5Rc+T9+prS5rb9vmhIPPlCAP2VKIvesI+IvBGfTBQWI0EhRETtYQ8R+YVARIycr2O6rcDq1auJKLbo4ObNm2NNN2WJwbfffvvRRx+NHT9v3ryPP/5YEARJkj766KO5c3u1ukWXq1ycmLjNDvfzn//c5/M9//zzDz74oMViWbFixWlLMzIyXnjhheuvv37VqlUPPfRQVVVV51Pmzp27ePHiU/1j1NXVpaamXri3061QNLy3uXxsyshdTftGuApi+4Xaw6zBxDmSiMgn0LJt4hsHpacmcLcP6e1qhjUbm9NnJCrbR9Y28AZWEuRoQIwGxWhAdI21u8baiKj9gF8IiIkjrUTUvL297YDfkW+2DTTxxtOvIRzxRL1VATEkGRK1xlQ9d9JDkFUfN7bs8kQDYjQgSlGZN3KOfLOyIocUkQ6V1mTMSNLpdLIot1X4NUZOFCTl4GhATBhh1SdqiSjQENaYOI2ZJyJ/bchbFYwGxIhH8NeEfDVBa45p2F1ZRCRLsnufzzmsY3mXaFDkDVgG+QSBQEAQBJvNdvpD4XwQRbGlpSUpKen0h3bn9ttvnz179u23335+a3WOGKYjAhiGaWxsdLlcyrbH41EWV+p8gCzLRUVF9957r9FoXL58+dq1a7uUnvyap9rowY4dOxYuXLhjxw4iampqcjgccZjpO34P1K9atWrNmjU6nW7x4sXFxcVdgrDbUqvV2t7e7vP5vF6v2Ww++TUFQYjdvI3heZ7j+uZLU8/rxqaMDAjBzbXbRrgKImJEy2mJKLT3a2/pu5zZbrny++Zxs1+4nLt1MHv3F+L/7JOeHM9dmX76NIylIBEZk3X+2hCrZfUJWt7I8UbOmNzRcLQNNsUOM2cawm1C3abWijdqxIjEGzlzhkGJGSKq2dCcPiuRiKSoXP73al9VUBIkc6aRN3B1zeGcohTrQBMRVX3U6CiwWLIMRJQ4yuYcZtUYOd7IdYlJVss6x3dcmuEYR343/1ixyse2TWl6U5o+9qMsyYLvWKNQpkBjWAlCwRvd9lSFNcfoGmtzDrdyWvTnA5x/SgoqTrXEoNI7ajabO/eLdub1ervdf5GLX4vQbDY3NTUZDIZgMJicnOzxeE5bunXr1gkTJigHbNmyZfz48Z1PmTx58pYtW07udL7rrruWLl3a0NCQnJx8Id/QaYTFyAu7//iLUUs8gteqsZAsyzUV8r//Sq4M9uqFpDPKRJ82ap8qN5k56dH8wETnBRwvKouyFJJlkXhrR4r4yiLmfK2y7d8f0SZxGns3fz2IYYnVMEwvGq5tbW1Go1Gr1Z7HasdIETlwIOLdFwnXRPVZvNbJOS43MJozuN8gRWQpLPMWlojEgBSsFohIDMpRtyS0iYJbTP2elTezRNS2NWgdoWd1DBEJbomIOD3D6pmOz5BIOUwKy0KrqEvlle3AkRN6n6SQbBykVY707AwbMjQaB0tE3l3hwGGB1RGrZzgDx+oZjZ01ZGqISJbktq9DjssNyiuEaqMaO8sZT5n6wWBQEASrVXVz+EmCHKqKSifOcG/I0CifVbgpypvY2LbQKhKRHKFoUJJCMsszjskdn3D9u96U+R1f95V/cnMaltUzjJbkCEkh2XaZ3jJUR0TevWGSyDJcJ4pi0942rlbH6lnWwPAGltESEWPO6/idDxwWjDkaZbtlY0D0S7yN1To53s5pHdwDP79/7ty5F2GLMBKJaDSabpt0dFJjrrW1deTIkUajcdOmTUlJSbFSvV7/4YcfKqs4PfLIIyc3BE++yqns2LFjwYIFn3zySduWoOdIIO0GWy9bhA6HQ6/Xn/647sSvRSjLshJasiyLYte7Qd2WPvLIIw8//PB99933u9/97uc///mnn37a+RS73b5mzZoe+qnj3zXaxYvpT7IM+/Lnf/3FpPuaAy2G4SMSRv+x/b0/B1/7TfKD/82arAtT6ZYRtLJCWvKNdryL+fVYdqQzXjeTU0+xfbZ0Op3JZNLpdKc/9OxkEV1Bgi/att8fag6nDnAp8bzjxYMjlwzs2P79QX9dWGmzKv9zFliSJzqIyF8TajvsS52ZSESBhnBVZSMR8UbOnKo1jNDqE7TGFJ3yIvpcnz3TpGwf+LxGedYlGhBZnuGNnGucPaMwhYjCbULrUW9qqlPZPlxZ37myvIF1Jbj0Ti0RWeWQzqbhTRwRWaRQKDkcDUpRfzQaEIU2kYlwqRNTOj7DXE9CqpWIpIi0659Hgs3hqP/4fyl5t2W4xtiI6OiGZp1dk5JnEwQhuE+q29TCGznlXRPDsBpm4PUd/6IH/q928I1pyvau/zmstWosmQZLpsE0wMDy3f+mRbzRQF3XO9j2XDOddHioNSJ4o9GAKBzrADcPMCiN+Ei7EGyO2AaZlA+neUd7NChFA1E5KnN6jjdyqVOcSl9347a2xBFWVssS0Z5XjrjLfJ0vkTjSmr8oU7nW4ffqCxZlEpHgjVZ8XMNqTvi7zZmXYEzVE1FTbZvJqI9tt1R6iYjTswYjp0nkdA6NK9WunJJwmys2eNu5JLGjGz8k8nqON3I6p4bXc0SU7JJJllkNK4oi4+c4i67jLbtFMSQRQ6kzOz7tym8bUlOSlQ9KP8or+MRgUzh4NOLfHgk1R6S2i3GciLLoYJe7Tj1wOp1Dhw4Nh8NduoifeOKJ73znO+np6Q899NC5X4XjuNTU1NSi+HWNxq9FmJub+69//Ss3N7eiomLevHn79+8/banZbD5w4EBKSkpLS0t2dnaXRvdFeI+wBx8f3jDQnu3U2w+3V42UrJq0nM6lIZFe3ic9u1OclMT+cgw7OuFi/G+mZ62trRc2CHtHjBy/MSkERJ2Nt2QZ+7ZKF4hyj9CkNYdbBSEgRgNR5eFUlmeTJnR81/uqgubMjgZQoCHsqwp6qwLe6mCgPsxyTE5RivJXQuPWNkmQUiY5iahlt6duU2vnCzEsDftRtrK9/YWDo+8fpHzX7/1LpeCL8kY+FsPWHKN9iJmIQs0Rf30oYbiViIJNkbovOqKa4RgxJAkBccDsRCUIm3e024eYL4kbwP3yHuFFqJ/fIywsLCwpKVm+fHlJSUlxcbGys7S0dObMmacqHTly5F/+8pf/+q//eu2110aNGhW3ql4IV+XMIqIj7dWyLHOpWe+Wr52fN4+IwhXb5UhIlz/+/uH8PQXsXyuk6z4WC+y0fDw3wXXpxWGf47Qsp2V1dk1fVyROeAPHp58yRWIpSETGZJ0xWadkpCzKYkRiNR39romjbcyxLtiE4VYlwLo1+oFBse2hP8w61WH6RK0yNoqIDC5trIV6ssRRGOwDfS9+Qbhs2bIFCxZkZGSMHTv2b3/7m7Jz1qxZSpO029KSkpIf/vCHTz31lJKIcavqhZNty8i2ZQSEYJIpkYhW7nrzO0xmaP2q1jdeMAyfxOiNNwa8N6bk/D3lhhs+FSclMU8llzu+fZ81WlizzTBsombA4L5+B9AfMBzTuRF2qm5SAJWIXxDa7fa1a9d22RnrmO22ND8//4svvohH5eLLqDFMHTCRiIYl5ltSx3zANlxmXmA9UkWSyKYP5JMylmSzd+Wxf9gjzf/afpd+3Hyb3xRsbnn1SeJ50/grLFfe1NfvAACg/8B6hH1pQuoYIpqeMSnJ5Ppc9gWjoXmDrlSKDDw9Moq9Mz9t+fbkkfulu4eyC6beMbC9PFJ1/N6q6HFHDu7iXWlcYhqr7593wgAALjQEYd9Lt6QS0bQBlwtS9HB71adHNt416jalKEFHz0/klgxjn9kpXfNviSj3mgFDrqmUrkhjLRqS/O2B7Z9Fm2ujTbWMVs+70nhXun3+3d2GoixGI4f3ajNyGV3HfSP3my9E3U2apAGWK76rPOwPAKBCCMKLhYbTaDhNpjX9xrxCvxB4Zftr90/4SWvQbdfbs8zMS5O5lybTvjb5w2r5f/ZKizaKV6Wzi4ZkXb1oKccQEYme1mhTTbS5ltUeG7cpSS0rn9SkD2RN1vD+b8MVO3lXunPBQ3xyhlJumnStHAmF9m9veG6xYeQUy5U38c7z8+SlFPBGqvbLoUBsjzY7n7O7ejgFAC5ODMPcfPPNb7zxRmzPggUL3njjjR6eODj5ecHePEHYhxCEFxeO4Rx6uyTL38m7joj+55tX77/sJ1Weo7IsD03MK7AzBXbmgRFsW4T+cUj67bfinZ/Ltw1mb8tlhzucnNWpGzSi04vJxglXRCrLheoDhlHTHN+/jzWdMBpQm11ARLohYyyzvuPbuKrx+XuTHvgDn5Byjm9BjoTrn/iBJn0Qazo+OQVnS4gFYXD758RxrO74gEbW6tSkdAxBFD2t0frKLq+pyx1Nx2ZOiFSVawcMJvYSGHAPcJGbM2dOl+ezuy1SFmBSHo460wWYlBe5aBdgUiAIL0Ysw2RaBxDR0ikPEBFLrE6jc4fa/t+2Py+b8lB564GB9uwf5/M/zmfL2uSVFdK8f4tEdGU6c2U6c0Uam6jMrsByhhGTDSMmn/5yJqt17u2WK74X6zWVxajka+dsCac9VxajwR2b/Js+YAt/RCYTETFaXdryt3s4RfS0hsq/lYXjc+Pp88bGglCoO+Jd1/X0xEEjGK7jd7XtnZejTUd1uaP1+eP0BePR0AQ4az0sw9S5SFmA6brrrqNjCzC9/XZP/42f/CIX7QJMCgThJSAvoeOpiQcvu4eIPjlcevfYOzZWfWnSGMemjLpzcNVTE3LK2uRPauTXD8g/3iTkWpmiLLYoixl1JvPUMJ2aaNHGo03/72ea9EG6QcNZo4U1WVijRZc7muE7ns8Tag7JYjS092v/fz7kkzLMM+cHLc5eXsg8vdg8vfhUpfq8sfq8sT2cnnT/i5KvLVT2TWjf1va1Kxlem/CDX2ozhyil7jeeF/0e3pXOJ6bxiamswcQaLbwrXSmNHN4b3P3VCS/HsrZ5izq2Zdm36X3WaGGNFtZk5ZPSWb2JAC4MKSK17vN12WkbZFSmpA/UhTQWPrYdaDxhDj9OyzgKOnpc2ip89tyO2X1b93il6Ak9kKZUXWwRmy5iCyRt3769pKTkscceEwRh2bJlS5Ys6VxEx6YYVYJQWYApFoSnmputy+ujaxTOG5PGSESLx91JRPkJuVpO6414N1R+PtiRs7n6H3cVXH/PUI0ka75skN+vkm78VIrKVJTJFGWxM1IY/kymqtakZqf+5vXQvi1CzaFoU41U6ZUCXt3A4XQsCNtWvyKH/JrMIYl3L1cac8HW1h5f8nxizXbj+NnG8bNJlqPuRs7iiBVZrrxJqK+KNtUItYeCOzfJoaBx3EzzjGMTBPMa1njihODM8c9FlsRoQ7UU8EoBr+hrjzbVcHaX4/tLdAOHKweIntZYQ5bVGVijBT20cNbEiNT8bVuXnQaXtmNtlrqQUdbHtlt2njA5s8bCHw/C8uNB2LLTI4ZPmMCSYe2nCsLVq1czDKNE3YMPPvjZZ5/pdLqf/vSnS5Ys6VxERPPmzXvwwQcFQeA47qOPPnrmmWd68wa7vMjFDEF4qUo2dXQJ3jV6IRGNcA3V8/p/lq1JNou6U/IAACAASURBVLompo1lot8+N3HSzlbhX9XsL7aIR7xycRZ7Yw47O43R9C4RGY3WMHKKYWT3i1C7fnpxdHQwTJcBPrwrPdb+O5k2I1ebkXvKF+N4+40/Pf6zJAkNVZz1eEu3fc2fIkfKOgrDASngNU2Y47j5AWWP2NYk+TyatGykI/SGxswrM6l2yzXW3nm7849dZF93/L5+7s2n/OXv2fTp0x999NGFCxd++OGHJ5daLJZx48aVlpYajcbhw4f3v8W/EIT9xNiUkUT0vfxiSZa8EV9YDBPRym8fXz5j6TUp+2v80TL/qMe/3rbAP6o4i1kwmJuZ2pslJdSNZTWp2Z13OG/resNfFo53WAk1h9o/eDXa2qBJzpDFqOT3EsukLntNKZX8nobnFrNGc0fXq9HCmqymiVfFYju0b6vobiSOix3AWeys+ZRffwDn0erVqz/++OOVK1e+8sorn3zyyckH9NcFmBQIwv6GZVibznpl9kwieuGK3xJRojEhycReZZSccsWcQeN+sfHFRzbf2BTkrkpr+dHw4eMTkYdnj9EcX3ZKP2yifthEORwU6o4wGq0SZrFS1mhJuvc5KeCVgl4p4JX8XilwwhdHtLlWqDtCYjRWqh04zPG9JUqpUHckVLaNsycyx/pyI+EwM2Rc7PTgzi9IOmFlIk36wFjKCjUHo62Nyr1e5X+x272gcoIgaDSanJycjz/+eNmyZVOmTOlSpGwXFRUtXbrUaDQ+/PDDnU/X6XQbNmyYOXPmyy+/3MPrX7j6nxcIwv5vgKVjIZ47Rt5MRH+9dgnLsOurK9ccFm9ZL9iEX7Pmx1O1+zKs6YNt9gwzpRmZDBMlG87stiIoGJ1BeS7lpAKGcyZxzlNOXGCeVtTT68qy2NYcqSyL7RBFUZs7JvZjcMcXsnjCkpYmrf74KKGaQ6GdXyi3P5Wg1aQPTHrgD0pptKW+/f2uc/narruDT+z4zfGue1sK+VmDmTVZWJNNO2DQ+R2sK/nao821ciTMJ6ZxDhedtMhon5CFSKhsa+zvEtHviba1CIV3xJaO8Xz8plB7qPMp2uwCy8z5ynb44C7Ph68p50oBb3DXPpo9O97v4XRiCyQ9/PDDkyZN4nn+2Wef7VKk/BifBZj6ykU9kqdnl9YyTBetQ55gY0j/8eFPee24g+7qWt9+N93Q6t9WGRybqGcyzJRjYXKU/7cwuTbKMnf/JXWRLMOkHsoyTGd9t0YWIrHmrBT0hcu/7XKAbsjoWIs2+O1nQnON7PdKQZ/odQtHDxgnXGkr/MEZXVFsaxbqKyW/Rwp4TZPndjwPI8u1v7yZJJFPTGM02mhLneT3OG550DhmhnKWf/O/I5XlRCSHAkqi8K4Bzts6GiVCzcH2tStZo4XRHl+R1TZvUeyR2fa1KyVf+/G/AAI+06RrrVfd3PG+dn4Z3PWlHA7E0o7R6FKWlnR8LH6P+63fxdrQpDf5RXKNmxobnBU+uEvynjDahbMnxv4MEr3uaEN17PRFd941+4orsAzTae3YseO2m2/asvoNImqPknPIiH61DBNcnAZaDQOtdHnSlUQUlWyh6GCTlnt158HbR0x86Zs3Mh1T64PcN3VfN4aK3tj7+sHQjT7Bn2vnhjmsBXbm8iTm8qTejr6Bi0rnTl3WYDaMntbDwYYx0w0n7pGjx1uf7R+8Gtz1H23mEG1WnjZ9IPFaVquPTWAk1Fd61q6MVO0nSeJTszmzjTVaSIySEoQMk7K0pPOkgLIQIfl4Hy/vTCFRJCJGZ1Ce5Ok8fImzu8xTCyW/t/NjqcQd/1rTpGbLocDx+7JGC2s5ftuVd6XpckexeiNrtHS0dzv3ZpusCT/8VexHURSDLS2dhyifOH9FV5zF0fngi6SZe0mQQn7Pp/8kIjFlIA3p6UM+XxCEcBzPcmatiYh+MPIWIrp16LVGjVGUxbkZEzKt3Lb6keNSDKsrNrcJpiAN3Vi56h+Hbqrz7hmbNGROOj/BzIwyENqDKtH5FqNt7u3GcbMileWRqvLA1nUkiprUbMctDyqlrNFqHD/bPv/uU81n22Vq3M4JTUS63FG63FOuRcqarPqhl/VQT+PYmT2UalKzu4yHgosBZ3G47llBRE1NTfG5IoIQTslp6Ph7Vnl+cVzKKCK6PncmEYWi4dkpl+c5+T9uL7OY894/9HVJc/2eYFG+9gU3t8TFbTbqsocn2Ifa6q7PGZRhljgGTxT0XyyrJIrp8qtPLuSsDsOonpqbAH0OQQhnQ8/r8pyDiegno79PRAsGT2ltbTWZpAO+G+16bku9xaAxfNPS/umRfc/szsqgR7NTnnQwXzp1ussHXPZV5Z/uG/+Tg61b85yDzFpTRBSUZigAQJ9AEML5NCwhk4jSB40koqszicakEdFBzzNfNcr728fX+aN/KpMbfDP/9I7gZAMFCTTEesAg73xg/E2///rZZVN/9nXtN06DPdM64JuGnZenjT/YdiTDkibJsiAJFq3ZLwSUtikAwHmEIIQLbpCVGWRliGJzm+UTUZVv2uYm+etGa2nTkN+9KWQZbzq4URxsMk1MNiUYhDpfAxGVVn7x3fyiCvehI+1V38krfGzjky/OefKvu/4x3JWf5xz8n9otV2bP9ES8Vq3l1BcHADgNBCH0jUwzk2lmvptDRCTKtMc94Osm+eumwe9skQ965UlJVx8ISVcOuMWiY8aljFJuT74450kiWjDsRpnkgBAw8kYiWvHli49P+/mOxj0cy41JHnG4vSrHlukOtVu0ZoYhURK1nLbHigCA2mHkO/Q9jqGRTubOPPaVqdz2+XzNLZqfDmUrffL314sprwvfXy8u3y69e0Ta3y5HJeJZTsPyNp11yoDLiGjFzF9qOE2SyZVqTvZF/B8c+DcRvbb7rdaQe1fj3tf3vENEj296loi21m0/3F4VFiOba7cR0QH34YgY8QuBlqCbiHwRf19+BADQd9AihIuOVUPFWWxxFhFRpU/+vF7e45b/WkF73VJNQM61MgV2ZpiDGWqnoQ5msJXRsJRp7ZhC5d5xdxHRf43/MRElGRNHJ48goh+MWkBEBo1ex2kjYqTe30hEG6o2fb/g+kNtldWemsLBVy/7/KkXrvhtyc7XCxLycp0DX/7m1V9OefClb0puG/7dRn9zY6B5cvqEL2u2TE6f4I349Lxew+K/HTgzhw8f3rJlS1/X4mJXUVER/4tiZhk4P+Izs0xIpH1t8r42eY9b3tdGu91ytU/ONDP5dibPRnk2ZoiNGWxlUs9tSI0kyxExrOf1h9urMq3pDf6mgBAc7Mh5deebd4y8+e+73x6VPNypt79T/sGS8Xet3PXmgqE3NgVbBFHIsmUIoqDh4jGz4jnOLANnShTFlpaWLhOM9d7GjRu7nYQMTjZkyJDXX3+diJqamhwOB2aWATiBnqMxCcyYhOOTdEQkqmiXy9vl/e20qUH+S7l0wCMHojTYygy2MdlmSjMySQZKNTIpBko3MfZe3DFkGUbP64kox5ZJRGnmjmVulMlabx3+XSKSZGnRyJuIaIRrKM/xjYFmSZLSLKkPrl/2hytXvLb7H3OyZzDElLcemJk55avarZenjfcLAYYYo8ZwygtD/zVjxgw0By9aCEK4tGlZGuZghjlOmL/KI9CBdvmAR672U01A/raFagNSQ5CqfTLHdsybmmOmTDMzwESpRibDRClGhjuTObBYhlVGqyoDeUYndSze+4crVxDR7KxpTr3DJ/idejsR7W3ef3na+NKqLxx6+6ikYb/e9Myzs379+62v3FRwvTvUvqe57Dt5hU9++cJjkx/4+HBpkjFhaGLeR4fWF+Ves7upbLAjJyAE2sOeHHvW7qay4a58X8TPY8lDgPMHQQj9kFVDYxOZsd2tMNUSpsNe+bBXPuylCo+8vpZqA9JRPzWHZC1HvhPWbyCGyK4jIuIZGmRlRjqZEU5mhIMZ4WR4lsROqx4ZedJ1yiZlxQ89r0s0OOnYlHXzBl2plC6f/hgRLRz+PavOYtFalGNuHfZdIhqbPELDaSRZtumsRLSraW+mNb0l5K721OTYs9ZVfjbclf/vwxuybRkpWtfvvvnjc3Mef2zjk/dN+PEB95F9Lft/MPKWn2349bOzfv3BgY8zrOmD7NlrKj5cMOzGtQc/mZk5pT3saQ22DXflb6vfMS5lVK2v3qwxGTXGtnB7osHZGnTb9baIGBGkqEVrbg60JBoTvBGfhtXoecydB/0Z7hHC+XGprz4hyhSMkvnEu3uSTO0RIiJBovJ2ebdb3tkq72qVd7tlWSau05hrv0Aalpw6xqkjp44sWsbIk1VDVg0ZeUrUMy49JRuZRB0l6pkUI537BMynukfYFm6362zNwVYDr+cY7oD78HBX/ufV/5mQOrbO39AadI9LGfXHb1f+ZMyiDw+ty7JmpJhcK3e99cBldz/91R9+MmZRReuhKk/N/Lx5j2188skZj/2zbM0Qx8BUc/L/fvvXZVN/9ucdf7956Pyj3tr2sOey1LHvlH/wnbzrtjfsSjEnW7TmitaDo5NHbG/cPTyxoDXkDkXDmdb0spaK/ITcYDSkYTWXdEP2HO8RwlnAPUKAuOKYrilIRCxDjmPJnmRgpqX0lF8+gVrDcmuYWsPkFeRAlLwCeQTyCXJ5u7ypgRqDUlOImkOyO0zJBkZZ+tGpIxNP2mMBYeCYdFPHkpCpRiZR38MFu2fX2YhIaWUS0XBXPhFNy5hERDm2TOWu50/GLCKiawdeoRzzwGV3E9Ejly8hovGpo8enjiaiJ2c8RkTfyy9WjvnF5PuJaFL6eANvsGjNPMvTsUlog9GwJEsRMVLlqRmdPGJHw+6ChCGN/ub2sCfTmv6vg5/mJ+S+uffdy1LHOvS29yo+unvsHav2ry0cfE1zsIUhSjYlVbZXZ9kyQtGwhuMxLS3EH4IQ4Pwwa8isYTI75s/pKTIjEtUH5Go/1QZkd5h8AgnHelmDovyfBqoLStU+qg3IgSilm5g0I2WYmDQjpZuYJAOlG5kkA9kZJp7TzSmPiwxLzKdOo4euGTibiCalj1d+LMq9hohuH3ETHQtgOpaySuewIEVvGnoDEZm1Jp7ljnpqJVlyGV2v733n0Un3vbL9tXmDr5RkqbRy012jF77w9csPXHb35tptGlYzOnnEqzvf+OGoBf8+tH5MykgiKm+pmJYx6bPq/0zPmFTrq2cZNsno2t6wa2zKyLKWigxrejgarvU1DHflf3ho3bUDrzjcXsUx3ABL2rb67RNSxxxpr042uRii9rA32eRS+oEFUSCGwYMxKoR/coB407LKxDrUc14SUTBKR/1yXZCqfXJtgCp98tdNVBuQGoNU6+faBSPR8buaRp4GmJjUY6mZqGdsWnLoyKrp2Eg29GrQ7IWjYXmH3k5EV2bPJCKl6UlEj066j4iWjL+LiERZTDa5iOiagVcQUYY1nWVYIhqVNIyIkk0uPa+LRCNGjZGIqtqPUgZVe2p0nNZlTPimYacShA69TZSlBn/jcFd+KBoiInewTcdrJVna3VQ2IXXMlzVfX5E1zRvxba3fcVPBDS9seXn5jKUfHlpn1pqmDJj42y+ef2L6L94tXzs943JBih5ur5qcPuHzo18NNeQecB82agyJBufnRzdfkTVtW/2O/IRcQRLcofYcW6bStPULAZZh9bxOlmWl8nCRwz1COD8u9XuEl5yT7xEGolTtl+sCVO2Xa/3UHJLbBWoLU1tE9gjUGqaGgBwUKVFPLj3j0lOSgXHpKVHPJOrJoukY7GPRMDxDDh0lGShRxxjU96eyTLIn7LXprHuaywbZc9rC7fX+xtFJw1/b+Y9rUmZVibVmrWmQPfujw+sLB1/9wYF/T8+Y3BRsOdB66OqBs5/44oWlUx5YU/FhiilpaGLe45uee3b2r1f858Ufjrq1OdBa1lIxP2/e77b88f4JP/m8+iuXMSHblrGu8vN5g678vPqrsSkjA0KgOdhakDBEaelWeY4aeYNNZ93Xsn9k0rDYEGK/EMiwpgejIQN/5l3nlxTcIwSAM2PkKc/G5Nmoh4ZmWKTmkNwcpoYgNQXl5hA1h+UdLeSPUlgkIvIKUlSmlhAptzM5hhL1jI4ji4aISMuSSUMmnrFpSfmfXdsxPshxbKCQTcuYLuXvFYYYZciu0g+cwielmJKIaMGwG1taWmKt2MLBVxPRdYOvJiKrzjLInk1ES6c8QETFudcqxzw7+9dEdN+En2g5jUljTDIl0rH+5ExrukFjYBj22H3WoCzLvohfmfCvsr2aMiYdaa9OMiYaNIadjXtHJg3b3bwvw5rWGnIfdB/JsKb/ovS3L8558p3y93NsWQMdWf/Yu/rHY25/fc//XT9k7uG2qlpf/VU5M5Vnct6r+CjHnplpHfBO+fs/GLngzb3vFuVe0xxoaQ62jksZ9cmR0iuzZx5qq7TprGataX/rwRGuggr3oWxbZkSMhKLhBIND6Tr2RLxaVqvheE/Y69Dbg9GQjtOxzAm/bGExwrMcQ2xYDF9COX0p/8ICwBnScZRuYtI71n88/dhVr0DNITkidTxYEpHIL5AvKrdHSPlfbUDe7abWMLWGpdYQuSNye4TCYkdG2nVk4snIk1XDWDRk0VKijnEZKNlAiTomUU8uA5PQ3zsRlDwwaYxK5hUkDCGiLFuGUjozcwoRXZUzi4jMWlOOPYuIbhv+PSKanjFJOUaZw+GmghuIyKazDnYMpGNz0F+ZPVPLaTmWU/J1hKuAZ/kMa5rTYI+9zuQBlxl4vYblZ2ROIaL8hFwNyzMMqzwV0xbyENGR9qpM6wCe5fY0l41wFWyo3LRg2I3lLQca/I3XDprzuy1/fHLGYx8eXJefkJtuTnlt9z8fuOzuFf958aHLfvptw656f+P3C67/0YcPvHLtC2/tXTUyaWiaOblk5xu/mHTfQ+t/9aupP9vbXN4YaC4cfPXL37x699g7NtduG2BJs+ms2xt3Tx0w8eu6b8Ykj/RF/GExnHJs5FRToNmkid8ypegahfMDXaNxdjFPsRaVqF2g9ojsDpM/SoEoeQXZE+mI1YZgR3OzKUSNQdkXJeWpkkQ92bQdbU2rpmM7do/TqiWbhmxa5uTBvfGBxydOpedpBWWSQ9FwVIpatOZv6neOTRn5Tf3OdEuqjtduq995Rda01/f833fzi3Y3lXkjvhmZk5VW7Ntl741MGuoUbfHpGkUQwvmBIIyzizkIz4ggUVNIbg5RS5jaI3J7hDwdzU3ZI5Bb2Skc2xOh0LHmJhHxbEefbZKBUo89kZJmZPRcx3MvHENWLem589BhiyCMP9wjBABV0LBKeik/nb63NtbcVLa9AhFRQ5DqAvJRP21tlmv9UkiktgjFDgiKcnuEIhJZNWTXMmYNaViyaohjya5l9BwZeXLoyMAxFg2lGmmAqeNpTj2eaVQHBCEAXEp4lhJ0lKA7OTJPE6KCRB6B2iOyV6CoRO0RkmRyR+SQSMEoucMUiMpH/bSlmY76pRo/1QZkA0c2LcMxZNMSQ7KZNWu1US1LJp4hIiNPsQmDXAYmUacMIGKsWrqkhwupEP65AEAVNN0naE/x2Rah9ogsytQWJlGSKpvCdrshIpE/KhORT6CmENUF5F2t1BySmkPHe3QjUkefbWdmntGwZNUSx3Q0QI082bSktFCJSJTIIxAR6Tgy8mTgOlqrOo6OtWIZjiE9R7HHWhgih46cOsbWp0+IXuoQhAAA3bMfuxlJFhJFyiIhKUkJztO3PrtM4E5EXkGOysdaomEKROVAVJmEr2NqIY6lXA0RkdJIDYqyO0JH/RSR6FgrVpKIglEKiR2vKcnKkF05ECWnjiyaniqm5Ct1miNeeWyUqCOeFcpDMkTH58516hiLpqMz2aFlWIb6We4iCAEAzjMNe3yW2hjHmTRGz1RUotYw+aI9DX4MixSIEhEFjj82KitnKPHc+TCJqDkk72/veDbGJxzvTI61XLt1ckzatAxLZNdR7P9tWkbDklnTkc16rqN93KXtaxVYh+NcPpXeQhACAFzyeJaSDJR0xuF6PsNYIcrkiZywpz0iS0TuMMlEbWESZfIIstJo7tT2lWsCFBY72sceQRJlGmrUjh1w3ivYDQQhAACcNxzTtTXc0RS2dN7XqwBuagoRGc5bzU4NE8ICAICqIQgBAEDVEIQAAKBqCEIAAFA1BCEAAKgaghAAAFQNQQgAAKqGIAQAAFVDEAIAgKohCAEAQNUQhAAAoGoIQgAAUDUEIQAAqBqCEAAAVA1BCAAAqoYgBAAAVUMQAgCAqiEIAQBA1RCEAACgaghCAABQtfgFodvtLiwsdDqdRUVFbre7N6XRaPSee+5xuVxTpkypqamJW1UBAEA94heETz/9dFZWVl1dXWZm5jPPPNOb0hdffNHj8VRWVk6ePPlXv/pV3KoKAADqwciyHJ8r5eXlrVmzJj8/v6ysrLi4uLy8/LSlY8eOffXVV0eNGuX1evfv3z9u3LjOp8yZM2f48OEjR47scqGCgoIxY8bU19enpKRc6DcFMW6322g06nS6vq6IWgQCAUEQbDZbX1dELURRbG1tdblcfV0RFWlubrbb7TzP9+ZgjUbDcdzZXahXFzgvampqsrKyiEhp+fWmtLKy8s0335w1a9bAgQNfffXVLqcIgvDNN9+c/FKSJOXn54dCoWAweEHeCXQnGAwyDCNJUl9XRC1CoZAgCFqttq8rohaiKAaDQXyrxFMwGNTpdL0MQo7jLoEglGWZYRhlQxTF3pR6PB5Zlvfs2fPSSy/dddddX331VedTTCbT4sWL586d2+3lQqGQw+E4/28DTkGWZZPJhBZh3Oh0OrQI40kURUmS8K0ST9Fo1OFw9DIIz0X87hGmpaVVV1cTUU1NTXp6em9KXS7Xfffdl5qaunjx4t27d8etqgAAoB7xC8LCwsKSkhJZlktKSoqLi5WdpaWlPZReffXVK1euDIfDr7zyyvjx4+NWVQAAUI/4BeGyZct27tyZkZGxZ8+epUuXKjtnzZrVQ+mKFSvWr1+fnJy8bt26P//5z3GrKgAAqEf87hHa7fa1a9d22Rkbs9ptaUpKyieffBKPygEAgFphZhkAAFA1BCEAAKgaghAAAFQNQQgAAKqGIAQAAFVDEAIAgKohCAEAQNUQhAAAoGoIQgAAUDUEIQAAqBqCEAAAVK2bIJw4ceKbb74Z/6oAAADEXzdBmJSUtH79+vhXBQAAIP66WX1i2bJl99xzz8MPP1xYWOhyuWL78/Pz41gxAACAeOgmCC+77DIi2rp167PPPtt5f2zJJAAAgH6jmyBE4AEAgHpg1CgAAKha90H4/vvvT5s2LTEx0el0Tps27eS14wEAAPqHboLw7bffnj9//rRp01avXq0kYnFx8bvvvhv/ygEAAFxo3dwjXL58+cMPP/zkk08qP06ZMkWSpCeffHL+/PnxrRsAAMAF102LcP/+/VOnTu28Z8aMGeXl5fGqEgAAQPx0E4RZWVl79uzpvGf37t1ZWVnxqhIAAED8dNM1+qMf/eiXv/xlcnLyvHnziGjt2rWPP/74b3/727jXDQAA4ILrJgiXLFkSjUbvv//+hQsXElFCQsKyZcuWLFkS97oBAABccN0EIcuyDz300IMPPtjU1ERELpeLYZi4VwwAACAeTrn6BMMwSUlJSUlJSEEAAOjHsPoEAACoGlafAAAAVcPqEwAAoGpYfQIAAFTtlINl4l8VAACA+MNgGQAAUDUMlgEAAFXDYBkAAFA1DJYBAABV636FegAAAJVAEAIAgKp1BCHDMKtXr47tLSsr6zzF6OrVqzHjKAAA9EtoEQIAgKohCAEAQNUQhAAAoGoIQgAAUDUEIQAAqNrxB+qPHj1aVlambB86dIiIYj8ePXo0/jUDAACIg+NBeO+993YpKygoiG9lAAAA4q0jCDGtGgAAqBPuEQIAgKohCAEAQNUQhAAAoGoIQgAAUDUEIQAAqBqCEAAAVA1BCAAAqoYgBAAAVUMQAgCAqiEIAQBA1RCEAACgaghCAABQNQQhAACoGoIQAABULU5B6Ha7CwsLnU5nUVGR2+3ufenu3btNJlN8KgkAACoUpyB8+umns7Ky6urqMjMzn3nmmV6Wtre3L1q0KBAIxKeSAACgQnEKwlWrVi1evFin0y1evPjdd9/tTaksy4sWLfr5z38enxoCAIA6MfFZm95sNjc1NRkMhmAwmJyc7PF4Tlv61FNPNTc3P/fccwzTfSVnzJjh9XpdLleX/fPmzbv11lsbGhqSk5Mv3DuCLtxut9Fo1Ol0fV0RtQgGg4IgWK3Wvq6IWoii6Ha7ExMT+7oiKtLc3Gy323me783BZrNZq9We3YV6dYFzJ8sywzDKhiiKpy3dsGHDRx999Mknn/Twmlqtdt68eWPHju2yf+DAgSaTyWg04uZiPIXDYZPJhCCMG4ZhBEHAL3nciKKo/JL3dUVUJBgMmkymXgZhLw/r/tyzPvOMpKWlVVdX5+bm1tTUpKenn7Z03bp1GzdujMU7wzCff/751KlTO5+l0WgmTZo0d+7cbq+o1WrxpRxPumP6uiJqIYoiy7L4wONGFEV8q8SZ8oGfS8L1UpzuERYWFpaUlMiyXFJSUlxcrOwsLS09VekTTzwhH0NEsix3SUEAAIDzIk5BuGzZsp07d2ZkZOzZs2fp0qXKzlmzZvVQCgAAEAdx6hq12+1r167tsjM2BKbb0pMPAwAAOO8wswwAAKgaghAAAFQNQQgAAKqGIAQAAFVDEAIAgKohCAEAQNUQhAAAoGoIQgAAUDUEIQAAqBqCEAAAVA1BCAAAqoYgBAAAVUMQAgCAqiEIAQBA1RCEAACgaghCAABQNQQhAACoGoIQAABUDUEIAACqhiAEAABVQxACAICqIQgBAEDVEIQAAKBqCEIAAFA1BCEAAKgaghAAAFQNQQgAAKqGIAQAAFVDEAIAgKohCAEAQNUQhAAAz6mC8wAADLRJREFUoGoIQgAAUDUEIQAAqBqCEAAAVA1BCAAAqoYgBAAAVUMQAgCAqiEIAQBA1RCEAACgaghCAABQNQQhAACoGoIQAABUDUEIAACqhiAEAABVQxACAICqIQgBAEDVEIQAAKBqCEIAAFA1BCEAAKgaghAAAFQNQQgAAKqGIAQAAFVDEAIAgKohCAEAQNUQhAAAoGoIQgAAUDUEIQAAqBqCEAAAVA1BCAAAqoYgBAAAVUMQAgCAqsUvCN1ud2FhodPpLCoqcrvdvSlds2bN8OHD7Xb79OnT9+/fH7eqAgCAesQvCJ9++umsrKy6urrMzMxnnnnmtKVVVVW33nrrn/70p7q6uqKiojvuuCNuVQUAAPXg43alVatWrVmzRqfTLV68uLi4eMWKFT2XHjp06Kabbpo0aRIR3X777U899VSXF5RlORgMer3eLvs1Go1Wq5UkSZKkC/qOoDPpmL6uiFrgA48zfODxd0afOcuefbuOkWX5rE8+I2azuampyWAwBIPB5ORkj8fTy1JRFBcvXsyy7EsvvdT5lClTpmzdupXjuC4Xuuuuux599NGGhobk5OQL93agi7a2NqPRqNVq+7oiahEMBgVBsFqtfV0RtRBF0e12JyYm9nVFVKSlpcVms/F8rxpsdrtdp9Od3YXi1yKUZZlhGGVDFMVeln766acPP/zwVVdd9cQTT3Q5xWazrVq1au7cud1eTpIkBGE8aTQak8l01r+IcKYCgYAgCDabra8rohaiKPI8n5SU1NcVURGWZR0ORy+D8FzELwjT0tKqq6tzc3NramrS09NPWyrL8qOPPvrFF1+89dZbQ4YMiVs9AQBAVeI3WKawsLCkpESW5ZKSkuLiYmVnaWnpqUq//PLLVatWvffee2lpaT6fz+fzxa2qAACgHvELwmXLlu3cuTMjI2PPnj1Lly5Vds6aNetUpaWlpeXl5Q6Hw3JM3KoKAADqEb+uUbvdvnbt2i47Y0N1Ti597LHHHnvssThVDgAA1AozywAAgKohCAEAQNUQhAAAoGoIQgAAUDUEIQAAqBqCEAAAVA1BCAAAqoYgBAAAVUMQAgCAqiEIAQBA1RCEAACgaghCAABQNQQhAACoGoIQAABUDUEIAACqhiAEAABVQxACAICqIQgBAEDVEIQAAKBqCEIAAFA1BCEAAKgaghAAAFQNQQgAAKqGIAQAAFVDEAIAgKohCAEAQNUQhAAAoGoIQgAAUDUEIQAAqBqCEAAAVA1BCAAAqoYgBAAAVUMQAgCAqiEIAQBA1RCEAACgaghCAABQNQQhAACoGoIQAABUDUEIAACqhiAEAABVQxACAICqIQgBAEDVEIQAAKBqCEIAAFA1BCEAAKgaghAAAFQNQQgAAKqGIAQAAFVDEAIAgKohCAEAQNUQhAAAoGoIQgAAUDUEIQAAqBqCEAAAVA1BCAAAqoYgBAAAVUMQAgCAqiEIAQBA1fptEDY0NPR1FdSltbU1HA73dS1UxO/3ezyevq6Fioii2NTU1Ne1UJfm5uZoNBqHC/XbIBwzZowsy31dCxW555571q9f39e1UJHXX3/9N7/5TV/XQkWqq6uvueaavq6Futxwww379++Pw4X6bRACAAD0RvyC0O12FxYWOp3OoqIit9vdm9KeTwEAADh38QvCp59+Oisrq66uLjMz85lnnulNac+nAAAAnDsmbjfS8vLy1qxZk5+fX1ZWVlxcXF5eftrSnk+ZMWOGRqNJT0/vcqG0tLTs7Oz/3969hUTxvnEAf1dLzd08bWKogZGJp0ja8kLxENWKmq12k9QqGSUmBUGoEVhEklEgHgilYK0kCxTyUELgWkSHCyFJyd0L6ULL1ZZNw3XX0tn3fzH/37DoKvL7OTvbzPdzNfM+M84zL8/64M7BsrKy5uZmmUzG93kBq6GhISMjIykpSehEpEKv109OThYVFQmdiFSYzea6urra2lqhE5GQ69evnzt3LjIycj0bq9XqnTt3/rsDua8RKhQKs9m8ZcsWu90eFha27IY3l9G1d+nu7r58+fLKVhcREREVFWW1WhUKBd8nBRy73b558+ZNmzYJnYhULC4uMgzj5+cndCJSQSm12WxyuVzoRCTEZrP5+vp6e3uvZ+OLFy+qVKp/dyD3/dqilLJNi1LKMMx6omvvotFoNBoN73kDAICoue8aYXh4+MTEBCHk+/fvLr/PXBldexcAAID/zn2NMC8vT6fTUUp1Oh33l9ybN2/WiLocBAAA2EDuu0Y4Ozt76tSpz58/79u3r62tLTAwkBAik/0/AZdRl4MAAAAbyH2NEAAAwAOJ880yeBLfDbq7uxMTE4OCgtLT07nXIKWmpsr+UVZWJmyG4uNyelHt/JGtQFDk/GAYJjY21nnEnW9ZEWcjxJP4fBsfH9dqtQ8ePDCZTMeOHSspKSGEUEqNRuO3b9/m5ubm5ubq6+uFTlNUVpteVDt/5pxUV1dXVVWhyPnQ0NCQkpKy7Elxt75lhYpRTEyMwWCglBoMhpiYGKHTEaHXr1+fPXuWXf7x44dSqaSUmkwmhUKhUqkUCoVGo5menhY0R7FZbXpR7W4wPDx86NChxcVFFDkfBgYGent7l/Ujl4XNU7WLsxHK5XKbzUYptdlsW7duFTodMVtaWiorKysvL6eUDg0NHTx4cGhoyGKxFBcXFxYWCp2dqKw2vah2vv3+/Ts5OfnLly8URc6nZY3QZWHzVO3ivFlGLpdbLBY/Pz+bzRYaGjo/Py90RuLU399fWVmpVqtramqWvVPGZDIlJCT8/PlTqNzEzXl6Ue18q62tnZycbGpqWjaOIt9Y3EMELJeFzVO1i/OFWOyT+Lt378aT+DyhlF69evX9+/fPnj2LiYlhBz99+rSwsJCSkkII8fHx8fX1FTRHsVltelHtvGIYpqWlRa/Xs6socrdxWdg8Vbs4b5bBk/h8+/Dhw/Pnz3t6esLDw61Wq9VqJYTMz88XFBQYDIY/f/7cvHkzPz9f6DRFZbXpRbXzamBgYMeOHdHR0ewqitxt3PqWlY36jtWjzMzM5OTkRERE5OXlzc7OCp2OCNXU1KwsJIfDce/evV27dm3btq24uPjXr19Cpykqq00vqp1XJ0+evHHjBreKIufPsn7ksrB5qnZxXiMEAABYJ3F+NQoAALBOaIQAACBpaIQAACBpaIQAACBpaIQAACBpaIQAACBpaIQAACBpaIQAACBpaIQAACBpaIQAACBpaIQAACBpaIQAApCtgr/DGY1Gnn44wN9OnP+PEMDzNTU1RUZGCp0FAKARAgjk8OHDsbGxQmcBAPhqFAAApA2NEMDjGI1GmUw2NjaWlZUVGBi4d+/e9vZ2LupwOOrr6xMSEhQKhUql6uzs5EKU0sbGxvj4+ICAgLS0tHfv3nEhk8mUm5sbFBQUFRX15MkTbnxkZCQ7OzskJCQwMFCtVuNSIkgQGiGAML5+/WpcwXmD3NzczMzMtra2jIwMrVb74sULdryurq66uvr06dMdHR1qtbqwsJALNTU1Xbt27fz5862traGhoZmZmcPDw2zozJkzx48f7+3tTU9PLykpsVqthBCGYbKyspRKZUtLy/379318fIqLi904BwCeYaP+1T0ArN/an0eDwUAIaW1t5ba/dOlSeno6pdThcCiVykePHnGhK1eupKWlsaHt27e3t7ez4wzDZGdnt7W1sYdraGhgx9kWaDAYKKUTExOEkNHRUTZkNpsfP37M86kDeBz8RQggDLYVLeO8QV5eHrdcUFAwOjpKCDGbzRaL5ejRo1woJyeHDVkslqmpKbVazY57eXn19fVptVp2NTU1lV2Qy+XcvuHh4SUlJcnJyRqN5s6dO3a7vaioiJezBfBgaIQAfwEvL6+lpaXVQgzDEELYDby9vV1u5tz/nPfV6XRjY2NHjhwZHByMj4+vrKzcuKwB/g5ohAAeqre3l1vu6upKTEwkhISGhiqVyr6+Pi708uVLNhQWFhYcHKzX69lxh8Oxf//+W7durXGImZmZ0tLSkJCQCxcudHR0dHR0NDc383IyAB4MzxECCKO/v3/lLZr5+fncckVFxfT0dHx8vF6vb2xs7O7uJoTIZLKqqqry8nI29Pbt27t373Z1dbGhioqK0tLSqamp6Ojop0+fjoyMPHz4cI0cAgICenp65ufnT5w4sbCwoNPpVCrVxp8qgIdz/2VJAFj788jeLDM4OJiamqpQKPbs2cPdAkMpZRimrq4uLi7O398/KSmps7PTOXT79u3o6Gh/f/8DBw68evWKO5zzJUnn1Y8fP6akpMjl8uDg4IKCgvHxcd5PHsDDyOjqn0kAEITRaIyLi8NnE8A9cI0QAAAk7X+QPjZINHne0AAAAABJRU5ErkJggg=="
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# error results also close to the linear model\n",
"plot([lin1[3,:], lin1[4,:], mlp1[3,:], mlp1[4,:]], ylim=(0.0,0.1),\n",
@@ -304,7 +389,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -321,18 +406,29 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "2.83e-02 100.00%┣████████████████┫ 60000/60000 [00:52/00:52, 1150.34i/s]\n",
+ "Float32[0.00636037; 0.084129; 0.000516667; 0.0243]\n"
+ ]
+ }
+ ],
"source": [
"# We add a nonlinear activation function to all but the last layer\n",
+ "# 2.83e-02 100.00%┣████████████████┫ 60000/60000 [00:52/00:52, 1150.34i/s]\n",
+ "# [0.00636037; 0.084129; 0.000516667; 0.0243]\n",
"model = Chain(Layer1(784,64), Layer1(64,10,identity))\n",
- "# 54s [0.00612065; 0.0864965; 0.00055; 0.0244]\n",
"mlp2 = trainresults(\"mlp113c.jld2\", model);"
]
},
@@ -349,13 +445,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 16,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd3hc1Zk/8PfcOr1Io94sufcGLtgYTLJ024EsabDeEBI29AAJSYB4NwkBbDb5LclmE4fEy4aEkEBoxotDNXUxxBUby91WsbqmaPrc8vvjSmMhj23ZludKM9/Pw8Nz55aZd0aWvnPOPfcepus6AQAA5CvO7AIAAADMhCAEAIC8hiAEAIC8hiAEAIC8hiAEAIC8hiAEAIC8hiAEAIC8lqUg9Pv9S5YsKSgoWLp0qd/vz7jPjh077HZ7duoBAAAwZCkIV65cWVNT09LSUl1dvWrVqmN3CAaDX/3qV6PRaHbqAQAAMLDs3Flm/PjxL7zwwoQJE+rr65ctW7Z79+7+W3Vdv/rqq6+99tprrrkGd7oBAIBsylIQOhyOjo4Oq9Uai8VKSkpCoVD/rQ8//HBnZ+e///u/M5a5nq6urptuuikejw9YL8vyk08+qaoqY4zjMrduN360vaKyvLLMN1TvBQwn/tjhLFEUhed5xpjZheSXVColiqLZVeSdU/rYeZ4/7T9Hwukddqp0XTd+dXVdV1W1/6Y333xz/fr1r7766gkOf+aZZ0Kh0A033DBgPc/zqqqGQiGe5493frFnbWjjlPayzy8+s3cAAwUCAYvFYrFYzC4kv3R3d7tcLvxRzrLOzk6fz4evfVnW3t5eWlo6yJ3P5KeTpSAsLy9vbGwcO3Zsc3NzRUVF/02vv/76W2+9JUmS8ZAx9s477yxcuHDAM9TU1FxzzTUZnzyZTPI8f7y/yHZNJEHG3+shJ8sygjD7jI8dQZhlxseOIMwy42PPwgtl6ee6ZMmSNWvW6Lq+Zs2aZcuWGSs3bNhARA888IDeh4h0XT82Bc9EkE/6la4hfEIAAMglWQrCFStWbN++vaqqaufOnffff7+xcvHibHRXulXZw3uz8EIAADASZalr1OPxrFu3bsDKY8fFnI2RO3FOiauJIX9aAADIDXnQ5c100jHEDgAAMstSi9BEH51bV1blMrsKAAAYpnK/Rfgh/0Ir6zC7CgAAGKZyv0VYUXiz14auUQAAyCz3W4Sjtr+d7Gg0uwoAABimcr9FWKwdkkMiUY3ZhQAAwHCU+y1CSWsQU6GT7wcAAHkp94Nwr+wPU4/ZVQAAwDCV+12ji9oWBewes6sAAIBhKvdbhD0JZ2M4YHYVAAAwTOV+EBbrFkriXqMAAJBZ7neNxizC7jx4mwAAcHpyPyFEu2ML51E0EnK/9QsAAKcs98PBLTucorsxMvTzWgAAQA7I/SDczw74HI37cSUhAABkkvtdo5ddWvJBve1Aj06EO44CgGnmzZuXSGBu1JMbP378U089lc1XzP0g/MuH/1NL0w72VJtdCADkta1bt7711luSJJldyLC2Z8+eBx98MMsvmvtBOJv5miyO19E1CgBmmz59usViMbuKYY3jTDhhl/vnCCOHphTELQd6MFgGAAAyyP0g3F3zFhV27g8hCAEAIIPc7xq9kq8WrF4i8ifIK5tdDQAADDO53yJco+7eEW+pdTL0jgIAwLFyPwgvDtw9oerLdS4EIQAAZJD7XaPBRMgeF+qcVlxTDwAAx8r9FiExIp3qnOwgWoQAAHCM3A9Cj8XlkVzoGgUAgIxyPwgPd+zb8dYf65yErlEAgNPGWIa7VGZcOeLkfhBW2UuqgvFRDnYkqqc0s6sBABhOPvvZz57J4d/97neHqhIT5X4QNoxrOpLYKXBUbmMNYfSOAgAc9frrr5/J4Q8//PBQVWKi3A/CmYtmFiW6tVi4zkkHesyuBgBg2Pjc5z5HRDNmzCAixtgTTzxRWlpqLD/11FPTp08vLCz8j//4jxM8Q7prdPCHDEO5f/kEEfGFJUrHkTrXaEzGBADDx7OHtN/vzVI31edr2T+NGdjyef755xljW7duNR5u3Lgx3UBsaGjYunXrm2++eeWVV37rW98azEucxiHDRO4H4bYPdxe6qko7muqcYw7gjqMAMGxM9bKvjsvSa41zn7wN8K//+q9FRUXG8k033cQYu+iii2Kx2CBf4jQOGSZyPwjnlc8WS8qkUmddkJ7uNLsaAIA+Y91s7CDyKWvSKUhETqfzVA8/jUOGidw/R/h0/Nn6gqhQWIZLCQEAjpVKpcwuwWS53yK8ccZyY6HOyTAZEwBAf5dffvno0aMbGhoGs7MgHI0MRVHOWlHZlvtB+NEH24srC2sqKwpk4hh1JagQkzEBABAR0bp164wFXT/aTsi43H/libdm3HM4y/2uUWULS7ao3X98RAsH6pwM42UAAKC/3A9Cj8VdYPEoHUdS7U11mJUQAAA+LfeD8FCwcW/3AaG4UulornPhmnoAAPiU3A/CUZ6qsd46oahc6TiCrlEAABgg94OwLdLe2HNELKpU0DUKAADHyP1Rox6Lq9DiFopEdI0CAJwGxtixA0Ezrhyhcr9FWPolj3uKTSiqkOomV9tZa1RPYjImAAAiOuE0TCeeoSk3JmAy5H4Qbmnd3tRzhEkW7zW3YTImAID+TjAN04lnaMqNCZgMuR+El43+7CTf+PTD0S5MVQ8AQPTpaZjWrFlTVlbm8/l+/vOfD9iUUW5MwGTI/XOEL/73m75x7vMWzDIejnGx+oB+SeUwutEtAOSnxJ4tsR0f9F/DJIv7yuuNZT2ZCL60ZsAh9rkXixWjjeXIxldSzfv7bxWKqxwLrzSWlfam8Ltr05ss42daJs8b8Gz9p2G6++673377bVmWb7nllttvv33ADE0nNnInYDLkfhAuvX6xsaC0Nyn+9sXlM/57j3bHlNxvCgPAMMesDsFX/qk1gnj0AccN2EpETLaml3mXV098agfeXXB0T0nufzhnc524mEWLFt17773Lly9/+eWXB/sG+ozcCZgMuR+EW9t3FFi81a6KVHtT5P11l1w/64a31Z4UOcWTHwsAcPZIVWOlqrHH28oE0bFo2QkOt0w8lyYedyvvKTrx4QM8//zzr7zyyuOPP/6b3/zm1VdfHfyBNJInYDLkUcNILKpQ2ptdIs0tZq8fwchRAACivmmYamtra2trV6xYsWnTpgGbcl7uB6H370XOI24i4n1laqBDV5Ul1dzawxg4CgDQOw0TEd1zzz3z58+/8MILH3nkkQGbiEjox7Raz5ocfEsDfHJgn1OSF044h/EC7/GpXa3Laip+slXVdJ7DiBkAyG/paZhuvvnmm2++OeOmHJ6AyZD7LcI6b8147xhjWSiqVDqaahysyMI+6hiRPzAAABhauR+EreG2hp5mY1ksq1F7gkS0pJqtbcBpQgAAyIMg9FrchdbeIcXupV+3z7uEiJZUc2sb0CIEAIA8CEJiRMdE3rxi1hbTD2EmCgCAvJf7Qdjh6/DL3QNWcowureTWNSIIAQDyXe4H4Wcunz9z5uT0QzXQqasK4TQhAAAQUT4E4R92PvNWw/vph52/vk9pbSCiSyq5/2vTe/LialEAgDPFGPvKV77Sf821117b/9bbGQ8xLj2UZXnOnDmDvHNp9uV+EP5j2dIFhXPTD4XiCqWzmYgcIs0rZq82o1EIAPnrxJMODrBhw4ZEImEsJ5PJDRs2nPQQRVEURWltbV26dOmNN954ekWebbkfhJ9s3bf/YGP6oVg1NrHvY2N5SQ33EsaOAkAeO/GkgwMsXLgwfRvSN954Y8GCBYM80Ov13nHHHTt27Djl+rIi94NQnEpyFZ9+aJt5YXTL26SpRLS0mq1r1DREIQCYob5rb2OoOakmNzS8R0TvN38USUXbIh3b23cS0auHNgzhPhn1n3SQMfbEE0+UlpbS8acYvPrqq//6178ay88999xVV101yHfa2dn5s5/9bOLE498j3FS5H4RTiyaNclelHwq+MqGwNL57CxFVO1iJlX2IW8wAgBmiqVhSS+lEPckwEfUkelRdTarJqBIjokA8NIT7ZPT8888TUfrU3caNG9MNRGOKwaeffvree+9N73/FFVe88sorqVRK07T169dffvnlJ32PjDHGWFFR0TPPPPPb3/72tD6ns46NiFvDrV69evPmzatXr864NRQK8Txvt9szbn36w7U+V+HiCeel14TffiHVetj7hduJ6IEt2qGw/tvz+YzHwgn4/X6r1WqxWMwuJL90dna63W5RxCxiWdXW1lZUVMRxZ9RysFgsgUBguP3KMNabAoyx9vb2oqIiYzkUChmTK/XfQdf1pUuX3nbbbTab7cEHH1y3bt2Arcd78sHbtm3b8uXLt23bRkQtLS1lZWVD8S5PIvdvuj3z0CxHta3/Gvv8yxjfm3y3TebGPZ062MPVOnEHbgDIa0YKGo43xaDRO+pwOAbfLzr85X7X6JFwa0Oouf8aJkrE9QahW6KbJnIPbcPYUQDIU6c06eDSpUtfeumlF198cenSpWevpCzL/SD0yG5f371GM7pzCv/CYe0gbrcGAPmn/6SDg1FQUDBp0qSysrLi4uIBm0bunIUjrNzTIPCiomb4vpNqPcx7fJzFnm4U/mYhzhQCQH7JOOlgxuX0wiuvvHKCrf2NiDEolA8twp5kuKnnyLHrQ3/7Y2zzW8bynVP45w+hUQgAkI9yPwgLbd5JheOPXW+btTi6+U1jGWcKAQDyVu4HIT9XfTz+h2PXWyadm2o5rHS3GQ/vmopGIQBAPsr9IBxVVfm9i24/dj3jBeu0BbEtbxsP0SgEAMhPuR+ERPTC3pczrrfNXhzdvCH98FtT+OfQKAQAyDO5H4Sdm0PWVoeWafCSPHoq4wUt0nv/Ia9Md07hv/muiruPAgCk5fAETIbcD0JXne2CGXOJMoUbY8V3PcrZXekV35vOJTX66cfoIAWAvHCCaZj6b8rVCZgMuR+Eskf82Y7/yngFxbE4Rk9cyP/0Y/WDdrQKASD3nWAapv6bcnUCJkPuByERfX/+t6pdlYPcudLO/msBf90GNYTJ6wHgbIq1Jzq3hfr/172zJ701sDeSXvbXhwfsGW2JG5tSYaX/8oDdOreF1ORxu7j6T8O0Zs2asrIyn8/385//fMAmyt0JmAy5f2cZf31485Ht7om2c8pmHG+fyIevqv521yXXGg+vHsWtb9K/8Y7654twrxkAOFuibYnOLYH+a3iZL5jce7frwO4ez9jeSXW6d4ZSPUr/PQunumxlFiJKhpRoSzy9POAJicg92sZLmds8zz//PGPMOIF39913v/3227Is33LLLbfffnv/TUR0xRVX3H333alUiuf59evXr1q16qTvLn3ucMqUKb///e9Pur+Jcj8I453Jks7SWl/pCfaxTJjdtupm64zzxZJqY83P5/NzXlD+sE+7bkxeNJoBIPsKp7oKp7qOt3XUlUf/ao3+fPnxdrOXW+zllvTyhK9Wn14xixYtuvfee5cvX/7yyxmG2TudztmzZ2/YsMFms02ZMsXtdp/0CUfK/dUom12jfr9/yZIlBQUFS5cu9fv9A7auX79+0qRJHo9n0qRJ/W9kd+ZEl6CH9a7YwFfsj3cVuC7+cuAvv6C+n5yFpz9cyN/1gbo3OGJ+lgAAp+3555+/9dZbn3322csuuyzjDkbv6Cn1i44U2QvClStX1tTUtLS0VFdXD2hWa5p27bXX/uIXv+ju7v7Rj350/fXXD+HrSk4hEojv9x888W6O85fqair60WvpNdMK2MNz+EvWqw1hZCEA5CxjGqba2tra2toVK1Zs2rRpwCZDTk7AZMheED733HO33nqrLMvGl47+mxRFeeKJJy666KJIJCLLssfjGcLXlVyCEBMX1yw8yX6Meb9wR3DtGi0cTK/72jjuzincopfUw8hCAMhF6WmY7rnnnvnz51944YWPPPLIgE2GnJyAycCy1o3rcDg6OjqsVmssFispKQmFQgN2CIfDTqeTMfbuu++ed955/TetXr36F7/4xcyZMwccIsvyT3/6056eHp7nbTYbZaIr+o5VTX+79MVvz7rlpEUmXvsTXz1eGDer/8pf7RV/u19Yd2G81II4PCoQCFgsFovFYnYh+aWrq8vlcomiaHYh+aW9vd3n83HcGbUcSkpKjN+aoaoqJ23btu2666579913iai1tbW09ETDO/qz2Wyn/XuRvfTWdd0YRKTruqqqx+7gcDjC4fCjjz56xx13fPTRRwO2FhUVDUhHIhIEQRRFURQ5jjvuRyCSo9Ly3dl3cEKG2x8M3Pey5ceuvH0SEacv2WD52z+oJcjCPmIfswvJL/jYTZH+O2N2IXmBMWb8Cz+lf+pn8tPJXhCWl5c3NjaOHTu2ubm5oqKi/6ZDhw798pe/fOSRR+x2+w033PDggw8ee/i4ceNuuummjM+sKMoJWoRENP220U/veuGaicsYnTwLM/reLIqT+rkN3OuXCz58nyMiokQiYbVa8fU2y6LR6Jl884XTY7VabTYbgjA7GGPG33PjY8/CK2bv57pkyZI1a9bour5mzZply5YZK4379JSXl//ud7976623dF3/85//fGwX6BlixHy2wlPqBFaDXcG1v6N+h/zbLH5ZDZv3ovJxNxqFAAC5I3tBuGLFiu3bt1dVVe3cufP+++83Vi5evJiIJEl67rnn7rrrrsLCwqeeeuqxxx4b4tfWaV7JOXrG240eB+dwp44c9P/pZ/2z8Eez+Z+cw332ZeWZg7gZKQBAjshe16jH41m3bt2AlelW2gUXXNB/zO7Qat7Q+Urgjc985rzB32iN8ULhV+/r+PV93U+s9H7xDiZbjfVfrOMmeNjVr6p/79R/cg7Pn2ZXKwAADBd50eVdsdh3/VVfGHwKGphsLbr5Yc7hblv5zeTh+vT66QVs4zLhw3Z92StKIDnUtQIAQHblRRAS0br9r248csotTiZKnqtvci+5IfDML0k7OtLVZ6FXLhPGudnUvyprG9BNCgAwgo3Iix9Pw3lFcyw2+fSOtc5cZJ1xPn168kmBo5/N4z9fq9/wtvrEXv2/FvAYTQoAMBLlRRBGmuP7/thSeKO1zlNzmk/RLwXjn3wkj5vBBJGIFpSwLVcJP9yiTns29fC5/PKx+dLCBoDTsGnTJkmSzK5iWNu7d2/2XzQvglByCcketannyOkHYZqmRv7v5cBff+m64qu2mRcQY1aBHj6Xv6qG+9rb6p/2a6vm8FMLMIQGAAb69re//a1vfcvsKkaAKVOmZPkV8yIIRYdAcTq/Yt4QPBfHF96wIrHv4+ALj4U3POe67DrLhHOIsbnFbOvVwn/v0S5Zryws4VbN4UY5EYcAcNQDDzzwwAMPmF0FZJAfXXmMOButfOMXQ/V88pipxXc96rjwquC6x9sfvctYKXJ04wSu/hpxrJvOeV657+8qxpQCAAx/edEiJCKrS751wjeG8hkZs8260DbrQtXffnSlprpE/ifn8DdN5P51kzbmz6kbxnN3TuVLrUP5ygAAMITyo0VIJLrE9R+/cUo3lxkk3nt0RpLQq39uW/nNnlefKo23/m4Rv+kqIa7SpGdSyzeouzHBLwDAsJQvLcLqi4tDydL0DBhnieviL8tjp8c2b2j/f3cKhaUF08779ynzfjCz+hc71fPXKgtKuG9O5P6hgnE4ewgAMGzkS4vQWWOdVD1W1TJM/zSUGJPrJnv+8ZbyHz3puny5GuyK7/zQZ6EfzuYPfkm8opLu/bs67mll1XatI352CwEAgEHKlxYhEf1x5zNXjrmk2lVx8l3PHMdZxs+yjD86wa9doGv2rFlS/1GgfMr67ZMu/GjS5FEl141hl1ZxUr58GwEAGI7yJQhjHclr6Ooil8fEGtxLbrDNXmzfv+O6Ax9cc/B30QPc33Z8pqLwn75Qx107mptfcjY7bQEA4DjyJQgFC/dRbLOryb6wcq5pRXCcWDlGrBzjuOBzRKR2t98YjyxxCU/u1298V53Z+n//0vOyp6aupq5GLh8lllQxCTdtAwA46/IlCEWncMGceSI3jN4vX1DME1UTfW86+950rv7ItI2b5eYDB3z7Ns1SnysJNwmFZWXfX927t6YqnS18QYlxazcAABgqwygYzrZwMhKIB8cXjjG7kMwmlLsnlM8hmnOoR3/usL6uQT14pHvMy8rlVdzlVaxO93f+ZoUa6OAcHsFXyntLhIIS+/xLeU+R2YUDAIxseRSErW92R6aEqNDsOk5mlJPdOYXdOYXrSZW81qz9b6P+yMeaxHk+c8FjnynVL7R3uSKtir9d7W7rf1Tnr+5VQ928x8e7CnlPIefwSKMmSFXjzHoXAAAjRR4FYWo7mzl3utlVnAKnSFeN4q4aRUT0SUB/vVn/8yG6ubWg0l64uGzKwvHsfJkr7du5YPn31FC36u9Qe7rVQKfS1sjJ1nQQht9dG37jGc7l5ewe3uHi7C7e7TNOVRIR6boWCXE2J3EYwAoAeSePgpDs+m/e+/0dn/u62XWcjkkeNsnDbptMqs5v6tTfadX/sE+/6d1UoYUtLGELStncIufEUpdYNirj4fa5l1gmnKP1+NVISAsHtXBAi4XTW7VoT+tD39CiPZxs4+wuZrVzNof7iq9KNROMHeL1m7RwkLPamcXGWWzMYuMdZo6/BQAYQnkUhA6P7draa8yu4kzxjOYUsTlF7O6ppBO/06+/06pvOKI/vE1rj+lzi9i8YjanmDvHx0r63eCUiZLgKyNfWcbn5Oyu8p/8hYi0aFiL9WjRsB4L896S9A5Ke1Py8G4tFtbjUS0R1eMxqW4Su7z3K0W8flPwpf/mZCuTLEy2cBY7k2T3ldenR73GdnzAOI4JIrM6mCAySeYdHibjBqwAMCzkURBKLuHNT977/LRLOZYjHYCMaIqXTfGymyYSEXXG6YN2fWOH9oud6t87dJvAzili5/jYzEI2o5CV2U7+hJzNwdkcx55GdSxaduzOfr/fWJBrJ3m/eIeeiOvJuJ6Ma7GwnkwQx6f3jG1/TwsHdCWlxyK6ktKTCcfizzsWXmlsDb38ROTDVxnHM6udMY5Z7bzHV/CVu42tWiTU88YzjOOZxUqM4yw2Ysw6dT7X1yRNtTXoyUTvDkScxc5ECVeeAMDg5VEQik6hRqkiytnL1n0WurKaXVndm0AHe/S/d+p/79B/tkPb2qXzjGYUshmFbEYBm1LAxruZOETfB5hslarGnmCHdKpl5PzMF+zzLtE1VY9FdE3T4xEmfmoKb87m0DVVi4ZJ15TOI6RpUu3kdBCG33o+1bhX11Q9HiMiLR6xTl/o/cLtxtbY1nf8f3mUGMdZ7EREgshJctHtP02/RPcTK3VVISJOthIvEJFtxvnyuJnG1sTercmGPUTEWR29xTi91qnzjWU9GU8e2mV8BsxqN1aKxZXpxq4a7GKCSH1fvJgoDXhrADAc5FEQWn2SM+JIqkmLIJtdSzbUOlmtk11T2/uwKaJv7aKtXfqzh/QfbtEOh/VxLjalgE3xskkemuRltU7Gm/ElgUkyLxUfbytndzk/84UTHJ7OvIwsU+eXjptJuqbFI0Skp1J6KtH/WkzrjPNJVYlIS8TISESnN71VT8a1aJiIlK7W3npsznQQauFQ6LW/GDvqsUhvPV/6llgx2lgOPL86sXsL9c15oicT1pkXFFz7beNhdMtbgaf75sjsi+qS7/8mXV77o3eRkurdLkokSI6FS6i8dwBU5MNX45982P/NCr5y95XXG8tqqDu0/g9ExFnt6S9/9gVXCAW9Pd7RTW+ogc7+h4tloyyT5hjLSkdzYu+29CYmSkyUrdMWpIdTxba/R5rWu9ViYxwnFFemL+ZR2pvUQEf6aGa1M1EWS6t7P4dUMtV6mD5twBcIXfnUZJ6cbE1/9dETMTUc4KyO/l9qOaud+m7NpMXCA6aZYZKc/lT1ZIIJIsaFQX95FIS+Ge4X2Euu2EUVzsynynJbpZ1V2unK6t4/FnGVPvHrH/v1T/z6b+r1TwLUFtPHu9l4D5voYRPcNM7NxruZdYT/A2G8wGwOIuLsrow7WKeed4LDLZPnWSbPO95WvqC46OaHTnB44T/fe4Kt1mkLLONn9z7oi2rGH/3EvZ+/Wdf7QjSVJCUpFFdGlN6tUkUdN6AHuF/AM0GSKscQkRaLpJO4/5Nr8aiR8Wl6MnF0aySUbNp3dFMqoaeSlqnzWd9t+mPb3jVa0kSkxyK6rjvOX2LtC8L4ni2x7e+nj9ZjEd5Xlv401GBX4C8/H/BpeL90p1hRZywHnvt1qnFf/63W6QvcS/vOSe/eHHzht1qsp/8OZT/6Uzrq2h76ht73BcLgvvJr9vMuN5ZDf/tjz5vPpFOciMSyUSXf/bWxnGo51LbymwNqK77jp2TzGcvtj96dPLiz/1bbnH9I93lEP3zV/+dHmfypn0v/2lpWfPkEtQXXron83//23yqUVBff8bPe2toaOvqmAU/z/csD6UFtnavvTx6u/1RtMy/0XHNrb22bNwSe+c8Bh5+l2nRV1ROx4jt+KtVONtac9HPrfvKnA2qreORFyhaW/k0bzlavXr158+bVq1dn3BoKhXiet9vtWa4qx0QUqg/o9QF9V0DfE6T6oL43qBdb2VgXjXWzsS423sPGuKjWyYy7hPv9fqvVarHgbFxWdXZ2ut1uUcQNhrKqra2tqKiIG0Q7UlcVPfGpyWVOqbU6IIqI4zhL3+l9TdPi0QEvx1ms6fPxeiKmq5+aYIcJQvp8+bGFnb3aGM8PyWi4lpaWsrJstFtG+Bf+U/Ts7nVei3txzUKzCxmO7ALN9rHZvqPdTapOh8P63iDtDel7gvqrzdq+EDVG9FIrG+2iKlke6+HGerVaJ6tzscK86G8GOIl0J0RG6ZPNmY+VZCYd/xeJ47jjPzMRMdl6gpMbJy7sbNc2zOVREOqaXvvyhBl31JldyIjBM6pzsjonXdLvZIyiUUNE3x+ij1u1poS+5aB+sEc72KOrGo1yslFONspBxv+rHazawYrQYgSA4S2PgpBxrPTrjh2du6YWTTK7lhFM4HrT8RxbymoVLJbebplAkg716IfC+uEeOhjW32qhhrDWEKWeLAwAACAASURBVNajKo1ysGoHVdlZpZ1VO3rPVlY7mD2P/vUBwPCVX3+K4moi8enRaDBUPFLv5RkD1kcUOhzWD/dQU0RviuhvtVBzVGuKUENYFzmqtLMqO5XbWKWdyu2s3EYVNlZmYyVW4nL2OhcAGF7yKwhr3dW17mqzq8gvdsG4PxwdewWnP0HNUb0xTEeielOENnfqL0X15gi1RPWuBBVZWLmNymyszEZlNiqxsnIbFVtZhY2KrczCZ3oxAIBTl19BuO3JfR/oG//l2mvNLgSIiLwyeWU2xUvHZqSiUVtMPxKlVuP/Udrera9vovaY1hyhjrhu4anUxootvf8vsrISK5VaqcjCiixUamNODKsEgMHJryB0u51XWC42uwo4OYGjCjursNPx7gQUSFJrVG+PU0tUb4tRR1z/ewe1x6kjprXFqD2uKxr5LKzESsVW8snMZ+l9aCz4LFQoMx8G8gBAvgWh5BQ21m8uu+ginqFnbWTzSOSR2ASi4yVlTKGOuN4ao844dcb1zji1x/X9IepMUGdc64xTR1wPJanQQoUy6/2/TIUWKrKwArl3fYFMBTIrkEnGvxeA3JVnQegSKrgKlru3G4U0q2Bcv2E8yvwTVzTqSlBXQu+KU1dC74xTZ5zaY/quAHUnqCuhdcepO6F3J0jkehOxQKYCC/NKZGSkVyavTF6JFcjkkckrMS+upwQYafIrCEWnwEX5pJq0COgUAxI4KrFSSe9VyCf6etST6k1Ef6J3oTtB3Ql9f4+xRvMnKJAkf0IPJHuj0SP3Nls9EnnkowtukTwyc0vkFsmN4AQYBvIrCCWX0OOPdMa6K53lZtcCI4lTJKfIak7YvjToRP4EBZK6EY2BhB5Ikj9JwaS+J0iBJAWTFEhqwSQFkxRM6oEkuSVyS8wlGgvkkphLJK/cu9IlkUskp8jcEnkkSiU4WSXcYQ1gCOVXEMoecfKVdcVOzK4OZwuj3l5TcqZXnEQgScGkHjKiMUWhpB5KUSBBgaTeFKFQkkIp6klqoRT5ExRM2MMqaXrKKZJHYi6JHCI5RXIIzCv3LYu9seoQmV0gp0geiex9ywAwQH4FISdyb9nfLjjs/UzN+WbXAtDL6EHtt+JE2dnZGXC73Tov9qQomNSDSQqnqCdF4ZQeSBoL1BbV96YomKSelBZRKJyiQJLCKd1YdktkF5hdJJdILpFsAtkE5pXJLpBNIKfInCLZBLKL5JGYlSebQB6ZbAKz8uTGdIqQi/IrCIno6vFXYMgojHQSR4UyFcqDjc/+AkmKpPSIQj0pCiYpqlBU0QNJiigUVcif1A+HjZXkT2oxhaIKBZMUUfSYQqEU2QWy8OSWmF00FsgmMAtPHomsAll48kjMwpNNIJdIMk9OkdlFkjnyyGThycozt4TbBsHwkndB2Li1rVFqPH/yXLMLATDHMQ1QGnyIElFEoZhCoZQeSVFMpVCSIooeVymYpJhCcZX8ST2uUkyhYJISKoUVLZyihLGD2rsnx8gpkk1gRkCKHDlFsvLMwpNLIokjl9Sbmk6RBI68MokcOQRmZG3vSonxHLnQ2QtnLO+CkPGcKOFXB+A02QWyC+SznE5jNE3RqCdFEUVPauRPUEqjcIqiip7QKJiklEahZG+mNkQopVHA2EfRogolVOpJkaKRP6kbzyPzvR28MtebkW6JeEaevqQUOHKKJHFkF5iFJ6tANoFknuwCkziyiyRx5BB7s1bsW4b8kXdBWDOttFQtMLsKgLxmNPK8RteuM736NDtME2pvB29C683IQJI0nQJJXdUolOoN2oRG/qRuNFsjCiVVCiuasSn9/56Urui9T+LsTVAmMLIyt0XSHKImcr3xabRNjViVObL1JSjHes+keiVGREY/sJGsRpNX4gnzrgw3+fgDuf+tB3+86Hu4lBAgN8g8yXxfrH7KGZ2KNOLQiMaDLQGXxxtROUXrbcgabVMjVo2INdJU1SmUJJ0okNSIKJgkrS9Zjag2Yjudl26JcdTbKjWapxyRW2JE5JKIZ71Zm15pZKqxJ/XFrXG40fAlIpfIeIbEPQV59zklg6l7PHciBQHgxIxQMfLVHlWLfIzjTn7vhUHSdAomiYiCSV0jiqQo2ZeRGlEwqRNRKEmq3pu1GpE/qRNRQ4SUvj2JyJ/UqO9wI4mJKJTSVf3oPkar1OgZ/tTDTKlptIN5Ri6REfXGMBG5ROKPvz6d0yM0fUdgyWdGiWufrD3oruBnlEw1uxYAyFMcI+OmQpkasjQkWZtmtEoTGkUVPf0wqVEkZWzVNaKkShGFqK8drOq9uWvEMBGFUqRqpOoUSmn91xvPpuoUSulER9PXLpDEE/U1edMt4HQAGx3F1NecJTp6atbIZiKaKQtlZUP4SRxX3gWhpVASIsJ47xizCwEAyIZ+V3+e9dBNM87CUl/QGidrqV9SGkOIiXrPzlJfBqcPIaIOytKYpbwLQk5ggoM/3NQ8oW602bUAAOQmY3QxHbfJS4MJ4JaW5FDWdHz5OEaY87KWpnazqwAAgGEh71qEROQtdVXyxWZXAQAAw0I+tggtJeKzH7+kk252IQAAYL58bBFWLiq6ZdFys6sAAIBhIR9bhET0ysENDaEms6sAAADz5WkQ1rgq3bLL7CoAAMB8eRqEyb/yCeOqFgAAyG95GoSJJcEPg5vMrgIAAMyXj4NliOicshlmlwAAAMNCnrYIw8nIvW8+YHYVAABgvjwNwuR+9Sv7rzW7CgAAMF+eBqHFIwXbwoFE0OxCAADAZPkahD5JDzJVUc0uBAAATJanQciJnOwQrQmb2YUAAIDJ8jQIiShqj2zY9r7ZVQAAgMny9PIJIqqoKnHIo8yuAgAATJa/LULbbGF96jWzqwAAAJPlb4vQN8r7maIFZlcBAAAmy9Ai3LVr17nnnvvEE08Q0Xe+8x2Hw7F48eLGxsas13Z2SbwUTcWSatLsQgAAwEwZgvC2224rKSm57LLLGhoafv3rXz/zzDOSJN15553ZL+5s2/u3hkgyZnYVAABgpgxdoxs3bvztb3/r8/lWrVp12WWXXXrppcFg8JZbbsl+cWfbedPP9UgOs6sAAAAzZWgRCoLAGCOi995774ILLiAiq9WaTOZgF+KbwoZXDr9pdhUAAGCmDC3CuXPnrl27durUqW+88cZjjz2WSqWeeuqp6dOnZ7+4s+3z45eYXQIAAJgsQ4tw1apVr7322qRJk774xS8WFxffcsstb7zxxiOPPJL94s62pj2tr732ntlVAACAmTK0CKdNm9bY2NjW1lZeXk5EK1eu/NWvfsXzfNZrO+v0EHPsc9Nnza4DAADMk/mCekEQKioqjDOFXq83J1OQiArK3XxQ1Ek3uxAAADBN/l5HSEQWnxTtikdxBQUAQB7L6+sIeYmz2mQhKppdCAAAmCZDEG7cuPGf/umffD7fU089ZVxH+LWvfW3Dhg1Zry0bwvbIpvqPza4CAABMk2GwTP/rCC+++GLK3esIiahybLHP5Ta7CgAAME2GFqFxHeGuXbveeOONa665JoevIySi8ssL6t27za4CAABMk73rCP1+/5IlSwoKCpYuXer3+wdsfeGFF6ZMmeLxeBYtWrRnz54zfK3BU3U1nAxn7eUAAGC4yRCExnWETU1Njz32GBGtXLmyubl53rx5Z/hKK1eurKmpaWlpqa6uXrVqVf9NDQ0N11133WOPPdbS0rJ06dLrr7/+DF9r8Nyya3H5IlVVs/aKAAAwrGTvOsLnnnvu1ltvlWX51ltvffbZZ/tvOnDgwJe+9KX58+dbrdZ//ud/3r07q32Va3/75p5DB7P5igAAMHwwXc9wOfnatWtXrVq1a9cuTdMmT578ve9974orrjjDV3I4HB0dHVarNRaLlZSUhEKhY/dRVfXWW2/lOO6Xv/xl//WrV6/+zW9+s2jRogH7S5J0//339/T08Dxvs9nOsEI4JYFAwGKxWCwWswvJL11dXS6XSxRxzU9Wtbe3+3w+jsvccoCzpLW1tbS0dJA7W61WQTjNqeYzHPb0009/5Stf+c53vvPQQw8xxtatW7ds2bK//OUvV1999em9hkHXdaOJqet6xq7I11577Z577rn44osfeOCBY7fKslxQUDCwekFg/ZxeYQdDDZvat/3jGNyA+9Sc4ccOpwcfuynwsZsia595hiB88MEH77nnnp/85CfGwwULFmia9pOf/OQMg7C8vLyxsXHs2LHNzc0VFRX9N+m6fu+997733ntPPfXUuHHjMh4+derUH/zgBxk3aZrG87zdbj+9wkZLtT6tyOHAxISnJpVKWa1WtAizLB6POxwOtAizLBKJOBwOtAizzG63Z+cvc4af6549exYuXNh/zQUXXHDm5+2WLFmyZs0aXdfXrFmzbNkyY6Vxnf7777//3HPPvfjii+Xl5eFwOBzO6jBOm2Q9sLot3B3N5osCAMAwkSEIa2pqdu7c2X/Njh07ampqzvCVVqxYsX379qqqqp07d95///3GysWLFxPRhg0bdu/e7fV6nX3O8LVOVaww4j+Y4ZwlAADkvAxdozfeeOMPfvCDkpISY4DMunXrfvSjH/34xz8+w1fyeDzr1q0bsNIYqnPffffdd999Z/j8Z2L85Dq1BVdQAADkowxBePvttyuKcueddy5fvpyICgsLV6xYcfvtt2e9tuw5YD2Q2sJGXTnY4UkAAJAzMgQhx3Hf/va377777o6ODiIqKirK+bFSC84556N1u3VNZ1yOv1MAABjguFddMMaKi4uzWYqJeAsXtUTCLTFnBS5GBADIL4MaDfz888/ndqOQEStZ7rCVymYXAgAA2YbLYnqVl5b6EwGzqwAAgGw7zRvS5J6PO3ZZRYvPVmh2IQAAkFVoEfa6oPo8+0uFalIzuxAAAMgqBGGvSCr6eM3jvIQPBAAgv/R2jdbX159gp6ampqwUYya7aFt18QqzqwAAgGzrDcKJEyeaW8dw8H7TRyX2ojHeWrMLAQCA7OntCdQHwdxCs6CAvIH/TppdBQAAZBVOiR01rqJOCaqJQMrsQgAAIHsQhEe1RTr8nu6ew5iPCQAgjyAIjyp3lE6bNSGwJ2J2IQAAkD0Iwk9Zp67v2Omn3D8fCgAAvRCEn/LPF3xBFMVIa9zsQgAAIEsQhJ8STUXDi7pFB+48BwCQLxCEn8IxzjJakJwIQgCAfIEg/BS37JpePCWaipldCAAAZAmCcKDn9/zvrv87ENiLsaMAAHkBfYADfXnS1fHOpGDnzS4EAACyAS3CgRJq8r7tD/BWfDIAAHkBf+4HknnpJ4vuY8TMLgQAALIBXaMZNPY0B7ZFKoXysoWYsB4AIMehRZiBwAkOl619c9DsQgAA4KxDEGZQ6672jfPEWhOpsGJ2LQAAcHYhCDP7/Sd/ttVJgd1hswsBAICzC0GY2d1zbi6e7O2uRxACAOQ4BGFmu7v3PZt60V/fo2uYigIAIJdh1GhmY7y1Y88f3S4FdFVnHC6lAADIWWgRZsYz/r2mD5KTopyIjwgAIJfhr/xxeSxup2Q3uwoAADi7EITHNdk3Ma4kOrcF/bt6zK4FAADOFgThcUVT0T/ufMZRZXXVoV0IAJCzMFjmuByS/dtzbzG7CgAAOLvQIjyRlw+8/uLe9WZXAQAAZxGC8ET+YdSFS8demoqoWx7ZhwsKAQByEoLwRASOX7vvby1qKy9z/l24ywwAQA5CEJ7E+IIxPmtByVxv20a/2bUAAMDQQxCexBhv3e7ufb6Z7uCBSDKEySgAAHINgvAkGKMtbds1QfNNd7d/hEYhAECuQRCeBCP2tWnXkq6XzvW2fYggBADINQjCkzsYOPwff1/tqLZO+Wat2bUAAMAQQxCeXK2n5jtzbyUi2SuaXQsAAAwxBOGgvNP4wdp9fzOWlahqbjEAADCEcIu1QZlZMtUiWIjIv6sn2p6ouMBndkUAADA00CIcFIdk/+DI39si7d6JTqQgAEAuQRAOlsSLEi+ZXQUAAAwxBOFgzSmbFU3FjOXgvkhgb8TcegAAYEggCAdL0/UndvwlqSaJSE1oB55rIdyFGwBg5EMQDhbH2Pfm3yFwIhEVTHbyMte5LWh2UQAAcKYQhKcgmAh9f8OPjeWaS4sPv9yOuZkAAEY6BOEpcMuuhxf/wFj2jHdILqHtw4C5JQEAwBlCEJ6azmjXzz78lbFcd3XZ4f9tS4UxJQUAwAiGIDw1hdaC66d9xVi2l1mmfHOU6MBNCQAARjAE4anhGKdqykt9t1uzl1vMrQcAAM4QgvCUyYJc467uvybemUwGU2bVAwAAZwJBeMqckqPOU/NJ5+70muDBiBLTTCwJAABOG4LwdHRGu5p6jqQflpzrtZXKJtYDAACnDQM9TkeNu6raXRlIBD2yu/96TdE5gZlVFQAAnAa0CE/T5tbt6w+80X+Nvz788S8PagousQcAGEkQhKdpdun0L028StOPxp53vEP2ivv+0mxiVQAAcKoQhKdvU+u2xz9+8uhjRmO/WBFpjre+321eUQAAcGpwjvD0zSyZNrt0ev81vMxNvKF6+6MHrCWye7TdrMIAAGDw0CI8fRxjDaGm9B3XDJYCaeyXKnb/oUmJqWYVBgAAg4cgPCOVzvKbZ10/YKV3onPSDdWClTelJAAAOCUIwjPCMS6ppQY0ConIUWk1pR4AADhVCMIz5ZQcX5p0VcZNyZByaF1blusBAIBTgiA8U4xYsa1ozfY/KtrAk4KinS8512NKVQAAMEgIwiEgcPzs0hk8N/DDZDyzFvfdeg3X2QMADEsIwqExvXjy+gNvxJVExq2hg9Gdjx3SkrgxNwDAsIMgHDIyLx2v3eessUoucdsvDsQ7k1muCgAATgxBOGQuqjn/cLCpIdR07CbGsbFfqqi4wLft5wc6twazXxsAABwPgnAodcX9Anfcm/UUn+OZ/I2aQy+1HXyhRddwzhAAYFhAEA6l8yrOdUj2Ta3bjreDo8o64+7RolNgDLM1AQAMCwjCIRaIh2JK/AQ7CFa+8qIiYkRESlTFaFIAAHMhCIdYtavivIo57zZtHMzODa+0R9szDzQFAIDswOwTQ0/TteaeFlVXeXaS243Wfa7s6AOdCN2lAABZhxbh0BM4/osTP7e7a38wERrkIcH9kc2r9nZuDaKnFADygZrQlJiaDCnpNdG2o91jHVuCTW90xJtS2Skm2y1Cv9+/fPny9957b+HChf/zP//j9XoH7KCq6uTJk+vr67Nc2JDb699fbPcNcmf3aHvd58oOr29vfLWj+pLiwqkutA4BYPjSSYmpgo0nIl3TA7vDRrCpcU1NaJqi+2a4jLkH/Lt6OJFzj7ETUesH/kNrW9WEpms6L3GMZ4KNP+e+ccZTNr3WMe7aSmM51p7QkpruyNK7yXYQrly5sqam5plnnrn77rtXrVr10EMP9d/66KOPPvnkk7t3785yVWfDsrGXhZI9Gxreu7B6wWD294x3eMY7/Lt6Dq9vb3y1fdSSUs+4bP0rAIA8Y+SWElWN/7vH2I2Z4/z1YXuFRXIKRNTyblfntlAqrKSiqq7oRGQrkafdXkdEuq7v/kPj5BtHERFj7Mg7XbzMCzaelzle5gQbx7je7/LWYjn9tb54lts33cXLR7f2l05BIqq+pJiIWlpazuJH0A/T9ax2xo0fP/6FF16YMGFCfX39smXLBmTem2++GYlElixZMqCq1atX//73v7/88ssHPJsgCLfccktPTw/P8zab7axXf4q6Yt0HQg3nlsw4tcN0Cu2JEdNd44bdO+ovEAhYLBaLxWJ2Ifmlq6vL5XKJomh2Ifmlvb3d5/Nxx9xP2HRKRBVsvJE0wfqoElbVuEY6KTGNNN1SKhXMcBBRokvp2tRTfrGXiGKtyd3/dYSTGG/hBSvHWzneypVf7JULRSIK7opayyXJLRh7qnFNsHK8necERkScyBifvd6q1tbW0tLSQe5ssVgE4TSbdtluETY3N9fU1BBRTU3NsWm/ePHi4x0Yi8Xa29sHrJQkSe9nyKs9QwUWb4HFu/bA384rm1NgOYVpKJzjLERkvKOW1wLuiTZbhXS2qjxdw/Zjz2342E1xVj92LakrMVWNaYKdF508ESW7FTWhWcskIoo2J7s+7NFSuhJTdUXXkrqa0MbfUs6JjIia1nZVXe0zlhOdqUS3wls4YsRbGeM5wckbNQsuzjffaSxbSsTpP6zJ+B6JyDXBml62lGT4vpXNf3tZ+6ee7SDUdd24llzXdVUdOG/RCZx77rmPPvro8Z6T53m73T40JQ61ccVjKgrLBe40J6y3XW7nRGb0JLR+4LcVS65a+3A4g6goitVqRYswyxKJhNPpRIswy6LRqNPpHEyLMBlSEt1JNakpcU1PaWpSI6LS+QXG1sbXOqo+W2Qsb3t0f7wrpcRUjmeCjResfMWFvoJznUQUDsYUUp1OBxGJxUmawPEyJ1h4TuJ4ieMtnMUrGX8EpnzdmX5p56VOyi3hcNjpzMabynYQlpeXNzY2jh07trm5uaKiIsuvborZpdMPBhs+OrL5CxM/dxqH8/LR3z0tqe1/tkWJqgVTXAUTHe4xdk4cdn01ALlB1/RkSJE9IhHpKnVsCqoxTYmqqaiqRFU1oVZ9psg5ykZETW922sss3gkOIureGWr7KGDEFSdwvMwZ3YwGW3peNqLx11VxEifa+GM7G41hJgZLgWSZM+w6hHJMtoNwyZIla9asefDBB9esWbNs2TJj5YYNGy688MIsV5JNRdbCCwY3ZObEyhcVli8qjLYlunf2NL3ZWf/7xgnLq7wTc+1rIMAQUhOaMTDEUigZJ7rCTTFrkWx8xezYFAjuj6TCaiqsKDFViamOKuukG2qISE1qDX9rH/vFCiLSNT24OyzaBcHGW4sk0cbzFt7i682n8oUF6dEfpfML0u2/YxVOc6WXLYWIt+Ei20G4YsWKa6+9tqqqatasWU888YSxcvHixbl9zsMh2R2S/ZGN/7l8yhdL7EVn+Gy2EtlWIlde5FPjWvpC0Ib17b4ZblupfMJDAXKEGtdSUUWJqLyFsxbJRBTrSEaaY74ZbiIKN8frH28wRvNzAuMtHG/hJ3+jxsie4P6I6BCMIOStvKPSKjoF0SEY/ZOCpfeXSrDwRgoSESeysV+pOF7XKDpmRrpsB6HH41m3bt2AlQNSMFdD8V9m/LNLdsaVuEUYmvNqvOXor1/peQWivfc05O4/NikRxVljc9XanDW2/p2rAMNWb7ZFjTH9mm9a79W0TW90Vi72Gcv1jzcED0aVqMoJTLDxol0omu2uuEAmIsHGS67eP2i2ImnKN0cJFp63ZhipX3HB0Qt8CyahQwVwi7UscsnOzmjXr7Y8/oMFdw/5k6f/BBBR3efKeg5FQ4eija92hJtilgKpfFFhydyB9y4AONsCeyNKVFHjmpbS1KSmJnXveIer1kZEwX0RJaoaXYWdW4O7/9DEiczoexSsvGDlCiY7jZ5Mq09KD7KrXVbGBJbxvJpo58W63hFznMSh4xEGD0GYVT5b4f0L7vLHA0TkPZULKk6JaOcLJjsLJjuJSFf1SGsi3aPT/UlPMpAqPa+AiLSUxniW8cpWgAGUqMqJzOgDjLYmoq3xVPTo5dicwEZ/vtzYc+vP9s+4a7Sx3PJuF+OIt/CcyPESx0us/3XWmqIZy4VTXeetnHS8C9T6n1eTvRguC0MPQZhtjNi7TRtHe0advSD81MvxzFFxtCfWM9auKb09zx1bgweebbEWybYS2VoiW4tl4+xjFqqCYULX9IQ/ZTSeNEXv2BIwuiWNhEv1KNUXF7nq7ETU/veArcziGWsnomhrvHN7SLDygo0XHYK1SO7fIZFOQSKaeH318V66/yHZvEYb4FgIQhMsGXMJET2/538vG/1Zmc9qBw4nclzfV+qSc72+ae5YWyLanoi2JTo2BZSoOvWWWmProbWto5b03tNBU3SjkwpGinBjzFoi8xJHRK0f+IP7wlpSVxO9Q/8dFdaJX6smIi2pN73ROeaaciIiTQ/uixjxZi2SBBsvOQRbae+3qPJFhekn981wG2NSAHIDgtAcOulu2SXxJvfz8DLnqLY6qq3HbvJM6BtEoNOH/1Yv2gV7ucVaJMkFkqVAdFRkOASGnBrX1KTGOBIdAhElg6nIwYR7BhFRtC2x58kmJapqSc1o5Stxdea3x9jLLEQUOhQVHYIRhFafxEtOTjJuAimINt64VzIR8RauNwWJOIkb9+XKTFUA5DgEoTkYscU1C4+EW5/65Lm75txkdjkZGJ1gRESM5v5oQqw9GWmJxzoSPYeiHZuTlYt9VEpE1LEpINgF41LicFMs2pqQPaLkFmSPiDHln6KTElfVuKbGVSWhaUlNiam+aW5jMGTzW50Vi44OjAwdjmkJTYmrxi2MS+Z4ay4vISJiTEv2Pp/sEUd/vly085zEGe11wcKnbzlUfv7RBpxx438AOB4EoZnKHCVfn3FdQk2m1JRDGr5/rRjHbKXygIsU/X4/EbnHOtK9pkpEDewJJwKpZDCV8KcYz6zF8ow7e88Y9b+5VPumAGPEiRwvc7zMcyKTvaJx8/vhQ0tqmqrriq4mNdJJU/T0J9DTEHP2NaNb3u1KRXtnn1FiqprQSud6jfEdXTtCSkQ1xut2bA7sf7aFt3C8zPEWnpc4wcoXTHYZn57sEY8OjPxcGRHxMnfsByK5BOf43hp4mXNmasoDwKlCEJqJEXNJzpf2veKxuBdWzjW7nNPRf8iDMZNU+qERDOmH/W8uFWmKJ3tSWkpXE5oaV7WUXrqgoOy8AiLq3tkT704aDZrA3nDT650DXnHi9dXGlZGHXmqt+ofivuW2WEei/whY5yircblYKqy0bwr0Lvco+59tIdKVWO94RSWmjv58uZEoja91uGpt7tF248mPvNPNCYzxzHgJe5nFOK9GRO0f+tMhlAgqjGeSU+CLOMHK8zJn7Rtw5BnrSM+0XDTbUzT7k4jJaAAAGENJREFUuMOjfNOPnnIz7ukFAFmDIDTflWMuJqLXD78zrWhikW2wc/kOf0a3Xvph/0HwtcuOO7WKd4IjPa7VUWGtvGjgB5JugPpmuPstuxLdqf63YpDdvXHCiZyrpndCK07mfDNcRJRubAlW3rgvCRGVLSzg+7pzR11ZOurK4xY5+h/L08ujrig53m64lQHAiIAgHC4kTvTI7pSmiFxe/1AYz/i+wfSCjT/B7MT9b0zsqLT2f9gfL3PGnZGJiJe4/m2vAQTL8OqbBYDswDfW4eL8qnkCL9z71gNxJW52LQAAeQRBOIwwYg9d8ANZkF879JbZtQAA5AsE4fAicHxcScSUOBFpumZ2OQAAuQ9BOOxYBcuSMZe0RToefP8/zK4FACD3IQiHqRJ70T3zbu1Jhjc0vGd2LQAAuQxBOHxJvNSTDNtFGxGlNMXscgAAchOCcFgrd5SeWzbz/eaPnq5/wexaAAByU15fsjZSnFdx7rzy2bu69jSGjlxce6HZ5QAA5BQE4cjAMa7IWlhg8YSSPYF4qNpVYXZFAAA5AkE4YvhshUT095atCTVZ6SzTdF3gcCcUAIAzhSAcYc4pm0FE7zV92NjT/KWJV5ldDgDAiIcgHJEWVM7RdG1X156tbTu+POlqs8sBABjBMGp0pOIYV+cZdUnt4kAi+PL+18wuBwBgpEIQjmAyLxVYvYqqVLkqNV3DpfcAAKcBQTji+WyFU4omhJI9cSVBRJ907jG7IgCAkQRBmCM8svvSuosSanJDw7tE1Bhq1kk/6VEAAIAgzCkyL90862tE9IedTyua2h3zIw4BAE4MQZibvj//WyInrNn+ZFe0O5KKYkYnAIDjQRDmsm/PvcVnK3xuz/9ub9+ZVJNJNWl2RQAAww6uI8x9103+RyJ6p/GDjmjX1eOviKZiNtFqdlEAAMMFWoT54vyqeVePv6Ih1PTrLY8TUUyJm10RAMCwgCDML9Wuyrvm3BRXEv/2zioiiiMOASDvIQjzkUWQH178AyK6/+2HUmoqlOjRdAwuBYA8hSDMU4wYEa1a/G8iL/5h59MNoaZQsieYCJldFwBAtiEI8xrHGBHdPOtro9xV29p2bGn7WNHUTa3bzK4LACB7EITQ6/yq+RdWL/DH/c09LUT01K7ncDE+AOQDBCF8SpHNt3TspURUbPMxYn/65FkjFwEAchWCEDK7qOZ8Ijq3bGapo/i1Q2+9efhdIsKYGgDIPQhCOJEx3lqe8edVzJlTPqsh1PTTD39JRC3hNrPrAgAYMghCODmbaLWLtmpX5R3n3KiTblySX+/fF0r2mF0aAMCZQhDCKZB4iRH74fnfJaIDoUOM2M7OemNCYPSaAsAIhSCE03R5zWedkqPI5htXMDqSin5/w4+JaE/3/pSaMrs0AIBTgCCEM1Js85U7Su2i7YEL7iWiVw+9RUSbW7fv7Kw3uzQAgEFBEMLQEDmBiG6Z9TWRF52yo9BacCTc+sjG/ySiA4HD6DgFgGELQQhDb6y3rtReXO4ovXnW14jomfoXGaN3Gj84GDis6bqqq2YXCABwFIIQziK7aCOie+bdxogVWr0ei/tA4OB/bvotEb1x+B3cuQYAhgMEIWTJJN94r8Uzxlt32+wbiagt0mHcuWZ31764kjgSbjW7QADIUwhCyDbjTt9fnnQ1EV1Su3iUp7qpp/n9po+I6LGtvyeiaCqGc4oAkDUIQjBTgdUr89IYb90/TlhCRDNLphHRk5/8tb5rT0e08+3G/yMiTddMrhIAchqCEIaRc8pmENHXp183yTde03WX5CCi2179HhF9eGRzY6hZ1dVwMmJylQCQWxCEMEyV2ItmlEwlokc/+xARCZwgC3JT6MjjH/+JiNZs/6Oma4FEMJqKmVwoAIxwCEIY7gSOJ6JZpdOKbb4ad9Wts79ORFN8EznGvdu4cWdnfU8y/PsdfyYio8locrkAMNIgCGFEmlM+i4iuHHPxuWUzRU6YX3EuEf3pk2c1XX+n8YP3mz8koo1HNplcJQCMBAhCGPEsgmWst46I7pl3m8gJk33jJxaOjynx/YFDRPSjdx/piHY2hJq3tH1MRMFEyNxqAWC4QRBCrimwer0Wt1WwfGXS54nou/Pv8NkKVV0VOVEn/cfv/ZSInqlfezBwOJTo2d6+k4hwaT9APkMQQo6TeYkRq3VXTymawIj9+0U/JKK55bPKHCXhVKQ92klEt77yXZ30Ta3b9vkPaLpurASAPPH/27v3sKjqdQ/g3zV3ZobrcBPkYiAi4BVFgUA9GR41RNq19ahZusvHPLp3x+dRK7Pn9GRqto+P6K687DAv2UX3VrSsTmBqmpaKXOSiESkgwwDDwNxnmFnr/LGKzTH06eLMCPN+/pr5/QbXu9bz4sua32VRISTeKMovUiaSRSjDp8ZOAlAwdSMDxkckU4gVHZaO96v/CeBvl/9ucVgb9E3f6eoB6KxdHg6aEOIaVAgJ+XFialLwsEHKsGC56i/jlgDIGTLFRyQz2s2WbgvLsa9fKABwsPofTYZmnbWTf84ULd4gZACgQkhI3xKC4gAkBSeMDE0WMIJNk18G8ODgCSHyYIPd2GbWAnjh9HoAn9efrGitsjntZ5u+AaC3G2iLOEL6ESqEhPwK0X6DpUJJtN/gydGZAAqmvgZgVFhKbEC0zWEz2AwA/uebtywOy7fq0i9unAJw7LvPAGhMbVaH1ZOhE0LugAohIb9XuCLUT+LrJ/WdHjcVwCtZaxRieaJq6LjwMRw4ASMAUHzjdIuprU5Xz28sfqDqMICbXY1qowZAh0Xn0TMgxKtRISTEJfwkvoEyfwbMI/E5AOYnPxbrHxXrHzM36VEA0X6RADTmNq1FZ3FY+Wc0Flza2Wpuv9HV+FXjBQCVbdWgpR2EuB4VQkLcRyQQ+kqUALKj0gGkDRqbEpLoI5K9/OAqAAtT5qh8An1E0lB5MIBTDecAFJYfvKi+orXodpXtA/B545dWh1Vjar3Z1QigjVZ6EPK7USEk5H4RKAsQMsIwRegwVTyAFanPAPjTqPnjB43xlSj4O0t/iZ9YKG63dKhNGgAFl3YB2Fv5wXe6+nZLx//+cArAN82XWY7T2wwGu9GDp0NIf0GFkJB+QCKURCjDAUwMSxUywuTgxIkR4wCsz34RQH7CzBi/wUJGECpXAahqvyZgmFJNRWlLhYN1/qV4LYD3q//ZbGzRmFr5qa38Rqx6u4FWgBBChZCQfs9P6isRSgJlAfyDqxaPnAdgcnTmpOgMkUD41yn/DWBi5DiVTxDDCBRiOYCrbbUAzjV+U95aZeo2v3RmA4ADVYc7LLpmYwu/L2tlWw0Ao91E813JwEaFkJABTiwUAxjiHy0VSkLlwWPCRgD406j5AKbHTU2PHCcX+6zNWAlg/KDRSomC5ViWYwF8efMsgM/qT1a3X2+3dLxwaj2Agku7umz6ax11/J1l8Y3TAJqNLXq7geVYU7fZY+dJyG9FhZAQb8dvLwdgWFC8RCgZ7BuRGj4KwJ/HPQPgscTcseEjg32CNkxeC+DxxFm+EmWgLGCQMgw/LfwobSlXGzRtZu2bl98BsPb0a6Zu8yV1Gb+SsrDiIIAyTaXG1GpxWOt09QA6bV00IZbcJ6gQEkJ+EQYMgAhluIARhMqD4wJiAfxx+GwAj8RPG6aKD1OErJ64AsDajJVysU9CUNyYsJEAhqsSAJi6LQAMduOllnIAmy9sd7DOkhtnPvn+CwCbLmwDcOL74mZjS4dFxy8g4Wf96Kyd/EavdLtJXIQKISHkHpOLfRgwflLfYJ8gAOmR4wBkDk4LU4SGyoPnDs8HsGHSS2KBKDsqnd/3/PHEWQDiAmL5IUyhQAigqv0aw+BqW+3VtmqW49ad2Qhg++Xd33feuNHVeODqIQD8qpLq9us12uscuK8azwOo09Wbuy1Wh41fXuJgnZ65EKSfoEJICPEYsVAsFUoA8PeXw1Tx/lK/IJ/AjMjxABaPnMeAyYqamBWVLmCYLQ+9CuCZUU8M8Y8OU4TkPDAFAP8trpARyIRSJ8s2GdQAyjRVeruhyXDrixunAaz4Yg2Az+pPftV4vpt18NsXfPp9sdaiazG1XlRfAXCm8TyAVnO71qJjOa7drAVgdVj54VIysFEhJIT0JzKRTMAIfEQyftsBvhAOU8UPCYgRCYT/kfQogMcSc8MVofGBD/APZ3572l8BPDh4wrhBYwQMkzNkCoBQRYhMJGXAcBwHoKGrCUBVW22jvsnmtO24shdAwaVdLabWMk3lR/VFANaefg1A8Y3TZZpKm9O+t/ID/m2XTa8xtVW3XwNQ1noVQIdFZ7AbWY7rtNHTu/oBKoSEEK+glCh8RDIhI+SfK5IaPkohlocpQtIixgJYkPI4gCkxD44OG+Ejkr2UuRLAmol/jlCGjwxNmR07A8B/jV8KYFRocox/tAAMP/9WKpSIBCKb06616ACca/oWwIXmy3W6H4zdxr9degfAS2c2akytl1vK9139EMDLX20CUHzjdGVbtanbvP/qRwCKvvtUbzc06m+VaSrx0x3qza7GdrPWwTqbDM0AdNZOJ+d0sE6b0+7+CziAUSEkhJC7ETCMRCAGECxXAQiRBwfK/MVC8cjQZABZUekKsTzaLzIraiKA/xy7GMCMuKljwkb4SXz5gro++4UwReio0JQ5w/MBPDtmEYCk4GFRfpFigWh0WAqAQcowiUAsFAidHAuA30Lvh64GrUVn6jYdvX4CwN/LD+hthlJN+eHaYwCWfLoSwMHqf3zbXKqzdm27tBvAO+Xv6W2Gax11/OoXfiT1ckv5za5Gq8PK79v3rbrU5rS3Wzp+6GoAUKO9DkBr0Zm6zSzH8nexFm9aPEqFkBBC3EEkEPIDovzKkwhleIDUXyKUjAhJApA2aKxMJItQhvNf9j6R8kcAk6Mz+XHT5alPA1g1YXmgLCBt0Nj5yY8B2DV9C4A/DMsdEz7ST6p8LDEXQHZ0uo/YRyULfCAgBkCM/2AAYoFILBQ7WKfdaQfQqL/lYB3tZi3/hfCn35cAONt0ob7zps7atbtsP4BN5wt01q6vGi/srfwQAL8/0Ue1RRWtVTpr544r7wLYXbbPaDfVar/j71/5ontRfaVBf8vUbeYbv2m+bHPa281avrRXt18H0GxsMdiN3ayj2dgCoMOiYznWwTo9Na1pIBRCvV5vMpk8HYXX0el0VqsX/c14n9Bqtd3d3Z6Owuu0tray7H06a0YqlIgFIiEj5DfhGxr4gFggCparYvyjAGRFpQMYGZocoQxXShT8+OgfhuXyTwqbFJ0BYGXaswDyhk4fETJc5RO4asJyAK9krQmU+WdFTXxyxBwAGyatBfDvD/zb0KA4pUQ5M+5hAJNjHpSJZCqfwFj/KPQUXaFYLBCxHGt12AA06ps5jm01axv0twB8Vl8CoExztcnQ3GXT80/r3FG219xt+VZ9+fC1YwCWfLYSwN7KD8/WX3DPNfxxoPg+t3PnztLS0p07d/bZu2zZstjY2NWrV7s5Ki83a9asefPmzZ0719OBeJcxY8a89dZb6enpng7Eu4SGhpaVlUVERHg6EC9itJqCAgLtVneMhg6EO0JCCCEDjFQo4Zxuuk9zXyHU6XS5ublBQUGzZs3S6W5/HvfdewkhhBAXcV8hfP3112NiYtRqdXR09ObNm39VLyGEEOIiIrcd6ciRI0VFRVKpdPny5Xl5eRs3bvzlvQDOnTv35JNP3tYoFAonTJhQXV3d0tJypxFE4iI3b94sLi7u6qL1wm6l1WqPHj1aUVHh6UC8i8ViOXDggL+/v6cD8SJOp5Nl2V/+H3tOTs6QIUN+27HcN1lGqVS2tbX5+PhYLJawsDC9Xv/Le41GY0ZGhsVy+xNEBQJBenq6zWZjGEYikbj8HEgvVqtVKBSKxWJPB+JdzGazVCoVCoWeDsS7mEwmuVzOMIynA/EuRqNRqVT+wg+vWLEiNTX1tx3IfXeEHMfxacRxnNN5+2KRu/cqlUr6E5gQQogruG+MMCIiorGxEcCtW7ciIyN/VS8hhBDiIu4rhLm5uYWFhRzHFRYW5uXl8Y2nTp26Sy8hhBDiau4bI+zs7Jw/f355efnYsWP379/PDzszzI8B9NlLCCGEuFr/2FmGEEIIcZF+v7MMrcR3m6KiopSUlICAgOzs7OvXr/ONmZmZzE+WLl3q2QgHpD6vMKW9qzE/A8p2l3E6nYmJib1b+sxw16V9vy+EtBLfPRoaGhYsWLB79261Wj1r1qxFixYB4Diutra2qanJYDAYDIatW7d6OsyB5k5XmNLe1Qy9rFu3bs2aNZTtLlJQUJCRkXHt2rXejX1muAvTnuvnEhISampqOI6rqalJSEjwdDgD1pdffvn000/zr1tbW1UqFcdxarVaqVSmpqYqlcq8vDyNRuPRGAegO11hSnu3qaioeOihh7q7uynbXeTkyZPHjx+/rRj1meGuS/t+XwgVCoXZbOY4zmw2+/r6ejqcgc/hcCxdunTZsmUcx125cmXKlClXrlzRarULFy6cO3eup6MbaO50hSnt3cNms6WlpVVVVXGU7S52WyHsM8Ndl/b9frKMQqHQarUymcxsNoeEhNCDCV2quLh49erVOTk569evF4n+324MarU6OTm5o6PDU7ENeL2vMKW9e2zcuLG5uXn79u23tVO233M9Kwh4fWa469LefTvLuAi/En/o0KG0Et+lOI578cUXz50798EHHyQkJPCNpaWlVqs1IyMDgEQikUqlHo1xALrTFaa0dwOn07ljx46SkhL+LWW7O/WZ4a5L+34/WYZW4rvH119/feTIkWPHjkVERBiNRqPRCMBkMuXn59fU1Njt9ldffXX27NmeDnOgudMVprR3g5MnT0ZFRcXHx/NvKdvdqc8Md2Ha38OvWT1Cp9PNmDEjMjIyNze3s7PT0+EMWOvXr/955rAs++abb8bFxQUHBy9cuLCrq8vTYQ40d7rClPZuMG/evFdeeaXnLWW7S91WjPrMcNelfb8fIySEEEJ+j37/1SghhBDye1AhJIQQ4tWoEBJCCPFqVAgJIYR4NSqEhBBCvBoVQkIIIV6NCiEhhBCvRoWQEEKIV6NCSAghxKtRISSEEOLVqBASQgjxalQICXEf5g5cd7ja2loX/eOEDBj9/nmEhPQv27dvHzx4sKejIIT8CxVCQtxq6tSpiYmJno6CEPIv9NUoIYQQr0aFkJD7RW1tLcMwdXV106ZN8/f3HzVq1MGDB3t6WZbdunVrcnKyUqlMTU09fPhwTxfHcdu2bUtKSvLz88vKyjp79mxPl1qtnjlzZkBAQGxs7HvvvdfTXllZOX369KCgIH9//5ycHBpKJN6MCiEhblVfX1/7M70/MHPmzMmTJ+/fv3/SpEkLFiz4+OOP+fYtW7asW7fuqaeeOnToUE5Ozty5c3u6tm/f/vLLLz/77LN79uwJCQmZPHlyRUUF37V48eJHH330+PHj2dnZixYtMhqNAJxO57Rp01Qq1Y4dO3bt2iWRSBYuXOjGa0DIfeYePu2eEHJ3d/81rKmpAbBnz56ezz/33HPZ2dkcx7Esq1Kp9u7d29P1/PPPZ2Vl8V3h4eEHDx7k251O5/Tp0/fv388frqCggG/nS2BNTQ3HcY2NjQCqq6v5rra2tn379rn41Am5f9EdISFuxZei2/T+QG5ubs/r/Pz86upqAG1tbVqt9pFHHunpmjFjBt+l1WpbWlpycnL4doFAcOLEiQULFvBvMzMz+RcKhaLnZyMiIhYtWpSWlpaXl7d582aLxfLEE0+45GwJ6Q+oEBJy/xIIBA6H405dTqcTAP8BoVDY58d617/eP1tYWFhXV/fwww9fvHgxKSlp9erV9y5qQvoZKoSE3F+OHz/e8/ro0aMpKSkAQkJCVCrViRMnero++eQTvissLCwwMLCkpIRvZ1l23LhxGzZsuMshdDrdkiVLgoKCli9ffujQoUOHDr399tsuORlC+gNaR0iIWxUXF/98iubs2bN7Xq9atUqj0SQlJZWUlGzbtq2oqAgAwzBr1qxZtmwZ33XmzJk33njj6NGjfNeqVauWLFnS0tISHx///vvvV1ZWvvvuu3eJwc/P79ixYyaTac6cOVartbCwMDU19d6fKiH9hfuHJQnxWnf/NeQny1y8eDEzM1OpVI4YMaJnCgzHcU6nc8uWLcOHD5fL5aNHjz58+HDvrk2bNsXHx8vl8vHjx3/++ec9h+s9JNn77fnz5zMyMhQKRWBgYH5+fkNDg8tPnpD7FcPd+ZeTEOJOtbW1w4cPp19JQtyMxggJIYR4tf8DyOQ3ptYHYFkAAAAASUVORK5CYII="
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# MLP solves the underfitting problem! A more serious overfitting problem remains.\n",
"plot([lin1[1,:], lin1[2,:], mlp2[1,:], mlp2[2,:]], ylim=(0.0,0.4),\n",
@@ -364,13 +469,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 17,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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"
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Test error improves from 7.5% to 2.5%!\n",
"plot([lin1[3,:], lin1[4,:], mlp2[3,:], mlp2[4,:]], ylim=(0.0,0.1),\n",
@@ -390,7 +504,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 18,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -411,7 +525,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -432,45 +546,74 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "1.94e-01 100.00%┣████████████████┫ 60000/60000 [00:57/00:57, 1058.05i/s]\n",
+ "Float32[0.026522; 0.0802438; 0.00688333; 0.0231]\n"
+ ]
+ }
+ ],
"source": [
+ "# 1.94e-01 100.00%┣████████████████┫ 60000/60000 [00:57/00:57, 1058.05i/s]\n",
+ "# [0.026522; 0.0802438; 0.00688333; 0.0231]\n",
"model = Chain2(Layer1(784,64), Layer1(64,10,identity); λ1=4f-5)\n",
- "# 61s [0.0259648; 0.0722113; 0.00625; 0.0212]\n",
"mlp3 = trainresults(\"mlp113d.jld2\", model);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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sbFx1qxZKpWqoKDgrbfe6mvlOO6ll17Kz8+Xy+Xjxo3btm1bXxOldP369Xl5eUql8sYbbzxw4EBfk9FonDNnjlqtTktL27JlS9/ykydPlpaWarValUpVUlKClxJRFMIgRCg8zp8/3/Ajl79hzpw506ZN27x589SpUxctWvTxxx8Hlq9du/app5669957t27dWlJSsmDBgr6mDRs2rFq16ve///3rr78eExMzbdq0EydOBJruu+++2267bceOHcXFxUuWLHE4HADAsuysWbN0Ot2mTZteeeUVoVC4ePHiEH4GCA0Ng/Woe4TQwF37+1hfXw8Ar7/+et/7H3nkkeLiYkopx3E6ne6NN97oa3r88cdvvPHGQFN8fPxbb70VWM6ybGlp6ebNmwObW7duXWB5IALr6+sppc3NzQBw6tSpQJPJZHrzzTeDvOsIDTl4RIhQeASi6AqXv6GsrKzv7/nz5586dQoATCaT2Wy+9dZb+5pmz54daDKbze3t7SUlJYHlDMN88sknixYtCrycPHly4A+ZTNa3rsFgWLJkycSJE8vLy9esWeN2u+++++6g7C1CQxgGIULDAMMwfr//ak0sywJA4A08Hq/ft12ef5evW1FR0djYePPNNx85ciQvL++xxx4bvKoRGh4wCBEaonbs2NH394cffjhq1CgAiImJ0el0n3zySV/Tzp07A01xcXEajaaqqiqwnOO48ePHP/fcc9fYhNVqXbp0qVarfeihh7Zu3bp169aNGzcGZWcQGsJwHCFC4bFr164f36I5b968vr9XrFjR0dGRl5dXVVW1fv36yspKACCErFy5cvny5YGmffv2vfjiix9++GGgacWKFUuXLm1vb8/MzHz77bdPnjz5j3/84xo1KJXKjz76yOl03nnnnb29vRUVFePGjRv8XUVoiAv9ZUmE0LW/j4GbZY4cOTJ58mS5XD569Oi+W2AopSzLrl27Njc3VyqVFhYWbtu27fKmF154ITMzUyqVTpgw4fPPP+/b3OWXJC9/eejQoUmTJslkMo1GM3/+/KampqDvPEJDDKFX/04ihMKioaEhNzcXv5sIhQZeI0QIIRTV/j/Q/NPLD/o0xAAAAABJRU5ErkJggg=="
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# overfitting less, test loss improves from 0.0865 to 0.0722\n",
+ "# overfitting less, test loss improves from 0.0841 to 0.0802\n",
"plot([mlp2[1,:], mlp2[2,:], mlp3[1,:], mlp3[2,:]], ylim=(0.0,0.15),\n",
" labels=[:trnMLP :tstMLP :trnL1 :tstL1],xlabel=\"Epochs\",ylabel=\"Loss\")"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 22,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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VuvIkSOJSKVS4SK9XetKby96u0tJkrRixYrt27c776KTu02nHdtFvd07B8tgJr6r7dmzZ926dRs3boyOjjabzWazmYgsFsu0adOKi4ttNttLL72Ei/R2rSu9vejtLrVjx464uLikpCTnXXRyt3HrKitddYy1W6mvr8/NzY2JicnLy2toaPB0OV7o5ZdfvrwjybK8fPnyxMTE0NDQ2bNnNzY2erpMr3Kltxe93aXuvvvuF198sf0uOrnrdMijTju2i3q7d54jBAAAuE7eeWgUAADgOiEIAQDApyEIAQDApyEIAQDApyEIAQDApyEIAQDApyEIAQDApyEIAQDApyEIAQDApyEIAQDApyEIAQDApyEIATyAXYHrXq6kpMRF/zlAT+ed1yME6P6WLVsWGxvr6SoAAEEI4CG33npramqqp6sAABwaBQAA34YgBOh2SkpKGGNlZWUTJkzQ6XQDBw5cvXp1e6ssy0uWLOnXr59Wq83MzFy7dm17E+f8rbfeSk9PDwoKuvnmm3fv3t3eZDQaJ0+erNfrExISPvzww/btR48enTRpksFg0Ol0OTk5OJUIPghBCOAZp06dKrnMpQ+YPHny2LFjV61aNWbMmFmzZn322WfO7YsXL164cOF99923Zs2anJycGTNmtDctW7bs+eeff+ihh957772wsLCxY8ceOXLE2XT//ffffvvtmzZtGj169Jw5c8xmMxFJkjRhwoSQkJAVK1a88847KpVq9uzZbnwPALqHrrrUPQBcv6t/HouLi4novffea3/8448/Pnr0aM65LMshISEffPBBe9Mf/vCHm2++2dkUGRm5evVq53ZJkiZNmrRq1Srnyy1dutS53RmBxcXFnPOKigoiKioqcjaZTKaVK1e6eNcBuh38IgTwDGcUdXDpA/Ly8tpvT5s2raioiIhMJlNtbe1tt93W3pSbm+tsqq2traqqysnJcW4XBGHLli2zZs1y3h01apTzhkajaX9udHT0nDlzsrOz8/PzFy1a1Nraeu+997pkbwG6MQQhQA8gCILD4bhSkyRJROR8gCiKnT7s0vy79LkFBQVlZWXjx48vLCxMT09/+umnu65qgJ4BQQjQTW3atKn99vr16zMyMogoLCwsJCRky5Yt7U2bN292NkVERAQHB2/fvt25XZblrKysV1999SovUV9fP2/ePIPB8Mgjj6xZs2bNmjVvv/22S3YGoBvDPEIAz9i2bdvlQzSnTp3afvupp56qrq5OT0/fvn37W2+9tWHDBiJijD3zzDMLFixwNn399ddvvvnm+vXrnU1PPfXUvHnzqqqqkpKSPvroo6NHj77//vtXqSEoKGjjxo0Wi2X69OlWq7WgoCAzM7PrdxWgm3P/aUkAuPrn0TlYprCwcNSoUVqttn///u1DYDjnkiQtXrw4LS0tICBg0KBBa9euvbTp9ddfT0pKCggIGDp06NatW9tf7tJTkpfe3bt378iRIzUaTXBw8LRp08rLy12+8wDdDONX/kwCgEeUlJSkpaXhswngHjhHCAAAPu3/AeoqEX89wS5cAAAAAElFTkSuQmCC"
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# test error also improves: 0.0244 -> 0.0212\n",
+ "# test error also improves: 0.0243 -> 0.0231\n",
"plot([mlp2[3,:], mlp2[4,:], mlp3[3,:], mlp3[4,:]], ylim=(0.0,0.04),\n",
" labels=[:trnMLP :tstMLP :trnL1 :tstL1],xlabel=\"Epochs\",ylabel=\"Error\")"
]
@@ -488,20 +631,53 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 33,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "\\begin{verbatim}\n",
+ "dropout(x, p; drop, seed)\n",
+ "\\end{verbatim}\n",
+ "Given an array \\texttt{x} and probability \\texttt{0<=p<=1} return an array \\texttt{y} in which each element is 0 with probability \\texttt{p} or \\texttt{x[i]/(1-p)} with probability \\texttt{1-p}. Just return \\texttt{x} if \\texttt{p==0}, or \\texttt{drop=false}. By default \\texttt{drop=true} in a \\texttt{@diff} context, \\texttt{drop=false} otherwise. Specify a non-zero \\texttt{seed::Number} to set the random number seed for reproducible results. See \\href{http://www.jmlr.org/papers/v15/srivastava14a.html}{(Srivastava et al. 2014)} for a reference.\n",
+ "\n"
+ ],
+ "text/markdown": [
+ "```\n",
+ "dropout(x, p; drop, seed)\n",
+ "```\n",
+ "\n",
+ "Given an array `x` and probability `0<=p<=1` return an array `y` in which each element is 0 with probability `p` or `x[i]/(1-p)` with probability `1-p`. Just return `x` if `p==0`, or `drop=false`. By default `drop=true` in a `@diff` context, `drop=false` otherwise. Specify a non-zero `seed::Number` to set the random number seed for reproducible results. See [(Srivastava et al. 2014)](http://www.jmlr.org/papers/v15/srivastava14a.html) for a reference.\n"
+ ],
+ "text/plain": [
+ "\u001b[36m dropout(x, p; drop, seed)\u001b[39m\n",
+ "\n",
+ " Given an array \u001b[36mx\u001b[39m and probability \u001b[36m0<=p<=1\u001b[39m return an array \u001b[36my\u001b[39m in which\n",
+ " each element is 0 with probability \u001b[36mp\u001b[39m or \u001b[36mx[i]/(1-p)\u001b[39m with probability\n",
+ " \u001b[36m1-p\u001b[39m. Just return \u001b[36mx\u001b[39m if \u001b[36mp==0\u001b[39m, or \u001b[36mdrop=false\u001b[39m. By default \u001b[36mdrop=true\u001b[39m in a\n",
+ " \u001b[36m@diff\u001b[39m context, \u001b[36mdrop=false\u001b[39m otherwise. Specify a non-zero \u001b[36mseed::Number\u001b[39m\n",
+ " to set the random number seed for reproducible results. See\n",
+ " (Srivastava et al. 2014)\n",
+ " (http://www.jmlr.org/papers/v15/srivastava14a.html) for a reference."
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"@doc dropout"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -517,71 +693,122 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 25,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "1.06e-01 100.00%┣████████████████┫ 60000/60000 [00:53/00:53, 1142.58i/s]\n",
+ "Float32[0.0144843; 0.067272; 0.00376667; 0.0189]\n"
+ ]
+ }
+ ],
"source": [
+ "# 1.06e-01 100.00%┣████████████████┫ 60000/60000 [00:53/00:53, 1142.58i/s]\n",
+ "# [0.0144843; 0.067272; 0.00376667; 0.0189]\n",
"model = Chain(Layer2(784,64,pdrop=0.2), Layer2(64,10,identity))\n",
- "# 55s [0.0134416; 0.0672397; 0.00371667; 0.0193]\n",
"mlp4 = trainresults(\"mlp113e.jld2\", model);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 26,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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"
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# overfitting less, loss results improve 0.0865 -> 0.0672\n",
+ "# overfitting less, loss results improve 0.0841 -> 0.0673\n",
"plot([mlp2[1,:], mlp2[2,:], mlp4[1,:], mlp4[2,:]], ylim=(0.0,0.15),\n",
" labels=[:trnMLP :tstMLP :trnDrop :tstDrop],xlabel=\"Epochs\",ylabel=\"Loss\")"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 27,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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WiaosHOtdoeno1bHuJnQDxdMmOM4dTAKcQEAALgMJMJomaDCim3ZYxNHeZ/aG50V3zWFfrggfwYnOSM6oQEAQC/4lhgUCoWzZs06eHCw/UaHRBgtExOw03pq9U/PsohFCAk1/GE3dTdzYABcKJYu/G3UogMADHXdrEfYmXeJwebm5tWrV994440nT56MXmCxBwPqo0XFQ1Iu59FpL2MopD4yAAAQS92sR9gViURy8803t7S0vPLKK19++WU0oooLqBFG0QQV9tmFPada2telZBmWavPENyQAQD+xs3IfQqjcVFVhqkYI7arahxA63njK6DQbnabCptMR3Kcz/0UHMQz79NNPk5OTvY83bdo0btw4lUr19ttvBz128eLFvllJfccaDIY777xTo9FotdqVK1caDAbfDuvWrVOr1QUFBVVVVX1806IEEmEUTUnEWulRuYps79PW05ayrxp6dQbb4f85zx+LQmgAgDgzuywIIafH6fS4EEImpwUhZKVsNOPxMB6r2xbBfTrbunUrQsi36OCRI0d8FcSamppTp0599dVXzzzzTNBjk5OT6+vrfU+9x65evZrL5VZUVJSXl3O53Cee6JhRxGq1NjQ0FBQUPPbYY+G/X1HFDlgLFy7cvn17V6UNDQ2xDCaon+qZgu8sxa0XvU/dbdQvz5xnaCb0M1iP7Gzd8GJ0ooswvV7vdDrjHcUQYrPZTCZTvKMYQrx3yMI79ttvv12yZElk4+k73/c/QqilpcX32GKxdN7B/8DKysqsrKyAY1Uqle/9aWpqUqvVvh3Ky8tZltXpdEqlsseoTp06NXbsWO/jlpYWiqLCfHm9ATXCKJqaiBUZbad17etEc8QkV8axhTzpKEJIMGaGq/QkzD4KAIiqxMRE32OJRNL9ztu3b588eXLnY30L02MYRtOBC8/hON55Yz8BiTCKJByUIk7ISbjOt0WeKzJdDN5SERQuEHOzRkLrKAAgGvwXHQxFW1vb5s2b//KXvzz99NMBRQsXLnz22WedTqfD4Xj22WcXLVrkK/r44489Hs/69evnzJkTgaCjABJhdE1XY+8ce6vGUud9KhsmMpdZe3UGwfg5dhhZDwCItIBFB7vnHUeYlJS0fv36r7/+esKECQE7vP322w6HIzMzMzs72+12+3e0oSgqOTl5z54977zzTsSijygYPhFd09XYXs/qdCnh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"
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# this time error also improves 0.0244 -> 0.0193\n",
+ "# this time error also improves 0.0243 -> 0.0189\n",
"plot([mlp2[3,:], mlp2[4,:], mlp4[3,:], mlp4[4,:]], ylim=(0.0,0.04),\n",
" labels=[:trnMLP :tstMLP :trnDrop :tstDrop],xlabel=\"Epochs\",ylabel=\"Error\")"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 28,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(mlperr = 0.0243f0, L1err = 0.0231f0, dropouterr = 0.0189f0)"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"(mlperr=minimum(mlp2[4,:]),L1err=minimum(mlp3[4,:]),dropouterr=minimum(mlp4[4,:]))"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 29,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(mlploss = 0.084129006f0, L1loss = 0.08024382f0, dropoutloss = 0.06727201f0)"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"(mlploss=minimum(mlp2[2,:]),L1loss=minimum(mlp3[2,:]),dropoutloss=minimum(mlp4[2,:]))"
]
@@ -599,29 +826,49 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 30,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "5.80e-02 100.00%┣████████████████┫ 60000/60000 [00:54/00:54, 1101.25i/s]\n",
+ "Float32[0.0035497; 0.0479644; 0.0003; 0.0149]\n"
+ ]
+ }
+ ],
"source": [
"# The current trend is to use models with higher capacity tempered with dropout\n",
+ "# 5.80e-02 100.00%┣████████████████┫ 60000/60000 [00:54/00:54, 1101.25i/s]\n",
+ "# [0.0035497; 0.0479644; 0.0003; 0.0149]\n",
"model = Chain(Layer2(784,256,pdrop=0.2), Layer2(256,10,identity))\n",
- "# 56s [0.00393102; 0.0491462; 0.0004; 0.0154]\n",
"mlp = trainresults(\"mlp113f.jld2\", model);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 31,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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"
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Both train and test loss is better with the larger model\n",
"plot([mlp4[1,:], mlp4[2,:], mlp[1,:], mlp[2,:]],ylim=(0,0.15),\n",
@@ -630,13 +877,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 32,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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"
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# We are down to 1.5% error.\n",
"plot([mlp4[3,:], mlp4[4,:], mlp[3,:], mlp[4,:]],ylim=(0,0.04),\n",
diff --git a/tutorial/50.cnn.ipynb b/tutorial/50.cnn.ipynb
index bc373421f..65892ed06 100644
--- a/tutorial/50.cnn.ipynb
+++ b/tutorial/50.cnn.ipynb
@@ -9,28 +9,25 @@
},
"source": [
"# Convolutional Neural Networks\n",
- "(c) Deniz Yuret, 2019"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
+ "(c) Deniz Yuret, 2019\n",
"* Objectives: See the effect of sparse and shared weights implemented by convolutional networks.\n",
"* Prerequisites: [MLP models](40.mlp.ipynb), [MNIST](20.mnist.ipynb)\n",
"* New functions:\n",
- "[conv4](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.conv4),\n",
- "[pool](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.pool),\n",
- "[mat](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.mat)"
+ "[conv4](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.conv4),\n",
+ "[pool](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.pool),\n",
+ "[mat](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.mat)\n",
+ "\n",
+ "![image](https://github.com/denizyuret/Knet.jl/blob/master/docs/src/images/le_net.png?raw=true)\n",
+ "([image source](http://www.dataiku.com/blog/2015/08/18/Deep_Learning.html))\n",
+ "\n",
+ "To improve the performance further, we can use a convolutional neural networks (CNN). See the [course notes](http://cs231n.github.io/convolutional-networks/) by Andrej Karpathy for a good introduction to CNNs. We will implement the [LeNet](http://yann.lecun.com/exdb/lenet) model which consists of two convolutional layers followed by two fully connected layers. We will describe and use the [conv4](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.conv4) and [pool](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.pool) functions provided by Knet for the implementation of convolutional nets.\n",
+ "\n",
+ "Even though MLPs and CNNs are both universal function approximators and both achieve 0 error on the training set, we will see that a CNN converges a lot faster and generalizes a lot better with less overfitting achieving a 99.5% test accuracy on MNIST. The sparse connectivity and shared weights of a CNN give it an inductive bias appropriate for image features allowing it to learn better with less data."
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -59,13 +56,118 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "\\begin{verbatim}\n",
+ "conv4(w, x; kwargs...)\n",
+ "\\end{verbatim}\n",
+ "Execute convolutions or cross-correlations using filters specified with \\texttt{w} over tensor \\texttt{x}.\n",
+ "\n",
+ "Currently KnetArray\\{Float32/64,4/5\\} and Array\\{Float32/64,4\\} are supported as \\texttt{w} and \\texttt{x}. If \\texttt{w} has dimensions \\texttt{(W1,W2,...,I,O)} and \\texttt{x} has dimensions \\texttt{(X1,X2,...,I,N)}, the result \\texttt{y} will have dimensions \\texttt{(Y1,Y2,...,O,N)} where\n",
+ "\n",
+ "\\begin{verbatim}\n",
+ "Yi=1+floor((Xi+2*padding[i]-Wi)/stride[i])\n",
+ "\\end{verbatim}\n",
+ "Here \\texttt{I} is the number of input channels, \\texttt{O} is the number of output channels, \\texttt{N} is the number of instances, and \\texttt{Wi,Xi,Yi} are spatial dimensions. \\texttt{padding} and \\texttt{stride} are keyword arguments that can be specified as a single number (in which case they apply to all dimensions), or an array/tuple with entries for each spatial dimension.\n",
+ "\n",
+ "\\section{Keywords}\n",
+ "\\begin{itemize}\n",
+ "\\item \\texttt{padding=0}: the number of extra zeros implicitly concatenated at the start and at the end of each dimension.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{stride=1}: the number of elements to slide to reach the next filtering window.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{upscale=1}: upscale factor for each dimension.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{mode=0}: 0 for convolution and 1 for cross-correlation.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{alpha=1}: can be used to scale the result.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{handle}: handle to a previously created cuDNN context. Defaults to a Knet allocated handle.\n",
+ "\n",
+ "\\end{itemize}\n"
+ ],
+ "text/markdown": [
+ "```\n",
+ "conv4(w, x; kwargs...)\n",
+ "```\n",
+ "\n",
+ "Execute convolutions or cross-correlations using filters specified with `w` over tensor `x`.\n",
+ "\n",
+ "Currently KnetArray{Float32/64,4/5} and Array{Float32/64,4} are supported as `w` and `x`. If `w` has dimensions `(W1,W2,...,I,O)` and `x` has dimensions `(X1,X2,...,I,N)`, the result `y` will have dimensions `(Y1,Y2,...,O,N)` where\n",
+ "\n",
+ "```\n",
+ "Yi=1+floor((Xi+2*padding[i]-Wi)/stride[i])\n",
+ "```\n",
+ "\n",
+ "Here `I` is the number of input channels, `O` is the number of output channels, `N` is the number of instances, and `Wi,Xi,Yi` are spatial dimensions. `padding` and `stride` are keyword arguments that can be specified as a single number (in which case they apply to all dimensions), or an array/tuple with entries for each spatial dimension.\n",
+ "\n",
+ "# Keywords\n",
+ "\n",
+ " * `padding=0`: the number of extra zeros implicitly concatenated at the start and at the end of each dimension.\n",
+ " * `stride=1`: the number of elements to slide to reach the next filtering window.\n",
+ " * `upscale=1`: upscale factor for each dimension.\n",
+ " * `mode=0`: 0 for convolution and 1 for cross-correlation.\n",
+ " * `alpha=1`: can be used to scale the result.\n",
+ " * `handle`: handle to a previously created cuDNN context. Defaults to a Knet allocated handle.\n"
+ ],
+ "text/plain": [
+ "\u001b[36m conv4(w, x; kwargs...)\u001b[39m\n",
+ "\n",
+ " Execute convolutions or cross-correlations using filters specified\n",
+ " with \u001b[36mw\u001b[39m over tensor \u001b[36mx\u001b[39m.\n",
+ "\n",
+ " Currently KnetArray{Float32/64,4/5} and Array{Float32/64,4} are\n",
+ " supported as \u001b[36mw\u001b[39m and \u001b[36mx\u001b[39m. If \u001b[36mw\u001b[39m has dimensions \u001b[36m(W1,W2,...,I,O)\u001b[39m and \u001b[36mx\u001b[39m has\n",
+ " dimensions \u001b[36m(X1,X2,...,I,N)\u001b[39m, the result \u001b[36my\u001b[39m will have dimensions\n",
+ " \u001b[36m(Y1,Y2,...,O,N)\u001b[39m where\n",
+ "\n",
+ "\u001b[36m Yi=1+floor((Xi+2*padding[i]-Wi)/stride[i])\u001b[39m\n",
+ "\n",
+ " Here \u001b[36mI\u001b[39m is the number of input channels, \u001b[36mO\u001b[39m is the number of output\n",
+ " channels, \u001b[36mN\u001b[39m is the number of instances, and \u001b[36mWi,Xi,Yi\u001b[39m are spatial\n",
+ " dimensions. \u001b[36mpadding\u001b[39m and \u001b[36mstride\u001b[39m are keyword arguments that can be\n",
+ " specified as a single number (in which case they apply to all\n",
+ " dimensions), or an array/tuple with entries for each spatial\n",
+ " dimension.\n",
+ "\n",
+ "\u001b[1m Keywords\u001b[22m\n",
+ "\u001b[1m ≡≡≡≡≡≡≡≡≡≡\u001b[22m\n",
+ "\n",
+ " • \u001b[36mpadding=0\u001b[39m: the number of extra zeros implicitly\n",
+ " concatenated at the start and at the end of each\n",
+ " dimension.\n",
+ "\n",
+ " • \u001b[36mstride=1\u001b[39m: the number of elements to slide to reach the\n",
+ " next filtering window.\n",
+ "\n",
+ " • \u001b[36mupscale=1\u001b[39m: upscale factor for each dimension.\n",
+ "\n",
+ " • \u001b[36mmode=0\u001b[39m: 0 for convolution and 1 for cross-correlation.\n",
+ "\n",
+ " • \u001b[36malpha=1\u001b[39m: can be used to scale the result.\n",
+ "\n",
+ " • \u001b[36mhandle\u001b[39m: handle to a previously created cuDNN context.\n",
+ " Defaults to a Knet allocated handle."
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Convolution operator in Knet\n",
"@doc conv4"
@@ -73,13 +175,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "w = [1.0; 2.0; 3.0]\n",
+ "x = [1.0; 2.0; 3.0; 4.0; 5.0; 6.0; 7.0]\n",
+ "y = conv4(w, x) = [10.0; 16.0; 22.0; 28.0; 34.0]\n"
+ ]
+ }
+ ],
"source": [
"# Convolution in 1-D\n",
"w = reshape([1.0,2.0,3.0], (3,1,1,1)); @show w\n",
@@ -89,13 +201,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "w = [1.0; 2.0; 3.0]\n",
+ "x = [1.0; 2.0; 3.0; 4.0; 5.0; 6.0; 7.0]\n",
+ "y2 = conv4(w, x, padding=(1, 0)) = [4.0; 10.0; 16.0; 22.0; 28.0; 34.0; 32.0]\n"
+ ]
+ }
+ ],
"source": [
"# Padding\n",
"w = reshape([1.0,2.0,3.0], (3,1,1,1)); @show w\n",
@@ -106,13 +228,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "w = [1.0; 2.0; 3.0]\n",
+ "x = [1.0; 2.0; 3.0; 4.0; 5.0; 6.0; 7.0]\n",
+ "y3 = conv4(w, x; padding=(1, 0), stride=3) = [4.0; 22.0; 32.0]\n"
+ ]
+ }
+ ],
"source": [
"# Stride\n",
"w = reshape([1.0,2.0,3.0], (3,1,1,1)); @show w\n",
@@ -122,13 +254,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "w = [1.0; 2.0; 3.0]\n",
+ "x = [1.0; 2.0; 3.0; 4.0; 5.0; 6.0; 7.0]\n",
+ "y4 = conv4(w, x, mode=0) = [10.0; 16.0; 22.0; 28.0; 34.0]\n",
+ "y5 = conv4(w, x, mode=1) = [14.0; 20.0; 26.0; 32.0; 38.0]\n"
+ ]
+ }
+ ],
"source": [
"# Mode\n",
"w = reshape([1.0,2.0,3.0], (3,1,1,1)); @show w\n",
@@ -139,13 +282,28 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3×3×1×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 1.0 4.0 7.0\n",
+ " 2.0 5.0 8.0\n",
+ " 3.0 6.0 9.0"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Convolution in more dimensions\n",
"x = reshape([1.0:9.0...], (3,3,1,1))"
@@ -153,39 +311,87 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2×2×1×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 1.0 3.0\n",
+ " 2.0 4.0"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"w = reshape([1.0:4.0...], (2,2,1,1))"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2×2×1×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 23.0 53.0\n",
+ " 33.0 63.0"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"y = conv4(w, x)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3×3×2×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 1.0 4.0 7.0\n",
+ " 2.0 5.0 8.0\n",
+ " 3.0 6.0 9.0\n",
+ "\n",
+ "[:, :, 2, 1] =\n",
+ " 10.0 13.0 16.0\n",
+ " 11.0 14.0 17.0\n",
+ " 12.0 15.0 18.0"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Convolution with multiple channels, filters, and instances\n",
"# size X = [X1,X2,...,Xd,Cx,N] where d is the number of dimensions, Cx is channels, N is instances\n",
@@ -194,7 +400,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "fragment"
@@ -208,13 +414,35 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2×2×3×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 328.0 436.0\n",
+ " 364.0 472.0\n",
+ "\n",
+ "[:, :, 2, 1] =\n",
+ " 808.0 1108.0\n",
+ " 908.0 1208.0\n",
+ "\n",
+ "[:, :, 3, 1] =\n",
+ " 1288.0 1780.0\n",
+ " 1452.0 1944.0"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# size Y = [Y1,Y2,...,Yd,Cy,N] where Yi = 1 + floor((Xi+2Pi-Wi)/Si), Cy is channels, N is instances\n",
"y = conv4(w,x)"
@@ -244,13 +472,125 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "\\begin{verbatim}\n",
+ "pool(x; kwargs...)\n",
+ "\\end{verbatim}\n",
+ "Compute pooling of input values (i.e., the maximum or average of several adjacent values) to produce an output with smaller height and/or width.\n",
+ "\n",
+ "Currently 4 or 5 dimensional KnetArrays with \\texttt{Float32} or \\texttt{Float64} entries are supported. If \\texttt{x} has dimensions \\texttt{(X1,X2,...,I,N)}, the result \\texttt{y} will have dimensions \\texttt{(Y1,Y2,...,I,N)} where\n",
+ "\n",
+ "\\begin{verbatim}\n",
+ "Yi=1+floor((Xi+2*padding[i]-window[i])/stride[i])\n",
+ "\\end{verbatim}\n",
+ "Here \\texttt{I} is the number of input channels, \\texttt{N} is the number of instances, and \\texttt{Xi,Yi} are spatial dimensions. \\texttt{window}, \\texttt{padding} and \\texttt{stride} are keyword arguments that can be specified as a single number (in which case they apply to all dimensions), or an array/tuple with entries for each spatial dimension.\n",
+ "\n",
+ "\\section{Keywords:}\n",
+ "\\begin{itemize}\n",
+ "\\item \\texttt{window=2}: the pooling window size for each dimension.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{padding=0}: the number of extra zeros implicitly concatenated at the start and at the end of each dimension.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{stride=window}: the number of elements to slide to reach the next pooling window.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{mode=0}: 0 for max, 1 for average including padded values, 2 for average excluding padded values.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{maxpoolingNanOpt=0}: Nan numbers are not propagated if 0, they are propagated if 1.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{alpha=1}: can be used to scale the result.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{handle}: Handle to a previously created cuDNN context. Defaults to a Knet allocated handle.\n",
+ "\n",
+ "\\end{itemize}\n"
+ ],
+ "text/markdown": [
+ "```\n",
+ "pool(x; kwargs...)\n",
+ "```\n",
+ "\n",
+ "Compute pooling of input values (i.e., the maximum or average of several adjacent values) to produce an output with smaller height and/or width.\n",
+ "\n",
+ "Currently 4 or 5 dimensional KnetArrays with `Float32` or `Float64` entries are supported. If `x` has dimensions `(X1,X2,...,I,N)`, the result `y` will have dimensions `(Y1,Y2,...,I,N)` where\n",
+ "\n",
+ "```\n",
+ "Yi=1+floor((Xi+2*padding[i]-window[i])/stride[i])\n",
+ "```\n",
+ "\n",
+ "Here `I` is the number of input channels, `N` is the number of instances, and `Xi,Yi` are spatial dimensions. `window`, `padding` and `stride` are keyword arguments that can be specified as a single number (in which case they apply to all dimensions), or an array/tuple with entries for each spatial dimension.\n",
+ "\n",
+ "# Keywords:\n",
+ "\n",
+ " * `window=2`: the pooling window size for each dimension.\n",
+ " * `padding=0`: the number of extra zeros implicitly concatenated at the start and at the end of each dimension.\n",
+ " * `stride=window`: the number of elements to slide to reach the next pooling window.\n",
+ " * `mode=0`: 0 for max, 1 for average including padded values, 2 for average excluding padded values.\n",
+ " * `maxpoolingNanOpt=0`: Nan numbers are not propagated if 0, they are propagated if 1.\n",
+ " * `alpha=1`: can be used to scale the result.\n",
+ " * `handle`: Handle to a previously created cuDNN context. Defaults to a Knet allocated handle.\n"
+ ],
+ "text/plain": [
+ "\u001b[36m pool(x; kwargs...)\u001b[39m\n",
+ "\n",
+ " Compute pooling of input values (i.e., the maximum or average of\n",
+ " several adjacent values) to produce an output with smaller height\n",
+ " and/or width.\n",
+ "\n",
+ " Currently 4 or 5 dimensional KnetArrays with \u001b[36mFloat32\u001b[39m or \u001b[36mFloat64\u001b[39m\n",
+ " entries are supported. If \u001b[36mx\u001b[39m has dimensions \u001b[36m(X1,X2,...,I,N)\u001b[39m, the\n",
+ " result \u001b[36my\u001b[39m will have dimensions \u001b[36m(Y1,Y2,...,I,N)\u001b[39m where\n",
+ "\n",
+ "\u001b[36m Yi=1+floor((Xi+2*padding[i]-window[i])/stride[i])\u001b[39m\n",
+ "\n",
+ " Here \u001b[36mI\u001b[39m is the number of input channels, \u001b[36mN\u001b[39m is the number of\n",
+ " instances, and \u001b[36mXi,Yi\u001b[39m are spatial dimensions. \u001b[36mwindow\u001b[39m, \u001b[36mpadding\u001b[39m and\n",
+ " \u001b[36mstride\u001b[39m are keyword arguments that can be specified as a single\n",
+ " number (in which case they apply to all dimensions), or an\n",
+ " array/tuple with entries for each spatial dimension.\n",
+ "\n",
+ "\u001b[1m Keywords:\u001b[22m\n",
+ "\u001b[1m ≡≡≡≡≡≡≡≡≡≡≡\u001b[22m\n",
+ "\n",
+ " • \u001b[36mwindow=2\u001b[39m: the pooling window size for each dimension.\n",
+ "\n",
+ " • \u001b[36mpadding=0\u001b[39m: the number of extra zeros implicitly\n",
+ " concatenated at the start and at the end of each\n",
+ " dimension.\n",
+ "\n",
+ " • \u001b[36mstride=window\u001b[39m: the number of elements to slide to reach\n",
+ " the next pooling window.\n",
+ "\n",
+ " • \u001b[36mmode=0\u001b[39m: 0 for max, 1 for average including padded values,\n",
+ " 2 for average excluding padded values.\n",
+ "\n",
+ " • \u001b[36mmaxpoolingNanOpt=0\u001b[39m: Nan numbers are not propagated if 0,\n",
+ " they are propagated if 1.\n",
+ "\n",
+ " • \u001b[36malpha=1\u001b[39m: can be used to scale the result.\n",
+ "\n",
+ " • \u001b[36mhandle\u001b[39m: Handle to a previously created cuDNN context.\n",
+ " Defaults to a Knet allocated handle."
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Pooling operator in Knet\n",
"@doc pool"
@@ -258,13 +598,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "x = [1.0; 2.0; 3.0; 4.0; 5.0; 6.0]\n",
+ "pool(x) = [2.0; 4.0; 6.0]\n"
+ ]
+ }
+ ],
"source": [
"# 1-D pooling example\n",
"x = reshape([1.0:6.0...], (6,1,1,1)); @show x\n",
@@ -273,13 +622,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "x = [1.0; 2.0; 3.0; 4.0; 5.0; 6.0]\n",
+ "pool(x; window=3) = [3.0; 6.0]\n"
+ ]
+ }
+ ],
"source": [
"# Window size\n",
"x = reshape([1.0:6.0...], (6,1,1,1)); @show x\n",
@@ -288,13 +646,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 16,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "x = [1.0; 2.0; 3.0; 4.0; 5.0; 6.0]\n",
+ "pool(x; padding=(1, 0)) = [1.0; 3.0; 5.0; 6.0]\n"
+ ]
+ }
+ ],
"source": [
"# Padding\n",
"x = reshape([1.0:6.0...], (6,1,1,1)); @show x\n",
@@ -303,13 +670,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 17,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "x = [1.0; 2.0; 3.0; 4.0; 5.0; 6.0; 7.0; 8.0; 9.0; 10.0]\n",
+ "pool(x; stride=4) = [2.0; 6.0; 10.0]\n"
+ ]
+ }
+ ],
"source": [
"# Stride\n",
"x = reshape([1.0:10.0...], (10,1,1,1)); @show x\n",
@@ -318,13 +694,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 18,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "x = K[1.0; 2.0; 3.0; 4.0; 5.0; 6.0]\n",
+ "pool(x; padding=(1, 0), mode=0) = K[1.0; 3.0; 5.0; 6.0]\n",
+ "pool(x; padding=(1, 0), mode=1) = K[0.5; 2.5; 4.5; 3.0]\n",
+ "pool(x; padding=(1, 0), mode=2) = K[1.0; 2.5; 4.5; 6.0]\n"
+ ]
+ }
+ ],
"source": [
"# Mode (using KnetArray here; not all modes are implemented on the CPU)\n",
"x = KnetArray(reshape([1.0:6.0...], (6,1,1,1))); @show x\n",
@@ -335,13 +722,29 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4×4×1×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 1.0 5.0 9.0 13.0\n",
+ " 2.0 6.0 10.0 14.0\n",
+ " 3.0 7.0 11.0 15.0\n",
+ " 4.0 8.0 12.0 16.0"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# More dimensions\n",
"x = reshape([1.0:16.0...], (4,4,1,1))"
@@ -349,26 +752,62 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2×2×1×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 6.0 14.0\n",
+ " 8.0 16.0"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"pool(x)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4×4×2×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 1.0 5.0 9.0 13.0\n",
+ " 2.0 6.0 10.0 14.0\n",
+ " 3.0 7.0 11.0 15.0\n",
+ " 4.0 8.0 12.0 16.0\n",
+ "\n",
+ "[:, :, 2, 1] =\n",
+ " 17.0 21.0 25.0 29.0\n",
+ " 18.0 22.0 26.0 30.0\n",
+ " 19.0 23.0 27.0 31.0\n",
+ " 20.0 24.0 28.0 32.0"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Multiple channels and instances\n",
"x = reshape([1.0:32.0...], (4,4,2,1))"
@@ -376,13 +815,31 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 22,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2×2×2×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 6.0 14.0\n",
+ " 8.0 16.0\n",
+ "\n",
+ "[:, :, 2, 1] =\n",
+ " 22.0 30.0\n",
+ " 24.0 32.0"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# each channel and each instance is pooled separately\n",
"pool(x) # size Y = (Y1,...,Yd,Cx,N) where Yi are spatial dims, Cx and N are identical to input X"
@@ -401,13 +858,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 23,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "┌ Info: Loading MNIST...\n",
+ "└ @ Main /home/deniz/.julia/dev/Knet/data/mnist.jl:33\n"
+ ]
+ }
+ ],
"source": [
"# Load data (see mnist.ipynb)\n",
"include(Knet.dir(\"data\",\"mnist.jl\")) # Load data\n",
@@ -416,13 +882,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "28×28×1×100 KnetArray{Float32,4}\n",
+ "100-element Array{UInt8,1}\n"
+ ]
+ }
+ ],
"source": [
"(x,y) = first(dtst)\n",
"println.(summary.((x,y)));"
@@ -430,13 +905,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 25,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "trainresults (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# For running experiments\n",
"function trainresults(file,model; o...)\n",
@@ -469,13 +955,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 26,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Conv"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Define a convolutional layer:\n",
"struct Conv; w; b; f; p; end\n",
@@ -485,13 +982,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 27,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Dense"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Redefine dense layer (See mlp.ipynb):\n",
"struct Dense; w; b; f; p; end\n",
@@ -501,7 +1009,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 28,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -521,14 +1029,29 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 29,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4-element Array{String,1}:\n",
+ " \"5×5×1×20 AutoGrad.Param{KnetArray{Float32,4}}\" \n",
+ " \"5×5×20×50 AutoGrad.Param{KnetArray{Float32,4}}\"\n",
+ " \"500×800 AutoGrad.Param{KnetArray{Float32,2}}\" \n",
+ " \"10×500 AutoGrad.Param{KnetArray{Float32,2}}\" "
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"lenet = Chain(Conv(5,5,1,20), \n",
" Conv(5,5,20,50), \n",
@@ -539,13 +1062,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 30,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.2857893f0"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"lenet(x,y)"
]
@@ -563,21 +1097,32 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 31,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "1.08e-02 100.00%┣████████████████▉┫ 60000/60000 [03:50/03:50, 260.67i/s]\n",
+ "Float32[0.000135032; 0.0196918; 0.0; 0.0053]\n"
+ ]
+ }
+ ],
"source": [
- "# 225s [0.000159805; 0.0163911; 0.0; 0.0046]\n",
+ "# 1.08e-02 100.00%┣████████████████▉┫ 60000/60000 [03:50/03:50, 260.67i/s]\n",
+ "# [0.000135032; 0.0196918; 0.0; 0.0053]\n",
"cnn = trainresults(\"cnn113.jld2\", lenet);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 32,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -590,7 +1135,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 33,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -603,13 +1148,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 34,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd3wUZfoA8Ped2d7TeyEkEAgEQu9dkBpFOM9y2MsBhyKKnCJ6nhXLqac/e8R2IiBEIIKUEKog0gmEDul9N9vbzPz+WAxhs9lskt2ZTeb5fvxjM+/MvM+GuM++77wFMwyDAAAAAL4iuA4AAAAA4BIkQgAAALwGiRAAAACvQSIEAADAa5AIAQAA8BokQgAAALwGiRAAAACvsZcItVrtzJkzQ0NDZ82apdVqm59AUVR6enqbLgEAAAA6iL1E+OabbyYlJVVUVCQmJq5cudKt9P333x8xYsS5c+d8vwQAAADoOMzayjI9e/b8+eef09PTi4qKsrOz3XLerl27TCbTzJkzm8bj/RIAAACg49hLhAqFoqamRiqVWiyWqKgovV7vIRp8UzzeL9m5c+c777wjEAjcbpKdnT1v3jyHwyEUCj1GYrM7iovL01KTOvyemt2ZQtdMqIfq+o+0tgZJ5YRE5veKgpDT6SRJEmPMdSB8QdM0wzAkSXIdCF8wDENRVPMPHBA4bfpUIUmSINrZx8nePyrDMK734/p76vglr7/++uDBgwcMGOB2PCUlhaKo6urq6Ohoj7dtqDRU/KhNWRbf5vfQmlIjmradPHf79VANW74WpfYTD5zg94qCkE6nk8lkYrGY60D4wmw2OxwOtVrNdSB8QVFUfX19REQE14HwSF1dnUaj8fHLR7uzIGIzEcbGxpaUlKSlpZWVlcXFxXX8EpFINHr06GnTpnm8ViwWSyQSj0UhChwi1bdU2hGpIlRldRAiiYhACCFHUk+q6logKgpCrl84JELW0DRNkiRP/rqCAUVRXj5VQCC4fuEstMLZGywzc+bMnJwchmFycnKys7NdBwsKCtp6ScfRDF1prPLX3ZoSEChOhq8ZrvfuihJ72IvhuSYAAAQ19hLhihUrTp48mZCQUFhYuHz5ctfB8ePHt/WSjiMwEa2I8tfd3KSo0BXj9dei+DRHxTWGcgaoLgAAAB3HXteoRqPJy8tzO+g2VMftR4+X+IXRYXJQDiHpeTRNR6Qo8WU9g+IwQgiLxILQKGflNWFcd79XBAAAwC94urIMRohBARku202Jrxhu3FmUkGYvPh+IigAAAPgFH4cCS8JEAx/uJSJFgbh5ihKtrb3xo/q2R3kyfQIAADopPrYICQF+88J7FYEZL9NNiS83aRESMiUiYKYXAAAELz62CBFC/xr9bIDunKLCl/QsrVEAAACg4/jYInQYnL98t7dEXxaIm4eJEUZIa7vpIAwcBQCAoMXHREhKyfRhyaHSkADd3613VLfhE9P+gIx9BQAA0HF8TISEAEuihTRDB+j+KaqbEqEwtpu9BAaOAgBAkOJjIkQIHa08WWaoCNDNuynQ5SbLg4sSe8IMCgAACFp8TIQOg7Pvxf7pYWkBur/bVEJhVCKlq6WtpgBVBwAAoCP4mAidFurK72U7r+4J0P3dukYRQYjiUhyllwJUHQAAgI7gYyJECClFionJYwJ08xQlumy46YgwoQf0jgIAQHDi5TxCjOxOR1HdhQD1jiYrcamJcdJI8OfXDMXomQjBjrUAABCMeJkIA7nWKEJIRKAoKS41McnK68lPEB4boLoAAAB0EE+7RoWksFdYj8Ddv3nvKAAAgODEx0RICAmL2vz1qdWBq8JtTj0AAICgxceuUbFGOGp+v1GoX+CqcJtBgRAyHfyVsVkUY28LXKUAgOC0b9++f/zjH1xH0Wn07Nlz9eoANlSa42MiRAhd1l07XnV6ds/pAbp/ihJtLrnpCCGVm0//BokQAB5qaGhQKBQffPAB14F0AufPn3/ttddYrpSniTBKHjEkNitw909R4cv6m5ZwEyX20P30UeBqBAAEM5VKlZUVwM+cLoMgOHhgx8dnhDad48q3VYFbaxQhlNKsa5QMiUQIUQ11gasUAABAO/AxEYo1wog7FbuLDwSuiigpslBI77jpoDChh/3aucBVCgAAoB34mAgRQlHyiL/1+UtAq0hWuDcKxSkZtksnA1opAACAtuJpItRadc/uejmgVaSo8OWbt6qXZo4UpwZwqCoAAIB24ONgGWut/dJn1W8+tyKgtTSfUy+IiBNExAW0UgAAAG3F0xYhQijv0vaA3r/5VEIAAABBiL+JkAnkqFHkaeAoAACAIMTfRDgjdUpA75+i8rDcKG3UaX94N6D1AgAAaBP+JsIndzxvcpgDd/9uCnzVwNA3twkJmcpy6jfKoA1cvQAA4F8Y47vvvrvpkXvuuQdj3Fjq8RKBQCAQCMRi8ZAhQ44fP85GoO3F30T43qRX5UJZ4O4vFaAQMSo3u2VCQpySYb90OnD1AgCALyZNmuT7yQUFBTabzfXabrcXFBS0eonT6XQ6nZWVlbNmzXr00UfbFyQ7+JgIhQpB0tSonJPf11sC2zJLUeLmvaPi1EzbhRMBrRcAAFq1c+dO308eNWrU9u3XBxjm5+ePHDnSxwtDQkKeeOKJ06eD+ts/HxMhKSEistQTksbIRfKAVtS92VRChJA4rZ/1IiRCAACXbrvtNoRQ//79EUIY42+//TY6Otr1evXq1f369QsLC3vvvfcaz589e/ZPP/3ker1hw4bbb7/dx4pqa2vffffdXr16+fkN+BUf5xG6EJgI6HKjCKF0DT6rc0+EwtgU2thANdSR6rCA1g4ACGbPHKIu6Fmq6+2hRKrqpid5ubm5GOPGR3eHDh1qbCAWFxcfP358165dM2bMePLJJ10Hp0+fvmTJEofDQZLk1q1bV65c2Wqljc8O+/Tp88033/jtzQQAHxMhZaXrzxp+kxweETc4QRXAGe4ZGvRZUbMZFBirps5DFBW4egEAwW9GIqG1szTDKlziYTxLUy+++GJERITr9d///neM8YQJEywWS+MJSqVy4MCBBQUFMpmsT58+arW61UoZptPMH+NjInS5s1fAtwbMCMGFOg/HFaNmBLpqAECQGxuDEWolP7GmMQsihJRKpcdzXL2jCoXC937RzoK/zwg/O/7NHxWBHdHbTYlrrYzB0fqZAADAPoejDR9Ps2bN2rx588aNG2fNmhW4kDjB3xbho/3nBboKAqMealykYwZHBMv3PgAAcJk2bVr37t2Li4t9PD80NLR37942my0yMtKtSCC4kUqcTqffQmQLLxMhgyoPaWu6V8qFshRNUkCrytDgQq2HRGg+tpuQKiTpAwNaOwAAtCQvL8/1ounDPI+vG19s27bNS2lTnegBIeJn1yjC6NK6ckxjjwsi+FfvEHym2cBRhBBt0luO7wl07QAAAFrFy0SIECHC6eq0JFV8oCvKCEGFWg+JUJzaz3YRNukFAADu8TQRkiJix/ndmy7+GuiKMkJwoafla4RRCYzNSmmrAx0AAAAA7/iaCMXk2JiR2WlTA11RsgLX2TwNHMVY0meY6XAbljgCAAAQCHxNhCJcVHFhy+WA5yECo55qD+vLIISU4+8w7dvIOOyBjgEAAIAXPE2EhJiMEkUNjO7HQl0ZIdjjY0JBZLxy0l8Zh42FGAAAoB26/AZMLjxNhJkLu6lSZFYnG0mopUSIEFKMySZknhdxAACAgPKyDVPToq69AZMLTxMhQqjaXHusio1xm701LSZCAADgipdtmJoWde0NmFz4mwhTNEksDJZBCGWEoDOeVhy9gQ7sJhgAAOCm6TZMOTk5MTEx4eHhH3zwgVsR6uobMLnwcmUZhEp31TaIGnLxxudHLA50XclKrLUxDXakFnk+ofq9xSF3LRbGJAc6EgBA8DDs+sltApUouZdswDjXa/vVs+ajBW6XaG5/HP35WE634RN08+otsqwxom4ZrteWY3tsVwobi5Tj7yBDbloXrek2TEuWLNmzZ49YLF6wYMGiRYvcdmjq2hswufA0EcaPD49H4Rko4FkQIYQR6qnGRTpmaKTnhWykfYcbC9aH3PUUC8EAAIIEqQnH5E2fwKRS0/gaS2SC8Fj3a5oMThGExbgXSm7sNE4o1E0vx8IWvoYjhBAaM2bMc889N2/evC1btjQv7dobMLnwNBEihMwOy96S36akTGChrowQXNhyIpSPnFH5ygOq6fWkKpSFYAAAwUCWNdZLqTA6SRjtbSVkxZhsL6XitH7iNF9Hxefm5m7btm3VqlWfffZZ4+PAprrwBkwu/H1GiDEWkd6+JfmRl4GjCCFCppANGGfat4mdYAAAwMW1DVO3bt26deu2YsWKI0eOuBW5dOENmFx4mgjrTutr8/WjEoaxU533RIgQUoy73XhgC2OHOYUAAJa4tmFCCC1dunT48OHjxo1766233IpcXBswxcTEeNyAqRFrkftdJw69I2g7Y6yyPr1zxfu3vMZCdRkhyOOKo40E4bHi5HRr0RFp5ggW4gEAgMZtmObPnz9//nyPRV1+AyYXniZCUkwwdoadLIgQSlRgvZ3R2ZGm5b7Y0Pue8/5AGwAAQCDwtGuUEBGUjX73949tFBtLfWKE0jWeVxy9cQ5kQQAA4AJPEyEpJmg7PbvnDCEhZKfG3q09JgQAAMAJ/iZCykY7aIeDbr5DUkBkhOAzPiRC65nfKYPXx4kAAAD8iqeJUKgQhPZRHSj93eK0sFNjhm8rjlpOHzQd8DCnFQAAQIDwNRHKyeTpUff1/atG3PoqCX6REYIKva84ihBCSDEm23Qgj6GcgY8IAAAAQrxNhC4rD/73gvYyO3UlKLDRwWhbmygojE4ShMdaT//GSlAAAOCTEydOTJw4UaPRxMTEPPbYYwaDwXUcY/zSSy81PbPpboUtFQUb/iZCY6nlmSEL00JS2KnOl4GjLopRM417YZUZAEBgedmP0E1JScmUKVMefvjh0tLSAwcOVFVVLVy4sLH0nXfeOXXqlMcLvRQFFf4mwuo/dL+XHSvRl7FWY98QfKK+9UQo7TfSWVvuqLga8IAAADzmZT9CNy+99NLSpUvvuusuhULRrVu3Tz75pKioqHG33mXLlj3wwANOp4cHOl6Kggp/E2HKbTEikVAsELNWY1YYPlrrwwwKglRNu4+xWQMfEQCAM9uvFiCELuuuXdJdRQhtu1KAEDpSeUJr1WmtDX9UHPfjOc013XQQY/ztt99GR0e7Xq9evbpfv35hYWHvvfee6+T9+/c3XW47Ojr60KFDYvH1D8+lS5dSFPXOO+80r8VLUVBhLxFqtdqZM2eGhobOmjVLq3WfIeCxdPfu3f3791cqlf3799+zZ4/fQ+oX2SeErcEyCKEB4fhYnU9TCeVDbhElpwc6HgAAhxqsBgYxVqfN6rQihBpseoSQ0W5y0E6KoYwOkx/PaS43Nxch1Ljp4KFDhxobiMXFxcePH1+7du1zzz3nOnLt2rWYGPddnxoJhcKcnJxXXnmlqKjI96LgwrDl2WefXbBggdVqXbBgwbJly3wpjY+PX7Nmjd1u//HHHxMSEtwumTp1al5eXkvVlZeXe4/HXGX94diGvSUH2/5W2snkYGRf2W0UaxWyqq6uzmq1ch0Fj5hMJp1Ox3UUPOJ0Oquqqtp37ebNm6dNm+bfeDqu8fMfIVRdXd34Wq/Xu52QlpZ26dKlptd+8803ZWVlTc95/vnnR4wY4eoFdbu8eZEXx48fz8zMdL2urq52OBztfX9twF6LcMOGDQsXLhSLxQsXLly/fr0vpSqVqqGhwWg0GgwGhULR/J4Oh8PWDEVRvsRzcV35VMUto+KHdvB9+U4mQMkKn6bVN2JsLE1zBADwWURERONrpVLpVjps2LB169Y1/lhWVnbfffcJhTcty/XCCy9otdoPP/yw+c29FAUJ9hbdLisrS0pKQgglJSVVVFT4Uvr1118PHjz4kUceQQgdPnzY7RKdTjdnzpzm43EfeeSR5cuXV1VVeY/HyTgOXvjDZNQPjxrU3vfUZr3kyoLLjii7b8//yi/RW1fh+15028Y6OOl0OplMJhLBiqkssVgsDofDbDZzHQhfUBSl1Wp9/J7tpr6+ngnKPRkcDodbPvPo5ZdfHjx4cFRU1O23315RUfH444/PnTu3ae5ECInF4pycnFtuuaX55V6KPKIoypUFXP1MPm7wFBISIpFIfKzCHQutTheZTGaxWBiGMZlMMpnMl9IJEyYsXbq0vLz8mWeemThxotslHewaPft18eWDZQ02fVvfSEe8c5L6xwGn7+fXfPqCfufawMXjR9A1yjLoGmVZ1+sanTZtmuuRU9NE0NLrQ4cOjRo1SqlUxsbGPv7441qttvk5DMMsWbIENesabV7kRRfvGo2NjS0pKUEIlZWVxcXF+VJ66NChxYsXx8TEPPvss4cOHfJvPKSYQA6kszb497beZYX7NnD0TyFzFhry1zrrKgMXEgCAn/Ly8oqLi9HNOwi29HrIkCF79+7V6/VlZWUff/yxRqNpfg5C6O2332Za2K2waVGwYS8Rzpw5Mycnh2GYnJyc7Oxs18GCggIvpZmZmV9++aXRaPzmm2/69evn33hIEVGn115tKPHvbb0bEIZP1jO0z38MZGikYuxtunUfBTIoAADgNfYS4YoVK06ePJmQkFBYWLh8+XLXwfHjx3spzcnJ+eWXX2JiYtatW/fFF1/4Nx5STESJIsckDPfvbb1Ti1CEBF/Qt+FrkXLCXEpbZTkFi64BAEBAsDcKQ6PR5OXluR1sbCl7LE1PT9+/f3+A4okZFVZYX7TxyMYFAx8KUBUeDQjHR2uZnmpf19zDpEDzl0WUrjagUQEAAG91guGIASJSCbJUfbKS+7Bcb1YYPlbH3NW9DZeIU9gOEgAA+IO/S6whhLRWnWt1Ija5EiHLlQIAAGgJfxOhsdRS/5sxRKxhud6B4fhIbbCOnQIAgJt17Q2YXPibCCVhovisqN7hPVmuN1KKpCQuNrY5FRr3bzbuzg1ESAAAHvKyDVNjUZffgMmFv4lQICUNYsPbv3MwMyErDLVpNqGLMKabcf/mQMQDAOAhL9swNRZ1+Q2YXPibCBFC4dLQFSOfZr9e37ehaEqckoEwthefC0RIAACW6S6Yak/om/5nLL2+trDTQjV97XZa7Qm903J9pTdjmbXpa7fTdBeMLdXedBumnJycmJiY8PDwDz74wK2oy2/A5MLfUaMOo7M4v3pNxJp/Dn+S5aqzwnDOebodF8oGTTAf2i5KZLs7FwDgd7pzRmutrekRTQ+FIl6KXImw2NL4uvaYzu1aRbxEICURQsZis0CiaHytO3dT5hOHiTRpHrYrQAjl5uZijF3bMC1ZsmTPnj1isXjBggWLFi1qWuTLBkxjxozJzs5OT0/3sSgI8TcR0k6m/rjhvqf+yn7VWWH4aLumBcqHTK5683H1bY9iIaxtDUDnljwjqqUiSagoekRo4+v0+xNbOjN6eGjT101/9N2YMWOee+65efPmbdmyxa0oISGhvLw8JSWl8ci33347ceLE2NhY149ZWVlPPPHEQw891HzLWC9FwYa/XaOkmKBsdI25jmba0zjriGQlttNMZdt3WCLVYaKENMtpWGUGAOA3ubm5rv3vpk6d6lbU5TdgcuFvi5AUEZSNPlJ5vFdYmohku4HVLxQfr2NujW/zkGLNnAWEXB2IkAAAfOPahqlbt27btm1bsWLFyJEj3YpY3oCJK/xtEWISYwLd3/tu9rMg+nOhtXZcKIiII2SeO/0BAMB306ZN6969O0Jo6dKlw4cPHzdu3FtvveVWlJycnJeX98UXX8THx0+YMCE9Pf3TTz9tfqthw4Y99thjHmvxUhQ8+JsIEUKEiHil4N1qMwfLeML6MgAAbjVuwzR//vy6urqqqqqHHnrIrQh19Q2YXHidCDWp8n8OeyJSFs5+1R1MhJSuBtFsP9oEAIAuideJMP3+xILafbXmOvar7qHG1RZGa2v9TI90P31syF/r14gAAICneJ0IEULh0jAhKWz9PH8jMOofhg+36zEhQkgzZ4GhYIO95IJ/owIAAB7idSKknUy6JlUulHNS+6wk4qcr7ezeJNVhmuyHtd+/xTjs/o0KAAD4hteJsHhr1c/7t52t42bRsjtT8IartKO9T/pkgycJopL0v37v16AAAIB3eJ0Ik2dE/3VCdt+I3pzUniDHqSqcX97+ITMhcxeaf99uv3rWj1EBAADf8DoRIoQ2X9x2uOIYV7XfmUL8eLn9gz8JhTrs4ZcEUQl+DAkAAPiGvyvLIIQYihkZM1Qk4mCwjMtfUoh/H3PYKFJMtvMOosQefo0IAAB4h9eJsHhbtYk2a8ZK5UIZJwHEyFBGCN5exsxIDOrtmwEAHdTQ0HD48GGuo+gELlzgYDA8rxMhKSL0dUazoSFWEc1VDK7e0RmJ7W0S/qkhb5W0zzBRUrBvdwIADw0ZMiQ8PHz+/PlcB9I59OnTh+UaeZ0ICRERIQjv3vJuWyyYm0IsP+KwOElpx/4pxN371uX8O3Lx+6SGg4VyAABeRERE5Obmch0FaBGvB8uQYqK8vvK7wnWtnxowERI0IAxvLe3oemmS9IGKMbfVfvEiY2/vcjUAAMBLfE+EEcLwezPmcBvGnSnEj5f9sCKtcuJcUVxq/fdvo+Be3xYAAIIKvxOhiDCazXtLON7ndk434tdS2uT0w600cxZQuhrDzjV+uBcAAPADrxOhIl4aOValkWi4DSNEjIZF4rxiP+wmgYWisAdfIJQhHb8VAADwBK8ToVApiOsV2V2TzHUgfusdRQiR6jD50MktFjOMo+KqXyoCAICugdeJECFUoi//4sR3XEeBbksmdpbTBkfAK9JvX6394d2AVwMAAJ0HrxMhZadFJ2WLBj3CdSBII0LDIvGOMn/uteusq3AbNWO7eNK0fzNtMdkunPBjRQAA0KnxOhESJHbIbe//8RnXgSCE0KQ4YkcHFuBurv67t81HCxp/pI26+u9Whty9RDnpTvMf+X6sCAAAOjVeT6jHJI7Pivqr+XauA0EIoVvi8F92+rNFqJ75oPa7ldLMkVgoQgghgVCT/aik5wBEU/Iht/ixIgAA6NR43SJ0qTBWch0CQghlhmK9nblq8FujUJySIYxPNe65vp4FIZFLs8YghBBBIgxLmwIAwHV8T4QV++qPl57mOgqEEMIIjY8ldvq1d1Sd/bAhfx1l0PrxngAA0MXwPRFW7tb+tdsdXEdx3S1x2L+PCQVhMbJBExo2fNq8iKqvhieFAACAIBESIuLfu96xUXauA0EIoclxeEcZTft1fTTV5LuFCWkeCkhSt/5j2mxoeoxxOihdjT+rBwCAoMf3REiKiWWDnhCTIq4DQQihODkOE+MT9f7MhIRcpRzvoclLqsOkmSOMezc1PWi7cLzh5y/8WDsAAAQ/SITE3ssHTQ4z14Fcd0sc3l7G0pLZyglzjXt/ZuzWxiOibr2tRUdok56dAAAAIBjwPhGKiBAihMDB8nuYFOfnafVeCCLjxd0yqv/zpOngVtcRQiKX9BpoPrabnQAAACAYBEsC4IpQKUhUxotIIdeBXDchljhYzVj8sROFL5S33CkbPEk2cELjEdnQKaaDv7JUPQAABAG+J8LUubE/0bkl+nKuA7lOKUR9Q/H+KpZ6R0WJPZUT5lyfcY8QQkjSI4s26x1ll9gJAAAAOMf3RIgQWjTokWR1AtdR3HBLHN5RzlLvqAcYywdPMv2+nbMAAACAXZAI0Q9n1hfVXeA6ihsmxRKsjZfxSDH2dtWUezgMAAAA2MT3RFj9h25wxZCgahEOi8SX9UyNtfUzA4SQKQmZkrPqAQCAXXxPhJGDNMJBjNFu4jqQGwQEGh1N7OKwdxQAAPiE74kQIVSsL6s213IdxU0msTibsCW0sYG2GLmNAQAAWACJEI1OGNY7vCfXUdyEzWn1LWn45WvT/jxuYwAAABbwPRHqr5h3fnJo88XgmjnXS4MZhE5rucyF8iGTTYe2ue1xDwAAXQ/fEyFCKMIRMSN1CtdRuLunO151nsvHhKLkdESQ5iO77CUXnDVlHEYCAAABxfdESIoIs9n6R8VxrgNx90AP4ruLtIPTETPKcbcbd2/QrfnAWLCByzgAACCQBFwHwDFSTCAHVomDbrZAmhqnqfEvJXR2EmdfVuTDp8qHT3U7qNvwiXzYrcKYZO/XOsouCyLjm65ZAwAAwYnvLUJCTBAOnKiK4zoQDx7oQXx1Puge0YmS0ms+WmY9+0dLJ9AmvW7th1XvLLSc3MdmYAAA0D58T4SkiHDYnKvPBmPX350pxJ5KutLCdRw3kw0YF/7wi9of3jXu3+xeRlPGfZsqX38UEUToPc8wTgcXAQIAQNvwvmtURMSPiRjZ9y6uA/FALkC3JRHfXaSf7htc31dEyb0inni37vMVhp1rFKNmKSfMcR03bvyCri2LWPBGqx2nAAAQPPieCBFGeJQj5+T3D2YG4+qaD/QgHtlLBVsiRAgJwqIjn/k/SleDMdl4UD51nkSl4TAqAABoh6D7hGVftDxyVpr7kJAgMToaY4wOVQfdk0KEECYFgrAYMjTyxhGxlMN4AACgfSARIuM167WaEq6jaNHfUomvOJ1Q2BGmA79YTuzlOgoAAPAGEiEyFlvPVwfvPrT3peG1V2gzW3vW+xeh0Bh353IdBQAAeAOJECWOi7xr0Gyuo2hRnBwPicAbrnbKRqG0z1BnXaWj4irXgQAAQIsgESKE0LKCl+stWq6jaNEDPTpt7yhByodONh3cynUcAADQIkiEyFRh/Vf/f4ZKQ7gOpEXZScSxOqbCzHUc7SIfMc38Rz5jt3EdCAAAeMZeItRqtTNnzgwNDZ01a5ZW69788ljqdDrnz58fERExcuTIsrJArftctqv2t4NHrzYE73gZMYluiSO2lnbKRiGpiRAl9YQhMwCAoMVeInzzzTeTkpIqKioSExNXrlzpS+l7772n1+uvXbs2YsSIF198MUCBkSJCQ6jVwbfcaFNTE/CWkmCcROEL9ayHxd0zXa+tZw4btq/WrfvQUXaZ26gAAMAFM2xtONezZ8+ff/45PT29qKgoO1Ia9ZUAACAASURBVDv73LlzrZYOGDDgq6++6tevn8FgOH/+/MCBA5teMmnSpD59+mRmZrpV1KtXr6ysrMrKyujoaF8CK91Sy8iYkBEyhVDesbcYQDVWnLkRF8+hhcHama3VamUymVgs9n6aZdc62mbBIon1tzxxxnDZ5LuxLKi/ggQts9nscDjUajXXgfAFRVH19fURERFcB8IjtbW1Go1GIPBp4RehUEiSZOvnecLeyjJlZWVJSUkIIVfLz5fSa9eu/fDDD+PHj09JSfnqq6/cLnE4HEePHm1+K5qm09PTrVarxeLTMp0Upoprys4WN4yOHdaO98UOBULJctneMvvwcIrrWDyzWCwYY5purf922HRXKpf0H+/Yva7+nYXSR17B6vDAB9jVWK1Wh8MhEsH+HiyhKMpisfj4qQL8wmKxiMViHxMhSZKdIBEyDIMxdr2gKPdPc4+ler2eYZjCwsKPPvrokUceOXjwYNNL5HL5woULp02b5rE6q9UaEuLT+BezhkolUrpl+NR85NCMZGqfTjAtrZ3/0oHGMIxcLm+1RXhDSAi660ln3Z2CsBjXAcqgNe76iZAqSE2EdMBYTPJ+/T+vxGIxtAjZRFEUTdM+fqoAv3A6nSEhIT4mwo5gr6MtNja2pKQEIVRWVhYX577tkcfSiIiIJ598MiYmZuHChadPnw5QYKSIqNNrvzjxXYDu7y9T44ktpZ31MWFLGrMgQggTJCFX0zaL6fCO6rfm2y6datu9GEa/9TtDwXo/hwgA6OrYS4QzZ87MyclhGCYnJyc7O9t1sKCgwEvplClTVq1aZbPZPvvss0GDBgUosIiBmt6zu93d+44A3d9fhkbiUhNTbu5qubARIVcpJ85Vz3ggYv7rqmn313/3lm79xz5eS1uMtZ+/aLt4Uj5oQkCDBAB0PewlwhUrVpw8eTIhIaGwsHD58uWug+PHj/dS+vrrr+fn50dFRe3cufOLL74IUGCkmBCIiRPVhQG6v7+QGE2KI7Z2uUahR9LMEdH//Ew2YJwvJzsqrla/s0gQGR8x/3VCcX37C8ZuRWwNBAMAdGrsPYbRaDR5eXluBxvHrHosjY6O3r59Owux0QxdZnAfdBOEpsbjTcXMgz24joMVWCQRJfdq9TTzsd26nz7WzH7cLWs25H1N6WpC714Ce2IAALwL1sH4LLLW2ivytHPSZ3IdSOumJhA7ymhHp5xY3yGO8iv137zhcXkaZ+W1iPmvN287qmc+SEgVtZ+tQK0OZAUA8BskQiQOESZMinxm10s6WwPXsbQiQoJSVfi3oNyeMKCE0YlYIqv5cCllcF+TSDV1njC2W/NLsEAYcucTiCAN+WtZiREA0FlBIkSYxAI5+db4lzTiTjASfWoC3lLCvyYOQYbM/Yek9+Ca958yH95Z++kLjNPR+lUYh96zxFCwwV5yIfAhAgA6K0iE1225tCOYlxttNDWB6LxrrXUIxqpb71VOvlu/Y7V85HQsEPpyEamJ0Nzxd92a/7odp62mhp8/Zxz26z8zDEN1zi0fAQAdBokQIYQurS/vTqSESjRcB9K6IRG4zMyUmXiZCxGSD7kl+p+fS/u0YQ0gWdbY8MdebnrENcqUcdgRcf3v31lTVv7POaZDv/ozVgBAJwGJECGELNV2hUVJo07Q5Uhi104UPE2E7dM4pwIhZD5aUPPRs6op92jmLGhcvEYQGR/++KuGHWtgxgUAPASJECGERCrBxeKrp6rPch2IT6Ym4K63xAwbaKphU47+l28i5r8hazbvXpySQciVllO/cRIaAIBDkAgRQkikFqYIk0cnBO+i203dGk/kl9MGHwaLgKasF044Kosjl3zgcZQpQkg57g7Drp9avQ9DOQ0711INdf4OsG0YUwNdcYXbGADoGiARIoSQSCWoqKr55NgqrgPxSYQEzUggPjzTCTpyg4okrV/4wy8SUkVLJ0gzR9L6evvVIi83cdaU1bz/lPloQc2HS2mTPgBhto5x2A07ftS9vcCW/yMnAfgFQzktpw5wHQUACEEidBGphAqb/OF+f+M6EF+tGEC8f5qCRmHbECTC2OsJhGb241jY4sZGpgO/VL+3WDZ0ctTTH4bMXUhwsZOi5eSBytcetpdcVD32KlV8nqtk3HGmfZuNezZyHQUACEEidJFFiyVxogNlv3MdiK9SVXhyHPHfQmgU+pkkY6gwLsVjkaP8iung1shF7yhGzkAYi3tktZJWAwOTZNi8ZWEPPE9GJ0lmL2gc+Nq50GajfvvqlvqoAWBZp/y/yO9kUeLoCSF6m4HrQNpgxQDig0JoFLJHGNstcvH7gqgEt+OMw07pam78aLcF9PGhJGOoqFtv12tBz4FeenqDmX7b/6T9Rmpuf4zrQABAyGMiPHv27ODBg7/99luE0DPPPKNQKMaPH+/aLLALkwokM1Incx1FG6Sq8JR4aBQGSuP8+pv6Hj01AW3nj1b/58maD5ZUvvpQ2bO3ly//i7bZ/P0OovRae8n5jtzBsOsn/dZg2XHTWVNmPrxDPbXTPIkAXZ6HRPiPf/wjKipq6tSpxcXFn3zyybp160Qi0eLFi9kPjk2WGvvTO1402I1cB9IGL2QR7xdSemgU+pt+yzeG/LWIYRo2f1X76QveJxdKMoaF3f+casYD4Y/8K/bl/8Wt/Dn8kZcaSy0n9tZ+9gJVX93uYGiLsfbT523nj7f7DozNYtjxY9M9kGmTnrFbfbrWYa/54Om6nJf123/w1/Llxn2blBPmNJ3cCfyFaqiznuk0j3iCh4dEeOjQob/97W/h4eGrV6+eOnXqrbfe+uCDDzbuoNtVVR2qf23oC0pRZ+poSlXhW6FRGADS/mNMezfVffkv+5Uz4Y/9u9VngaJuGeKUPoLI+OZbPknSB4nT+le/94Tt/DHvN2EoJ6Wvdz9ot9V9/qI4tZ9y4l88XuUovVT78XPe72z6fbs4tZ9s8MTGI+Y/dvrYQDTkr8NShTRrLKJpfz2P1GQ/qhg3+/r9d65x1lX65bYAIcTYrfXfv03p3demB955+MsWCAQYY4TQ/v37x44dixCSSqV2u735mV1J8ozovIpfO8Vyo029kEW8d5rSdfF/HLYJY5KFcd0JZUj4/NcJuaojt8JiqXL8HaH3PVf//duGnWvdGpfOugrjvs3a1e9Vv/OP8n/e0bDxxu7TjoqrpkPb6la9QobFaG57tKX7C2KS7KUXmz6kdMcwxt25ynG3Nz0mzRpnOrTNWdfKHpzOukrjntyQOfNlWWNVU+5pvKGj4qr3C1tBEI1r+jhryqyFhzxUXVPmqLzWoVoab1XVyf6n7ghBRJx8+NSGTYHaxryr8pAIhw4dumnTprNnz+bn58+dO9fhcKxevbpfv37sB8eyAVGZ4dJQrqNom1QVnp5AfAiNQn8LvfeZkDufaPy87iBx976RT31gObW/btVriKZcBw3bV9e895Sj5IIoIU1zx4LYV9aE3ru08RLGYbNdOE4oNKF3LfbSJMWkQJo50nxsT0snWE4fJOSqxvE1LqQqRDn+joaNOd7Dbticoxx/BxkS2fQgbTbUfLiU0ra/s7cpSa9B1qIjzY8b8tfVf/36jVXRO0C3/mM+9BbSZkPdFy8hhlFNvst24aTtciHXEXUmHhLhypUrd+zY0bt37zvvvDMyMnLBggX5+flvvfUW+8GxyWmiJBapg+58D9yWZxH/PUPV+vTEB/iqgw3B5kh1WMTCt6T9RiKCdB2Rj54V8/L/Qu5aLB85XZScjkXipueLEnuG3rs09O4ljee3RJY11nJsd0uljtILyvF3ND+uGHu7o+S87fJpL3fW3PaYotm1hFylGDWjHUNvaKtJ+8O7brt8iHtk2S+fdttUi9JrLSf2kaHRDZu+bGstzclHz2rYlNPl92e2nDqABEKEMRZJNNmP6H76yL9vmf3tWXQbPmGMLO0R6yERZmZmlpSUlJaWfv755wihN998s6ysbNiwzrH8WLvVHG84/2txUd1FrgNps1QVvrs7sfwPiutAQCuwQCgbMK7xR0Ii88tMRHFqJqWrcdZ67udUTZ0n7T/aQzBCkWrGAw0bPvMyFIhUh3lsEyvGz7GeOeyoKvY9SMuJfVVvPE7IVW43JKQKQUw3+8352LgnVzZoQujfnpEPn+p7FS2R9hlGSOWmP3Z2/FbBzHJsj6z/GNdradYYQqYyHvjFXzc3H9lVv+pVf93NF5ZTv9nOH8dsrVnh+em3QCCIi4tzPSkMCQkhyVa+k3YBIpUgnA4fHjeI60Da418Dyc0lzOEaWImblwhC2m+05XiLvaMtkWWNFcYkNR+h03qFEpliwhx93te+nOysq6z9bIV+y7eh85apZz3c/ARJ+kDr2T9u/Mww1tO/KcbNJiRyYUxyW2PzSD3zIf2Wb/3S0coOa9GRNs1GpU16+7Vzkt5DGo+E3vWULGuMX4KhTXr9tv85yq/e9M8USAzlbNj0pTr7EdbWi4B5hNeJVEJdbUNnWW7UjUqIXh5IPPEbBZmQn5ST7pQNbfssWIxD7l5CqsPcDjtry40F671fqhg101583l58zvtp5iP51e8uEnfvE/nMR+KUDI/nSDNHkJqIplFFLf1YEBrVevx/spdcaL7UnO3Ccd26j1yvRd16ixJSjXsDuKKbs6bM0vKTWh8Zdv1kOvALQsh28aR+y7e+X2g5uV+SPrBp7zoZGumv7n1Crop+9hPN7Md1uZ+x00Fq2p8nCIuWpA9koS4XmEd4nUgtEFhEj2fdz3Ug7XR/GkEj9N3FLv4gBHhEqsNIZYjbQeP+zd4XEHdHU/aSC8Y9P9etepVp7fESFoo0sx9nWhtMLopPi1zyX+XEv3gZdiSMSVaMve2mQzc/FrUWHTG0nJid1aV1n63Qrf+k6UGGcup++j9xz6zGI+rpD9gueXsg2m5UfbX2h/9Uv/+Udt2HtNXU7vtYzx01FqyX9B6MEFJOnGs5fbD5eFf71SLd2g+bX2s+tkfqp/afZwQpyRgqCI007dsUwFoQQgjRFqNh+2qPnQeBA/MIrxOpBHaDc8flFgcdBDkCo49GkMt+pxs6TfcP8D/b5dO2i6cYysnYbfot3xIKtS9X0RZjzYdLy/45R/u/dxyV15RjbnPPTJ5IM0eKU/t6P0cQldCmtp1HwphkY/5a28VTzYtok772sxWqmQ+G3rOk6XHj3o1kSKS074imkTRd6MBfGJul+v3FpDo0+vkvJb0Hm/Ztbt99nHUV2u/eCp23zNU4JqQK5YQ5DXmrmp5Dmw1137wm6e3h8Y1i1AxJr8HNj1OG9q9JZNy/2V5807Wa2x4zH9sd6M2rjfs2SfoO91evuI88fE1rOo9w8uTJiB/zCDGBSRmBbf4ZLs+JgeF4Sjx+7Tj15pCu/0wXeOSsKTft3+ysLiXDosUpGYLwmNavQYiQyJWT7hQlpxMSeTsqpa1m5HQ0Jl3ToW2YIGSDJ7X5Rgxj2LlGMfZ2tw1ASHVY6L3P1q16VT39vqbDZxino+7Lf8myxsqH3NL0JvbSC4btqyOf/E873ktbYbE0evlXroCVE+a27ykaY7fWffmycsrd4u43vlgoRs+q3POzvficKLEnQggxTP33b8v6j5FkDHP9SOnrG7u1pZkjPd7ZWXmtYWNO5JIP2hqS+fftxl0/RSx4s+lBQVRC5BP/CfRa88oJc9l/muvhc981j7Bv3775+fmff/45f+YR9luQIgrtwSAGIw52FfCLNwaTfX5yPNiT6KnurG8BdIR86GT50Mm02Wi7eEIQEefrZRh35HmM/cqZ+m/eIFSh4u59GKfDfq0o/MEVbbsFw+h+/lySlmk+vkc56c7m5eIe/SOfeKfuy5ft14o0dyzAQhFiGO0P75LqcNW0eTcFU3yu5r/PKMbNbsPbbxqIzeKsr3LWVVJ1lc76SsZqVs96uPnDNtqkbzzYmLaFMcnta8c0bPxCFJ+qGDWz6UEsFKluvbdhU44rGxny19Fmo2r6/a5S26XT2tXvRj79ESGRebmzuHsm1VDjrKtousBeq+zF53Qbv4z4x0q3KaQIeV5ut5W7XTmDEHKbydoU47A7q0tpi8nVwYBJgb/m7/rOQ30rV66cMmXKd99999BDD0VGRj766KP5+fm5ubksR8Y+aaT4qZ0vvDLmOZnQfaGsziJSiv7Zn3zmEL1xMjQK+YuQKVpqIgSCpNeg2NfWOsqv2C6dorTVkYvf9/7p7AHGtosnLcd2e3kyJIiIi1z8Xv3q/xh2rlHdei9CSNy9r2zwJLePZlFSeuST7wkiW8yCdV+/Rio08lEzhFGJbkWOymvV/3lSEBJJhkULwqIFoVGIIHGz92I5fVC37qPo5z7HIomP78928ZSj/LJiTLbntxad1HReTSP5kEmERIYYxnbljHH3+sin/tuYIcSpfSXpA3Vr3g+d909vFROENHOk5fjelpboa47Sa+tyXgn565PNfz/tQBt1datexQIhqQ5TTpwr6T208d/LWV9lPpJvObrbWVsuCI8Vd+/bak974GDGU4ev0+msqqqKjY3FGGu1WpVKFYQzKKZNm7Zw4cJp06Z5LK2oqIiJacOXoC7DSqHo7x2X7xSGils/2Y/q6+vlcrlYzG6tPGY2mx0Oh1rt01PA4NeQt8pyZFf08pxWFhBgGIamOtJioBrqTAd+MR3cKoiMV4ycIek7vOndaKuppf5hiqLq6uqU1Zd1P74f/ti/hfGpPtborC6t+fAZhqKilnxIhjZrY/nAWngQkUK3VjvjsFf/5wlCphR376tqeSsP28VTutxPo572MMSmOYZy1nz4rCR9wI0V9TzRb/1OGJMk7edhfurNt2NqP1shik9VTf2b5cQ+06Ffwx560dWAthzfq133oaz/aNnACaKk9JamSdTU1ISEhAgEAW8gwjzCG+rPGH7evOOKzj8rHHJFQqIx0cS2Uhg+CjoTSa9BinGzW11GB2HcwX4zUh2mmvq36BVfK0bOMO7bVL5stv3ajbG1LT4lZRjDth+oE3tazYLO6tKa/1vW9Aht0quzH1WMu13700fti1mSMax53zUWisLue85efF6UmOblWnH3PrS+3llb3rzIfrXIbToEY7NKemapJt/tPR5xjyzdhk9pcyt79dAWoyA0SjX1XkQQ0qwx4Y+/2tiNLMkYGvOv7zVzFoq69Q6GzaU9R7Bp06bRo0eHh4eHhoaOHj06Ly+P5bA4oUyQDhySEaOI5jqQjpqWgH8pgSmFoDMRJ/eSD5vCWnWYFEj7j45YuDL6ha9FSek+XcJQVP7qVtuCgog4Wq9tutmIqFtv2cDxyglzqbpKy4m9TU+mjbr2xX+9rqiE0LuXiHt6fb6LsWzILY5K92WALMf21H7yfMXzf6n9/EXj3o2urEbIFKpb7231QaA4JUPab5Ruw8feTyNkSs3chR6/3GChiP0HgV54SIRr166dPXv26NGjc3NzXRkxOzt7/fpWJth2AUKlQCgXNNjcZ+Z2OtMT8dZSGmbXg86EIH1/5OZHpMp9/qVnGCum3Cta8G7rPaIYKyfO1e9Y436YFGj+ssipvbFPiO3CiZqPlqGOkfYfjQVC7+eoZzwg7XPTGpm0xajL/TT88VejV3wjHzzJUXbZx/0pb9xz+gP2q0WWU7+1OeKg5CEnv/baa0uXLn311esry40cOZKm6VdffXX27NnsxsaBc/UXlSJFlDyi9VODWIIcR8vw4RpmWCSMHQXAf3xL1dIB4xp++Ub7v3fko2Zcn/yAEEJInJJxY3kdhmnYlKOcfFcgwmwdg9SzHhIlpyOEpP1He1yN1jssEofe/VTdqtfEKRnNR9Xazh8Xp/UL9EQLP/LQIjx//vyoUaOaHhk7duy5c62spdQFUDY69rfErCjORi750fQEnFcCjwkB4AAmBcpxs22XC71MWrCcOsDQVOMy2SwjZArZwAkdvImoW4Z8+FRH+ZWmBxnKadi5Rrv2v51oZVfkMREmJSUVFt60l9Xp06eTkpLYCokzpIioOqz9/Ng3XAfiB9MTiLxi6BsFgBvy4beGP/bvllb7pI0NDXlfq2c8wFqbiXHYTfv9P9RDdeu94rQ/p5gzjPnIrqrXH7FdPBX+6Mtu24oFOQ9do48++ugLL7wQFRU1ffp0hFBeXt7LL7/873//m/XYWIeRUCG8L4Wjzgq/Gh6Fi41MmYmJk3ea3gkAugwskniZ0a9d9yGpCmFzUWksEOq3/yBOzaQaakXJvf2epWyXTunWf4KFwpC/PsXhdMB285AIFy1a5HQ6Fy9ePG/ePIRQWFjYihUrFi1axHpsHCCVREHhgckjxnIdSEeRGE2OJ34pYR5Jd0+Ep+qZvqGQHQHgjHrGg7TZwGqVGEv7jdZv/8FadCTq6Y9IfydCxulQ3XpP08VdOxcPXaMEQTz99NM1NTVVVVVVVVU1NTXPPPMMEQRTPVggUpIyh4LrKPxjWgLeUureO/rDJXr5EXh2CACXBOExosQeLFcqyxpj/iNfNfluUhPu95tLeg7ovFkQeWwRumCMIyPbswhCpyYNkaiIeK6j8I9b44mFBxw2ihT/OY2nzMQ8eZBy0IhiSBLahADwiSgpXdpvtNuKpsDFp3Zebm4u7jwDYTtClSzLLd5sddq4DsQPwiWotwbvrbzeKGQQemQftSiDjJXhE3UwjgYAnsE4dN6zwbCMSxCCX8pNIgdpnrjnIYmgM4138mJ6ItE4ieKjM7TOhpb1I8bF4IIKSIQA8E5QLeYSVCARult16odrDe4bQ3dS0xLwpmIGIXRJz/z7GLVqLEliNDYG766ERAgAANdBIrwZg26NmhSt6Oie2kGifxi2UuisjrmngPrXALKHGiOExsUQeypgATYAALgOEuFNnGaqcqtOZ+3QSrjBAyM0LQHP3kGFiNBjva7/W0dIULwcH4fHhAAAgBBqHDVaVFTk5aTS0lJWguGeQE5aJjZUmx1R8i4yYnZaAl5/hd45TdB0sJPrMeHAcF4MgAIAAO+uJ8JevXpxG0fwGB43iOsQ/GlSLPH5aBQruynnjY3BX1+gl/SF/gAAAPiza5TxAbeBsubgxT9yjvzAdRR+oxCi25PdE97YGGJfJQOPCQEAAMEzwubU+yKzhdO5jiKw4DEhAAA0gkTojlQQB88f4TqKgIPZhAAA4AKJ0J1YLQylQ7mOIuDGxuDdkAgBAAASYXMSjUhlV3eNVda8GBtD7K2E2YQAAACJsBmxWlhWUVlhrOQ6kMCCx4QAAOACidCdNFKsMWm6aZK4DiTgxsXgXdA7CgDgPUiE7sQaITPT8l3hOq4DCbhxMXh3BexNCADgO1iM3IP+/TMG4kyuowi4cbHEw3spikGwNyEAgM+gRegBgYndxfu5jiLgwsQoQYGPwWNCAAC/QYvQA3OJ3XEUoWSu4wi8cTH4x0s0iQm1CCGEVEKsFKLGHe0BAIAPIBF6II8UT5g0gmIoEnfxnDA9gXj+Dyq/gtLZEEKozsZkJxFfj+3i7xoAAJqCROiBQEp+dObLMYkj+kZ08bXIp8TjKfE3/gbqbCj1R4fOTmpEHAYFAACsgmeEni0Y+FCXz4LNhYnRhFhi7WUYSgoA4BFIhJ4d+6Voc8FOrqPgwAM9iK/OQyIEAPAIJELP5A55qiWV6yg4cGs8vmZEZ3QwlBQAwBcsJUKtVjtz5szQ0NBZs2ZptVrfS0+fPi2Xy9kJsilNnKKh1MB+vZwTEOhvaXgVNAoBALzBUiJ88803k5KSKioqEhMTV65c6WNpQ0PD/fffbzab2QmyKVmsxFBhoRk+5oMHexDfXKAdfHzrAAA+YikRbtiwYeHChWKxeOHChevXr/ellGGY+++/f9myZexE6EYWKZGZ5Iji45orPdQ4VYV/KYFMCADgBcwwbDwNUigUNTU1UqnUYrFERUXp9fpWS994443a2tq3334bY89Bjh071mAwREREuB2fPn36vffeW1VVFRUV1ZGYj35wkZhs75/euyM36aS+uyrcWiH4brjF90u0Wq1MJhOLxYGLCjRlsVgcDodKpeI6EL6gKEqr1YaHh3MdCI/U1tZqNBqBwKdpfgqFQiRq58QvluYRMgyDMXa9oCiq1dJdu3Zt3bp1+/btXu4pEommT58+YMAAt+MpKSlyuVwmk3Xw4WLa6ERVrEwm5+Mn+z090EuFhJFUREl8/Z5ks9nkcjkkQtZgjB0OBydP0PmJoijXHznXgfCIxWKRy+U+JkIfT/N8bbuvbJPY2NiSkpK0tLSysrK4uLhWS3fu3Ll79+7G9I4x3rt376hRo5peJRQKhw8fPm3aNI81ikSiDn4oE4Opo/XHJ4rHdOQmnZRYjG5LotYU46f7+tp5Lv5TQAMDjSiKIggCfuGsoSiq458qoE1cv/COZDgfsfSMcObMmTk5OQzD5OTkZGdnuw4WFBS0VPrKK68wf0IIMQzjlgVZIBfK4pQxLFcaPB7oQXxRBI8JAQBdH0uJcMWKFSdPnkxISCgsLFy+fLnr4Pjx472Uci5UEiKtlnEdBWdGRWMGoYPVMKEQANDFsdQ1qtFo8vLy3A42DoHxWNr8NPYdKDgekxYhEvBx5U2M0OI+xO3bncuzyEfTCSEsvQAA6KLg461lGN319+n8zIIuj/ci8qcLdlcwaWuc31ygoW0IAOiSIBF6s6bo570lB7mOgku9NHjNRPLLMeT7hfSIjc6zsPQaAKDLgUTozdToSf1RJtdRcG9iLD6cLchOIh7d5z71BQAAOjtIhN7oygyn1l3iOoqgQGC0NJMwOVDuNRhKCgDoUiAReiOMIulqroMIGgRGrw8mn/0dliEFAHQpkAi9iQ6PEIqE9gYH14EEiynxOFmBPof5hQCALgQSYSvKxeW1JQ1cRxFE3hpKvnyM0sN3AwBAVwGJsBX9M3rRNVwHEUwyQ/Gt8cTKEzBqBgDQRUAibMVVcXHx1XKuowgurw4iPjlLl5hgKgUAoCuARNiKjBHdh0T1AQAAIABJREFU+9zVjesogkucHD+aTrx0hEYIWZxoaynzxG/U0G3yf53ATnh6CADobCARtkIjVxUbyriOIugs60/+UkJP3uKM+t7xxgkqRoY/GGj9oxZN+MVZCi1FAECnwtJao52XjbKfqD7dO6QnIeDjbvUtUQnRl2MEFiezdiKhFiGEUH099XMC8/45YnCu84sxgukJ8OsCAHQO0CJshVKk+Gv32WdzrnEdSNCZloDv6HY9C7oQGC3rR6ybJFiwn3r6EAXTDQEAnQIkwtZtuJpXMRkSoa9GRuGjtwsOVDHfXoRMCADoBKBrtHVz0mdyHUInEypGLw8kFx+kHuhBQA8pACDIQYuwdQxi3v39Y2OlmXbCMBBfTYrDJEb55fAbAwAEO0iErcMI395j2pUN1dqzBq5j6Uz+kUG8dxrm3QMAgh0kQp+oxSrUw157AtZaa4N7U4kjtUwRbGEIAAhukAh9Um2ubUjUac8YKTsMAPGVmESP9CQ+PAO/MQBAUINE6JP0sLSRaYPliVJtkZHrWDqTBb3JHy7RdTau4wAAgJZBIvTVq/v/Q6Yztcehd7QNIqVoRiLx5TloFAIAghckQl8tH/lUj8GJpjILgmdebfF0X+K/hbCXLwAgeEEi9FWlqfqbS6sHLuuBYGZcW/QNxd1VaP1VyIQAgCAFidBXIRLN1JRJkAXb4ck+xDunIBECAIIUJEJfiUmR2WmpMlU7rRQNY0fbYmYi0WBH667ALw0AEIwgEbZBqb7c6DCX5ddaau1cx9KZkBitmUguOEAVauH5KgAg6MBao20wNnEExVDkNJLrQDqffqH43aHk7B3UoWyBRtT6+QAAwBpoEbaBnbI/teMFBoaNtss9qcSUeDyvgKLh9wcACCaQCNtARIrev+U1jLBd72y4ZOI6nM7n3aGk3sG8ehweFgIAgggkwrb5veLo1sv5Np3j4poyaBm2lYBAP04QfHGOziuB3x0AIFhAImybtJDuoxOGKROlCGNDiYXrcDqfKCn6cQL50B7nqXrIhQCAoACJsG1CJOrC2iKzwxI5QF1zRMd1OJ3SsEj8fyPJKVudsDEFACAYQCJss2pTrYN2RA4OqTnWwFDwUd4es5OJNwaTU7ZSVwzwCwQAcAwSYZvNSJ0sEUjEIUJphEh7DjajaKd5acTSTGLyFqrcDLkQAMAlSIRtVmao+M/hTxBCMSNDHUYn1+F0Ygt6E/N7ExPyqCp42AoA4A5MqG+zOGXMsmGLEEIRAzRcx9LpLe5D1FmZqVudayaSqSpYyBUAwAFoEbbH1sv5BcX7Xa/tBmftieubFDqMTks17ELbNq8MIu/vQYzY6Hz1OKzhCgDgACTC9hgeN2h0wjDXa4wRKbr+a9RfNV/+uZK7uDqrRRnE8dmC43VMn5+c+eXwyBAAwCpIhO2hFqt2XNlNMRRCSKgQhPRSuo6HpCtNZRZTmZXT6DqlWBleO5F8YzBx327qoT3USZhlCABgCyTCdqIZ2klTbgcJAY4dE15WUMtJSF3A7GSicI4gQYFmbqMG5To/PEPXQ08zACDAIBG209Tuk+yUh82YYkaEaosMNq2D/ZC6BpUQvTSAvHKn4PXB5G9VTPcfHffvpkwwOBcAEDCQCNupsLZoXdGm5sdJCRE1NKRsNzQKO4TA6JY4/P148spfhSRGk35xQtMQABAgkAjbKSM8/YHMuzwWxY4Jt1TbYEluv9CI0BdjyDHReMxmZ5nJ/Xe6u4J57zTthLGmAIAOgETYft+eXnOk8kTz4yKVIOPRZAST4vwEI/TmEPK+NGL0Zup8w/VcuLOcGbvZ+cg+auM1etRmZ+NxAABoK5hQ33539JwpE0p9PNlaa7+0vjx6RGhYH1VAo+qqnskkwiVofB71r4HEV+fpeht6vj9xV3eCwOiTs/SoTc4VA8gFvQn4+gEAaCtoEbafkBTmnv+lpVJrvb3hogkhRDuZ4l+rT7x/SRohvry+wml1H2sKfPRAD+KjkcQnZ+mFvYnCOwT3phIkRhihv/ci9s8U/O8iPWWLs7RZ9ykAAHgHLcL2ExCkQiRnEIM9dYNSNhoTCCF0/n+liGb6L0kVa4SEEJvLraoUOduxdhW3JRG3JXn49pamxntnCt48QQ/Mda4cQt6XBt/wAAC+gkTYfhjhcYmjDpUfGRY7qHmpPEbiepF2Zxwpvv65nDwjmr34eIbE6Ln+xKwkfP9u6sfL9OejyDg5dJQCAFoHX5w75Jq+pNZchxD68Wxu8/n1Lo1ZELCgTwg+OEswNpoYkOv8rAiGkwJuWOvttSf0frkVZevcf8bGUoup3NtiW1QQLDEMn9Ed0l2TPCN1CkIoWh4pIMi1RRs9jiN1oz1rKN9bF/joeEpAoGf7EXlTBB8U0v887OsT2WD4vzFwaCfD0PD0lCV2vfPkB5cv/VTuNHd0QIC1zn45t+L6D53wH9Cud57NKfay2BZlp4+tvFh/xsBmVM1BIvSPsYkjEELjEkcMiM5s9WRlsix6eGi767LW2h0GWGqlFYPCccF0wedFtI/DZyp/q3cNbuqCGHRhdWnN0Qau4+ALkUrQ5+/dwjNVJdurWz3ZpnUYrrW4IackTJR2ZxxyJYx3LmqLOtlO4NoiQ0SWuv6Mwd7CRxYpInr+LeHij2VVh7WNB2kHfXZVMZuJHxKhP0XIwjdd+NXkMHs/TSAlCUH7H1/ZDc6GK61UARBC4RL0SDrxxgmfmnoOA9VVm+mlBbWGYkvxtuou2Sg0FFsYipv35VYvQzN2/fWPe1mUOPHWyOo/dNZaDwsx1p5oaPxjo52MXe9hRUa3LgpSRKTcFnNxbdnlDRW0M7Dvl3YyunPGulP6jq+QFTUkJHlmdMQAdeX+evcyBl1cV07ZaWWStO+CbiW/1pTurHGVEEIidU4sm1OxIRH6WbgsjMC+/lZP/d+VC6vLtEXGNn1CqbrJwjNViEHmKlh2rBVPZ5KrL9HXjK3/ehMmR+gvm6z1Hj62Akp3PuDf8SMHavotSpGEiqoP6wJdV+AYSy0e/zcxlVvZ3AS05mjD0ZUXf3+paP8zhQeePXP45XOFn111FVlr7U2/SwkVgrhx4Vc3u+/LZii2XPqpQpkoc/0ojRCF9VUhhBCDLvxY5nqcZqmxHX3jglvHjzpVnvV0qqXWfnlDBQqkmmO6st21IemKuDHh7b4J7biRyGNHh1X8Vu+evzGKHR3m2sNOGinOXJRSc6zh8oYKV0NQqGB1ICf50ksvsVmfH33//fdDhgxJS0vzWGo0GpVKJcshIYTilLFVpmq12KdZ8yE9lU4TVbG//tov1dY6uyJB6n1kjdNKEYLrJ5irbac+uhI5UBMkg3EsFotIJBIIgmscskyAtHaUX8FMT2jlt0SQ2GGkTCUWTU8FO7EhhOwNjisbqyIHa9pxrcPhoByURCpp9UxSTJAiQhIuupJbGTMyFHfGVQcYdP5/pde2VFNWWhIuEkhIhmYwxgghRbxUqBQ4TNS5b0rCMtWBeHd2g7PhokkSLrRYLJpIdUgvRdzY8ORpUQmTI8L7qRWJMrFaiBASygWaHjf98SgSZYSAkEWJb9xK7yz85Grq3DhNWrM5VBjRdvrcd6WIZq5srEy8JbL5PCtCSIT1UV3LqxLKycZx6X7GoAv/K0u8NVIaKW53m4yy0ue+LYnI0rjuIJQLlAlSSajQ9U/WqGm2I8VExAB11e/a0AxVY4eZ2WyWSqUEEfCPuKD4DO1KjHZj7oUWZ9m7EakEsWPC+i1K6b+4u0BKnvjPJYexxYd/Np3j6BsXmva9xIwIvfRTubcKGKS7YKr8rZ6rvqNg8HQm+aPXRqFN56g5qkMIxYwKrTqso1kcNSNSC/v8Pbl919rqHBc+qfLSl2DXO0t33ejaUiXLQjOUNl0n2xeFstIIIYRRn7936/NoksNMHXv7YuHn146uvNi081AoJwkhLt7a+jO5dhBICKfl+rAXkUogj5GIVAJMYkxgcYhQmdji8lKEAIdl3vhOTDuZs6uKo0eEhmZ4/o4eMUDT78mU+jOGiP7qqKEhHs8hxUT6fQnVf+gC9AhNd96IMNKkXc/oNq3DYWrzkB9SQvR+KKlpHlWnypt+R/H4dyuQkL0fSuLkmz20CP1MLBAPjR3Y1qsEUlLTQxHSQyEJE3k8gaGZsznFkYNCQtJvfOVUdZOV7KgVyDx/N6w90XD602uGq2ZrvaM0v1YaLpaGe765XwRnixAhJBMgnfdGIYMoKy0JEwmkpP6yiaaQIv7/27vvwCjK9HHgzzsz21s2bdN7QgglQOhVREIHEe/wBAunIod45/c8UPFA7/SsPz3LqSgethNUUKoIShMpQgihppHeNpvN7mazfXdm3t8fiyGEJARIdlPez1+bnZ3dZyfvzjNvnY6unOflNLgZKd0JsV7NcKHx0qZqeYRYqBI0f95tYWkRhQW86ZxVIGWkYa3XDLyNTiL1lX3V/RU3F6ejzmU4b6k9bgpMU3jPbnWnGmQRXVMjaYZnccHnlcFDVN6ahEDBBPZXRIwPAgxho9UtfiyqJFnxlhplvEwUILj2raoO6I0XrQ2FNnOJ3dPIIgoxUrpFBaUFw/lGoYqhGArRSBYhxhg7HA6Z7GZWw8AcRhQq+qaGYqjE+eHt1LQYCR06IiAgWd7Oa4QKJjQjoIu60Iq/qwkbHSiLvPzPrdhTZym3qzvSTILBVGA1XmhUxkkBoP3wSrbWuhs88ujr/NBIjbAHO1p18rPzX93EjtLf8pnL5Gnenu6xsOU/1CEaRU2+qske0SjlnsjSbdqmeqTT6G4agSaLkAxcFjfkr4kDl8UlzAsr2artrIlNPc6Tg+mvi/kyS+uX0N6rEO/jhPnhwYNvYDFYV4OncGNV9suXqg7obzQqW7XTu96e28JW7mtld97NB6YpcjeUF31T3fQvxjwu+e7ycIngMYrqg20PZ0CgjJfeaFTNuRo85XvqTv6j4OJH5Y2lNkWMBGMMADyLm9fGbnoMTmOZvf0aKsWgtIdjW7R2UkJKM0qtiGv51QRyJuGuiMJNVU2/HeNFS9MkPEZMM1KKkVIIgeG8Ofe/5e0cOszj0h21pTtqO2V4tsvkKdxYBQDKeGnyHyKvm8AQ1epaVb5g1zptNc6QYaqmZ6JuD9adMLXTUgUAPIt1J02nXy8q21UrVLZyFeLVWGov3VELAJyT159uCEzzQ0WlLaRG2PmilRFDNINu5R20R4wiFSOQMQCQ8/+Kqg7Wcy4+9f7oaxsNhCqBx8aaci2BA5QAwNo4p8Ht7ZMQyOimJnhJiCh8bKA0VOQ9p9T+apJHSrw/NpfJAzxQwhu7JLr0dXVgf4X33XL/W27MtTp0Ls6CORvPe3hKSLUzLJZ38w2XbNd2GHQdKQNmD+yrwbNjLn9NloejOnxIi0/q8Yk6fKAGH9XhABFEBDKU4AYOhb3W5bFxSXdHlG6rZaR0q5Uk3sMj+ppviuH8+6XKWKlILUA0Kvq6WhYhFgdeVcWRhYtVibKw0YGWckfR5hqKQYoYKaJQ8BAVopDH4xGoqfrj1mt3tGmdmMOMuLXKH4ay73XKeGkrIV3NaXSfebNYGiJKmB8eO1MTNEgpj5J4/2WIQorfruXNRbbcj8slISLxNe0NjSU2UYCwnXN6Q6FVqhHRLcoeBnOxzXjBooi94Swu1YgspXZrlcNbg3Ho3bSQ8laC5dESZbxMGS9TJcmCh6giJgQ19cBV/FgHAE3H0GPj8jaUs3Zu4KNxzSuXN10jZCR0cLoKAORREup6h/2GlO3S0SK61RrwzbHXueTRkuYtIrSYdjV4rJWOFt2fXk6Du2hzTfG3NZyTi50eGj8nrJ2eS6GKUfdTAILa40ZEo7bafq+Kx1c1QpIIOx8CtLt4n5t3h0pvcsyVKlHmzYIAEDZKHTUlJGyUuq2mc2WCjHPx3lMwI6Wb98xfFRWFmq6srZWOpkaJwo1VpTtrK/bU1R431Z8xc05eec21tlfDJat32AUASENFjOxyy5IkRMRIaLvR4dR5zJfsupMNtAB5399R5/JYOW8+5py84Vxjxd664m9rGktshguWwFRFZ/UHcE6+odAqCRFhHpdur5WGiVukgSFB1PKj3JhQ6odK/K8z/GPHuCw9tngg5UhNkUjoFNIXTbC/Gt+TSAEA4Os07BjONXqPsyhAEJAkE8iYgH7ygi+r5JHiq9rrMGiPGvM+qQgaqBTIrorHXGwz5VvjZmsAAFFIqGIq9tSFjQ70fq67kW06MhSD1P3kgWmKxmJbQMqVFjOPx8PzvEQmrstqCBl2ZbgN5vHFj8rFQSJpWGslAQEtosTqNvMT6+C8lwKMhI6YGBw4QNH++D1xoFCkFhZv1Zov2RQxkuZNr/rTZkloyzzHu/nSHbWKWCkloOSREu9WzGHDBQstorRHjJe+rjZfsilipYrrtZu1KiBJrj/VEDRYiRCShIo60hQsj5KIg4Tewmwps1/8qDwgVZG8MLJF5LfSNNpFFLFSb3ljHVz9mUbOzVMMupXflDhQKI9sedhl4eKizTWaUYHeA8K5eXOhVRIiAgCMATBOXBARNiawrW6dJgghQN5xT9VxszTNG+3b4rNE2O16dHqHQSH9g6VBnfJW171ypxgUOvzGhh02n86f9lAsAPAs9lhZl8lTuKkqIEV+bc3GXGwr+KJq8Ip472lREnrlJCuPlsijJUwCL5PJRKKrTr4us6epglV1QG+rcQalK5N/H8lI6Mqf6lyNrEDRXgm01Ti9kVTu02tGqoXKNl9MCZDL6AYARCFRgODs2yX9H4hu3noWJIKlqdTCA+y0KOr3CeijCYIQMdi1zgs/2++7IwpRyMFC/NeeAjPVT4kurCvt/1Bs03mQZ7E+u6GxzJ78+8vtWk6DG3O4+b9GqhH1fzDGabhq9oVN69TnNGhGqQs3Vg5+PKF5E5/2mDF87JX/QvBgVc1hg+6USTNCzbn40h3afouim+cqqUYUN6eVhWpDhwdUHahnbRzzW6KtPWYSyJjg9DYbeNuvaZX/oIsYH+T9/3ZwtmvgAEVAP3nN4fqzbxUr42WhIwO89xqLmhLifYG1wlG8TZt4V7hQKcj9uFwWLm5xsvZY2aoDemedO2SYKvW+6Ot2HbWDkdGpD8bc0C5NwfAsLthYFT83LOhGmsf9qClyzsU3FFodx92OOpcsXBw+PjBooLKdU4e12ll/xmwpsytiJNGZoe3nTlGAIDhdVbajNvkPkQBA0che61L3VwCAQEZrRl6/YtecMddCi6hbbLTvdMjb6N8TzZw5c8WKFTNnzmx1q1arDQ8P93FIzR2rzhodMZzyVetfZ+Fc/LW/CluN88K6sn73RTWNJbuW0Wi8NhHeNMzj8u91hguNQ/6aRIsoS4VDES25thLDuXnArazmasqzFG6qjp8T1nxmAssDc/ULi7+tESiYmMxQ75//zOErrXj9BLqpRsizWHfCVLVfLw0XBw9Rhg4LuO51SWtfBi6uL1PESmOmXf4gj4XNfuXS8DUpzaut1gpH3qcVw55ObtlU2Aa73e7xeFQqFeZxU4r1WNnTrxUNeiy+rYaBJsaLFo+VDR0R0InzDdyNbP1Zc/AQlbDF9Q0GXZap/Hsd5nHk5OCo20Na2RkDz/I31C7dJdpuDOA4zmAwhIaG+jagG4M5bLjQqD1idDV4Mp5JRhQCDJz78o+ac/JVB/T1Z82Yh+AhKlWC1FrljJoSjCiEeVz5oz5mWmirX99l8hjzLM0v3W5a4cYqVbJMM6JD6VOv16vVah8MwfNdsTOZTHPmzAkMDJw7d67JZOrI1u3btw8cODAgIGDixImFhYU+C7VTVDZWu7meN+H92qTiNLovri9PXBDeTha8FaY8y5UFLDAAAOvgcj8ut1Y70/+S6I1HEXM5C3qsLOawd+byxY/KTj6XrzvRsiwBgLq/YvCK+Mp9dXkbKszFlxdOa5EFORevzzGHjb7y216RRm0t42vs2NuAoz1izH6p0JRn6f9gzIBHYjUj1B3MghU/1jV9KAAAguR7omqPGa1Vl8cx6U6agtOVLRpv5TESVaJMe+Or2zTPZOW7daEZqutmQQAQKhl9jjn7lUt1pxowj3UnTLc+b0SoZCImBLXMggCAQDNSPezp5NQHY1rPggCAwP9ZEK7TJN79IRoFp6sGPRbf1AKBeZz/WYV3KyVAgKDffdHDn02Jm6VR91dETw3xvsw7FaStry9SCzolCwJA1JSQkKE3M3G2S/mu5L366quxsbFarTYmJua111677taKiorFixevX79eq9XOnTt3yZIlPgu1Uyzsf6e/Q7h5nIvP/W85YPBY2YsflkVPDfH29neFgBR5U1Nt5X79yX8UnH71klQjGrA09toOnuqD9SfW5p/7T4mtxhk2OnDk86kRE1tvgpaEitKfSAwafCXf6E+bm5ZxMeVZcj8uD0iWN29uDRTBoiTq3YuXJ665LZ7+S2LSHo6Vtz1RrFXKeFmLlh+hkhm4LK5pHIHbwoa1dlpJuDM8YsLNtKhjDttqnNZKhzHXEjNN05Fd5NGSgcvikhdG6k6YTj5foD1m7OplxxkJrUrsRh1svVtTwUY0GrA0rulx7AxNW7ODOjJ65dZJNaJbWWCyi/iuabRfv37bt29PTU3Nz8+fN29eQUFB+1sPHTr05Zdfrl+/HgD0en3//v3r668a7jxjxoyHH344MzOzxQcJBAKhUOj3ptFqi/bL3C2rRj3uxxhuhbeN1FJmbyx1RE6+/tm5s5pGXSaPx8a2OZMPg13nkmpuZs0L77K/3vqKQ++yVTplUeLmnZ0AUGnDGdv4S7+jVV045bJzNDWNAoCz3m28aAkdHmDXu9oa69SOxhKbPEpyoyOH+5oe0TTay9xQ0+itjKnxXSKUy+V6vV4ikTgcDo1G09jY2MGtHMetWLGCoqj33nuv+S7jxo07deoUTbesNDzyyCOrV6/W6XQaTYcujYlO0dDQIJVKhcJun0CuZ/lp+UAVuzyxvTuo3TTegV1GVhLZCePdHQ6Hx+NRKnvGsI5egOM4k8kUHHzzy28SN8pgMKhUqg4mwoCAgJu+EPfdqFGML68NiDHmuJZr9rS1dd++fatWrcrMzHzxxRdb7KJSqbZu3drWYBme5/2eCHPrCw9XHls29EH/huEbAoGgEwfL+NFzo/Csvdyzo1VdUUGylDvEElat6YSJPc1rhIQPcBzHMAypEfoSRVG+GSzju0QYERFRWVmZnJxcXV0dGRl53a0Y49WrVx89evSrr75KSUnxWZydKCUwMVkd7+8oiBszOBANUMPGIv7BlCuZsMENRhcGAIsHWB4AYGjQzQy3VMTe/MQAgiC6iO96BebMmbNhwwaM8YYNG+bNm+d98tChQ21tPXbs2NatW3fs2BEREWG1Wq3WHnZHSgBgKJqm6JUHn3dzvr65D3ErVg6mXz/H21nYV42fzuJGbGNjN3mm7uam7ubuP8Q9eoS7ax/31xO3evNxgiC6Cd/VCNeuXbto0aLo6Ohhw4Z98cUX3icnT57s7aS8duuhQ4cKCgrU6isDmXrilEcKUS9MeEZICzFgvy0gSNygKRFIwkDw/zzDgtCUCPTGaHp0KGreUmp2w4Rd7Ovn+JWDyQATgujxyIR6X/js/Nf9g5NHhg/zdyBdqHMn1PtdhRUHipC87UEt1TY8bif3r+HUoiT/5ELSR+hjZNSo7/lsQj1ZYs0X/pA2n1QKe5YY+XX+U5EytHs6ffv3bLAYTYsi/1aC6MFIw44vCGlhcUPZv0+u83cgRGdKC0DbpzIP/MzmGHpqswpBEEBqhD6TEBD7+PBH/B0F0clGhaL3x9Gz9rLTo6gIKYRKkEYC4VIUKoZoOZKRnxdB9ATkl+ojCJDZ1fjRmc9Xj3nC37EQnemuOEojQYVmXGOH4kZ8TAdaO69zQJUNA0CUDMUrYPMUpp3uRoIg/IskQt8Jkqj/nEEqhb3QOA0ap2mlm9DqgSobfiGHX5PN/Xv09W+MRxCEX5A+Qt9BgOys47uC7/0dCOEjcgGkBqB3x9JfFfO/1pF+RILopkgi9CmZQDoguJ+/oyB8KlAEr4+iHz3Cebr27g4EQdwkkgh9SiaQhss15/W5/g6E8KnFSVSYBN65SDIhQXRHpI/Q1xpcZoOjlXvJEr3bB+Pp0dvZBXEoTnGlN9HBwhEdljGgFoFahAKEICY9iQThcyQR+lqMMipKEWlyNqjF3e42zUTXSVCgJwfRy49xu6cxAGDxwLo8/t8XuHgFwhhMbmhwYZMbgkTo2SHUw6nk5oAE4TskEfpBlva01qq7M6X1xeGI3uqvg6hNxfy6PL7Wgd/P5TOjqJ9mMAPUVw03za7Ha7O518/za4ZS9ydRTNvpkOXB5EZkgTWCuHUkEfrBqIgMACArrvU1Ago+mkDf9j27OIk6PpdJVLby388IRt9PY47p8N9Pca+c5Z8dQi1MoFq0l2KArWX80yeYIBF9ZB7QpBARxK0h7S/+sb/s8Jb8nf6OgvC1kSFIe6/go/F0q1mwyVgNOjCLWTeO3lTMx2zyPHmCKzRfnn3xSy0et4N9IYd/fTgvofGLOWQADkHcKlIj9I/JsRMohGqstRHyMH/HQviUStjRV94egW6PYEoseH0+P3EXO0CNpAycN8KLw6l7Eymnw50qY2/bT0+NRGNbm85PEEQHkRqhf1AINbosX+VuBYAt+TttHruH8/g7KKI7SlCgl0fQFX8QLE2lpkZSBb9jFidRFAIACJPgD8fTiw9xZnLjZ4K4BSQR+o1SpPjryD8BQIRCIxVIvs7bdlJ72t9BEd2UkIKFCdSfB1Ciq/sL58ZS06PQI79wfoqLIHoDkgj9b2zkSATozpSZI8OHsTw5oxE35o1R9EUT/l9Re52FfzvBPZdNKo4E0TqSCLsLuVBmcVvXHH7J34EQPYyEgY2303/9lSuxtL6c6fOnuYNaXGGD5G88L53hraQNniBA4ShFAAAe6klEQVSuRhJhN6IQyv816VkX53ayLn/HQvQk6YHoheH0bbu4Y7qWufC9XH5TMf5hGvPJRPrIHOaCCSd943nzPO8iTQ8E8RuSCLsXClFb8nfkGQr9HQjRwzyaSq0bT9+1j22+oummYv7Vs/ze6XSoBAAgRYU2Tqb3zWR+quZn7GEbSdWQIACAJMJuaNGAu4dqBpWZK/0dCNHDzIxGWXcyG4v5+T9xZjfsq8ZP/MrtnEY3X90UAAaq0e7pzNBgNG4HW2MnN4ciCJIIuyWbx76tcLe/oyB6nmgZOjSLCRbD6B3sokPstqlMemArUwwRwBuj6N8lUJN2tdmzSBB9B0mE3ZFMIH1ixKM11tovL27xdyxEDyOmYf0EeuVg6rNJzJjQ9ibarx1KPTmImriLO2u8Khfa2FZezPJQ3Ij3VOENhTxHUifRu5CVZbovtThgYvQYlufsHrtSpGi+6eOz/3tg0D0Civz7iNb9MaVD17jL+lPBYsj8gU1QoAY3mFzY5AIKgYsDtQgCRUgtAqUAKm1QYcXhUpSkBJMLfqnFGyaSJU6J3oOcSbsvCSOOVkb+Uvmr2dU4I3EKy3MGh3FL/s4/D38kPXQAyYJEp7g7nhqgRibX5XsiqoUgooHHYHSByYVNbmh0Q6QMEhTIO5ffzsL0PexfjnPvjLnVeyfyGCiSTolugJxMu7sJ0aMBYFfRXgkjuT1uwuIBdwPAiPChufWFp2pz7h+40N8BEj1e/4CW6YhCECyGYHEraUrKwM5MZspudk0290LGTeZCJwcv5HCFZtg8hdyJmPA/kgh7htlJ07wPAiVq74MkdVy0MsLFuUV0h1dxJojOoBLCnunMpF2sUsCvHHzD4wx+1uKlR7j0QPRrHc6uxxnBpFZI+BkZLNNTCWmhQih/L/u/peYKf8dC9DnBYvhxBr0uj3/3Iu/p8J2gGtyw9Ah33yHu9ZHUN1PoZ9Kp57LJxH7C/0gi7Nn+b+SyeFVMvuGSvwMh+pxIGfppJv3ZJV79uWfsDvYvx7kvi/hya5sjSndV4AFbWCEFF+5m5sZSAPBwKnXBBCfqyCBUws9IIuzZECCbx36o4igAvHNqfUVjtc5Wd6w6y99xEX1CggKdupPRLRa8MpKOlqPt5XjENnb5Uc5w9RKBNhaWHeH+cpz7+nb6P2NppeDy80IKVg+hnjtNKoWEn5FE2OPJBNJlQx8EgD8OvjdKEc5hXi6Q8ph/5dd3AIDczoLoajIGJoahvw2ivplCF/xOIKAgbYvn/dzL0w1P6vGwrayLh5y7mPFhLbsDl6RQhWY4es0SqS4O7K1NZySIrkASYe8hF8ooREXIwwaHDgBA96bdBQD/PPq6ydng79CIvkItgrfH0PtnMt+W8cO2sk+e4Ob9yL40nPpk4pWKYHMCCv4+tGVPYY0dT/6eTf6GXZd3Ax2QBHHTSCLsnSiEYpRRAPD8+FVqccAXF76xum3+DoroKwaq0f6ZzNqhlM4B2fOZBfHtnWfuT6LKrfCz9nKl8JgOj9rOzY6hdmTS28v5tC3sxmKeb6MbkcNw3ojX5/N5DW12NOY3YJZkU6JdZPpEL0chCgAGhfSXC2VO1iVmRP6OiOgrFsRTC+Kv/zKGgjVDqedOc4dmMR/l82uzuQ0TmZnRCAB+mM78rMXPZHGvneUXJlIUgIACuQAAoMKKj9fhU3ocIUNDgtCzp7i/D6UfH3DVBH0HC2uzuffy+OHBaNNkOlJG5mkQrSM1wj5hiGaQk3U9f+RVDGSEHtHtLEqiau0wfQ/7zkX+l9mXs6DXpHB0bC7zzwzK7MYmN66x4+x6nF2PGQpWDqbL7hHk3c1smkwfn8t8XcJn/sBW2S6X8INaPPg7tsYOpQsFM6KpEdvZPVWk8BOtIzXCvkLMiF6atMbFun6tyb4tZpy/wyGIK2gEzw2jtpTi43NpRWtdiXNjqbmx7b1DohIdns28do7P2Ma+MoI+Xof3VuH3x9GzohEAPJNOjdegRQe5RUnohQyaIdf/xNVIiehDKIQa3VaGYgCAx+TqmOhGFiZQW+5oPQt2EI3gmXRqz3TmzfM8g+D8AmZWs5rlhDB0ej5z1ogn72aLGjtU+Est+KvitnoniV6F1Aj7llBpcKg0+Hj1qTJzxR/S7vJ3OARxWWetvj00CJ1bwLT6ZsFi+H4a89YFfswO9vEB9FODKVFrC52WW/HmUvxNCV9uxRoJ+q4MfzaJlpAzZa9GaoR90aiIYXf3m1PRWFXZWO3vWAiik7WTUhHA/w2kTs9nzhjw4O/Y/TWX63t2FvZV42dPcSO3syO2sUVm/PIIuuZeQdY8RkzD5N2sztHyrRo9cFJPqou9BLnO6YsoRFE0VdJQHq+KKWkoF9KCMJnmUMWRO+ImWdxWhVDu7wAJogtFy9B3d9C7KvAjv3CDApHJhXMMeEgQmhyOXh1JTwxDTfdapGn47Db6xRx+zA522x0oDAAA8hvwf3L5TcW8lEGpAfDScHpESKeNR+UwfH6JTw9Ew8ha5D5EEmHf5R0yc7r2nJgRhcs1No8dAP7fifdWjlohF8r8HR1BdK3ZMej2COaTQj5ZRY3TIFkb50IEsGYolayEqXu4FYniw9nsBSN+JJU6v4AJFaMNhfxd+7jRoejF4VQ/1S2lLgzwbSm/JpsPEEKFFQ7PphOVN/aGLg7WZHOPD6CiyUSRG0QSYV83LGyw98G85BkA8I8JT2HA75/e8FD6YnKDJ6J3kzLwWFqHuofuSaSipPjvJ5lHBlC/S6CEv+20NJW6L4l6N5efuIudGU09nkbdXE1uTxX++ymOQvDOGHpqJPoon5++hzs6hwmVdPQdjC6Y/xPr5mFTMbcjkx4aRHLhDSCJkGgJAZocO15EC0sbyuMDLg9a5zDnZF0ygdS/sRGEv4wJhW/GWENDW/4EJAysGkwtTaXW5fEL9nNhElieRv0+nhLR4ObhZB0+qMWHtHyFFVRCUItAJUQqAWAAowuMLmxwQr0Lh4jRCxnUnXGXxwwtTaVq7HjWXvbgLEbegZG0ZRY8cy83Owa9OpL+rpSfvof9dCIzI5rkwo4iiZBoRf+gFA5z3xV+/38jlr3267sL0+Y7PM7j1VkPpS/66/41b0554aT2tFKoSA1K9nekBNEtBAjh6XRq1WDq+0r+/Vz+bye4gWp0So9TVGhyBHpyEJ2sBLMHGlxgcmOzGxBAkBgCRVSQCAJFSCNpOW72+WG01s4t2MfumsYI2q21nqrHd/7ErU6nlqdRALAgnoqQoQX72OeH0UtTyXDIDkG4x84nmzlz5ooVK2bOnNnqVq1WGx4e7uOQeiUeYwpd+Y16R9NcMpUohPJGl+WCPv+ufrMAwGg0ymQykYgs4eYjdrvd4/GoVCp/B9JXcBxnMBhCQ0M78uLiRpzXABPCkOoWuhc4DAv2cXIBvDKC0tpB5wC9E9c6gAKQCUBMg0oIBic8d5pbP5723uKxSVEjnrmXuysOvZBBt59HuzO9Xq9WqxmmyytspEZIXEfzLAgA3jGlyeoEAJALZCqRstFtyarJGaoc6J/4CKL7SVSiROWtvgmNYNNkevaP7JgdXJgEwqQQIkZhEuABqmzg4KDRDQ4O78pkrh22mqREx+cyDxxi+29hnx9G3ZtI3dBMTZMLDtfyo0MpTYc7KXs0kgiJmycXyuRCmc5WpxYH8Jg/Un1iSsJEfwdFEL2HhIH9M2/yLB0kgl3TmF9q8bOnuFfO8s37INvh4WFdHv+vM1xqADpr4EIlaLwGTQhDt4WjOEWv7XQkiZC4VRpZqEYWWl5bYXFbAeDd7PWPDnkAA1CIElCkgBGEP00IQ4dnMz9U4r9nc2uy+XApKAWXJ0oGi2FwIBoVigapkXf91V0VeOVJLk4OB2YxaQGIx3DRhA/X4r3V+OksLkiEZsWgWdHUOA3qZeu1kvMU0TkUQvmM+CkAMDXuNiEt3JT7XXxATGpQ8vunP1k95onPL3x9Z8pMg8NksBuHhw85WH5kUsy4Fo2uBEF0kRnRaHo0c1yH7Sw0ejCHAQB0DsjS4/dy+TIrTg9ECIHJBW+NpqdFXf5hUggGBaJBgeixNOAxnV2Pv6/k/3aCK7HgYcFILURqEaiEoBKiFBXMjqauXYjujAGvL+ALzVdGopjdwGNw82DzgIcHK4vvTaReHtHKMrPFjXhfleAhdZcdlGZIIiQ6mXcoqXchUx7jx4b9EQCGhw2V0GIRLZQIxABQa6ujEDpRkz0wpD+ZkkEQPoAAxmrQbw+vYvFAdj2uc+C74qi2qnoUghEhaEQI/fwwqHXAWQM2u3GDGxrcYHbjj/Px0l+4WTHUPQlUZhTy8PB1Cf9hHl/rgIf7UfObDeRRCoFGl+8rKaCARvBcNj/oW/aDcXTTfA8nB6+c5d7L5Z9I8lHFkyRCogtRCKlESgBIC04BgAh5WIQ8DH5Lk1WWmmFh6bn1hYGSgDBZhwbjEQTR6RQCuC0ctbtK61XCJBAW1fL1dQ7YXMq/eo5bchjzGMaHUWuH0dOjrqxX15b1E+gDNXjpEW5sMfr3GPpEHf7zcW5oEMqZz4jsLgBfXCiTREj4zYJ+cwBAa9MFSdQ6m97JOmNV0f4OiiCImxEqgcfSqMfSqEobRgBRN7LM2+0R6NxdzJpsLuErT5gUvT+OzoxEAKC3d1m4VyOJkPCzKbETACBLmyOgBWGcptaq80s6PFt3MUkdT9ppCeIW3dxKp1IG3hhFP9SPSlSgVm+P1aV619AfoscaET50SOjAsoaKc/pcD89uOPclAHx89n9VlpoCY9H/LmwGgI253wJAvd3Q6La0+iY2j73cXHlzAfxQvI9CVLm5EkNPXWKCIHq6tAA/ZEEgiZDoVvoFJc1JmiagmPTQgQAwL3m6RhoSq4yelZQJAOEyDQBk1Z4pbahocJm35O8EAO8tFX8o2X9Bn+9kXYcqjgGAh/N0/EM/v/C13l7/9Ji/SBjxloKdLtbdFV+NIIhuiyRCojvKCEsHgBBpsIAWiBmRWqwCgMmx4wFgRsKU9NABNKK9A3A+Pvs/HvPDNINjlJFBEvUDgxbq7fUvH3+rI59icJg4zE2MHqsQKrzPPDlyuYgRPnPoRRdH0iFB9BUkERI9kkIoTwvuBwD/mPAUhSiNLEQpupzMQqTBz477q9Vte+Pk+wDwbcEuAPix9ND+8l88nGftL68AwO7ifQaH6WD5kfN1uXGqaDFzZYlUBGj12CdEtPDd7PU2j93JunjMtx9Mo6v1ptrr4jAHAN47QRIE4S8kERK9EI1oqUDqnaQRIFKyPDc+atS4yBEMzfzfiD8BgEYWImHEd6fOGaIZdO3u3vVUZyTcIRNI95Ye+LnimM1j/7niGAAUmUpZnnOyLqvb5uE8n53/CgDW5Xyqs+nNrka7x9GR8HiMOcydqbvwyblNJqf5jRPvAUmHBOE/vTYR6nQ6f4fQtxiNRpfL5e8orqAQ8s5ZnBI3kaFoqUAiZsQIkLeVNSMsXSq4znLCSep4AJiXPGNy7HiO57y1tz0l+znMHa/O+qXqVwEt8NZKV41+XCMLOVZ18mzdRRfnLmkoB4Dj1acA4GD5kQJjkc1j91ZMs7Q5Tta5pWDHsaqTg0MGLBn8B7VYtXb8Sh7jtb+8ggFXNFZ7OI+HZ6/bNnuo9GhebeGtHyiigziO0+v1/o6ib6mvr2dZ1gcf1GsT4dChQ3vuHaZ6ouXLlx84cMDfUXQVpUhxe+wEAFiR8bCIFk6OHT8jYQoAjAgf2vSaGYl3jIkcXm3RntfnAkCeoQAAEtVxQWI1AMQoIwGgzFyJARb0mz0hegyFEI0uj5CjEHrj9n8iQLuLf7J67OfqLm7J3wEAfzvwHACc0Z2vsdbymPe2wb5w9A0A+OXnwx++/cFJ7elv8rfDb82zjW4Lj7HWqis0FgPAnpIDAFBqrqh3GDnM1TuMPjtivU9lZeX06dP9HUXfMn/+/MJCX1zt9dpESBB+kRAQOy95BgD8cfAiAIhRRgVLg2QCqTdl/i51roQRN+W/ay0b+qBarMoIS1804G4AWDvubwDg4tw0oqos2s8ufAUADw66BwPWuINoN5URlj4rcaqDdb5+4j8AsO70p0aH0cm56h0G+K25taShvMHZYHI0fHlxMwD869i/bR57gaEoS5sDAKe0ZwCg0W3xVnmba3CZvfn1TN0FuMGxuJ3IxbmLTCV++Wiij/BdIjSZTHPmzAkMDJw7d67JZOrI1vZ3IYhezzsCaFREhkYWGqOMfDzjEQCIVkai31a3ohEtE0gljPiFic8AwKrRjwdLg+JVMWMjRwLAgn6zAWBK7IQkdUKwNOgvwx8FgEeHPiATSGVCabA0CABydOcAYHPejiJTaWlD+XunNwDAUwf/yWM+p/b8eX2ek3Vla88CwOsn36u2aHPrCzblfgcATx5YCwCb83ccqTph89j/dezfAPBW1od6e/15fe5XeVsB4O+HXwaA3PrCGmstBuxknQBQ7zBiwAaHSWerA4ACYxEA6O31do/Dw3m0Vh0AVDZW85j/tebU6dpzPOYPlB8BgJUHn3dzbpOzwck6ecxb3Tb4bXbpkaoT+YZLHOa8u980q9t27QUB0ev5LhG++uqrsbGxWq02Jibmtdde68jW9nchCOImBEsCASBKERGvigGAR4bcDwAPpS/qF5gUo4p6YOBCAFg99gmE0OTY8eOiRooZ0UPpiwBg9ZgnIhXh8QGxs5KmAsDz41cBwLzk6aMjhksY8bKhDwLAA4MWqsXqlMCkmYl3AMDjGQ8DgNnVyPKc1qp7+9RHAPBhzqcOj7OysSrPcAkAdhX9CACHKo5VNlYbnQ27in8EgG/yt7s5T7wqJkIRJmHES4fcDwD/nPC0kBbuL/ul0FhcZq7838XNABApD8eAw2ShIdLgertx+6UfAOD5I6+5Ofcvlb/+ULIfAFb//CIAfHb+6wJDkdaq23BuIwC8c2q9h/Oc1J4+VHEUAB7/6RkA2JT7bZGptKSh/MOczwDgw5zPMOBzdRfP1l0EAOXoYADYW3Kg1lZX0Vjtncn65skPAOBYdVaWNofHvLfh+s2THxQYikobyr2v2VtyAADyDIXl5koP5/mx9BAA7Czaa3KaC43F3pj/nbUOALK0OfmGSy7O7T0s+8p+bnRbaqy1v9acanqfIlOJ1qpzc+6D5UcA4EjVCavbVm835BkKAeCXyuMAkFtf4O1v9g7yyq0vcLDORrelylIDAN51J6xum5N1YsDeQV4c5jBgm8ducJgA4KT2NAAYHSabx44BO1gnAGitOg5zJqe5xloLAKUN5QBgcVudrJPHl1/j1ei2eN/H+2VLzRUmp5nDnPfypbtBPutI69ev3/bt21NTU/Pz8+fNm1dQUHDdre3vMmnSJIFAEBkZ2eKDIiIi4uLili1b9sEHHyByox9fefvttydNmjRkyBB/B9JX7N+/v6am5r777vN3IN2RHTklWMQhHgMWYMaBnBIsdiE3g2lAyIlcMl5ipMxqXuVCLh6wFItZYJnflpzECHuAFWJBLV0fxgWbKSsCcOrsnx7buGreE3raqOTlFKYclFPJyw10QxAXYEcOQCDlJVbKLuelHPA0UB7EupBbzksLBGX9PHF62shgWskrygTViZ5oHW1Qc0oAcFMeOS/1vo+JbhTwjASLqhhdLBtRxehC2UA38tgoh4YL8r6PltGLsFDFK0rpqiQ2pkxQHc6GOJHbQlmj2LCLgqIBniQdbRCBUM5JSgXVyZ7YPGFJvCfSjpwNtCXBE3VcfGaMc8glQbkcSwM51UnR+QnOjCPi08PcaTZwmGhziifurKgg3dWvSFCh5GVKXp4tyh3nHHpKdHGgO9mK7FbaFueJPC4+O8aZni8oVfNKBS87I8of6xzysyRrlHOwmbLaKEeCJypfUJrqiS9hqoJ4FQ10nqBkhGvgfsmvkxwjdIzBhdwJnqifxVmTnCMuCC+FsyEiEBYyZcPcaUdFp39as/PhBx+KiorqyD89MzMzPj7+5gqM7xKhXC7X6/USicThcGg0msbGxutubX+X7du3P/nkk9emusjIyLi4OKvVKpfLu/pLEU0cDodAIGAYsnqtj3g8Ho7jxGKxvwPpKzDGdrtdJpP5O5BegQLggacxIKBYxIl42kXxAow4AIx4AabdiBXx7ganSCii6Q6tuvb4449nZGTcXDi+O21hjL1JC2PMcS1b4Vvd2v4u8+bNmzdvXpfHTRAEQfRqvusjjIiIqKysBIDq6upW2zOv3dr+LgRBEARx63yXCOfMmbNhwwaM8YYNG5pqcocOHWpna6tPEgRBEEQn8l0fYUNDw6JFi86ePTts2LAvvvhCpVIBAEKXA2h1a6tPEgRBEEQn8l0iJAiCIIhuqHeuLENm4vvA9u3bBw4cGBAQMHHixKZlkMaNG4d+s2zZMv9G2Pu0enhJae866BpACnnX4DguNTW1+TO+XGWldyZCMhO/q1VUVCxevHj9+vVarXbu3LlLliwBAIxxfn5+VVWVxWKxWCxvvdWhmwISHdTW4SWlvetYmlmzZs1TTz1FCnlXePvtt8eOHdtiprhPV1nBvVFKSkpeXh7GOC8vLyUlxd/h9EIHDx58+OGHvY/r6uqCgoIwxlqtVi6XZ2RkyOXyefPm6XQ6v8bY27R1eElp94Fz585NmTLF4/GQQt4VDhw4sHPnzhb5qNWC3UWlvXcmQplMZrfbMcZ2u12hUPg7nN6MZdlly5YtX74cY5yTkzN58uScnByDwXD//fffc889/o6uV2nr8JLS3tVcLtfIkSMvXryISSHvSi0SYasFu4tKe+8cLCOTyQwGg1gsttvtISEhNlt3XN2uF9i3b9+qVasyMzNffPHFFmvKaLXaAQMGGI3kvj9dovnhJaW9q7388ss1NTXvvvtui+dJIe9cTZMIvFot2F1U2nvngljemfjJyclkJn4XwRivXr366NGjX331VUpKivfJ06dPO53OsWPHAoBQKBSJRH6Nsbdp6/CS0t6lOI5bt27d/v37vX+SQu4zrRbsLirtvXOwDJmJ39WOHTu2devWHTt2REREWK1Wq9UKADabbf78+Xl5eW63+4UXXrjzzjv9HWav0tbhJaW9Sx04cCA6OjopKcn7JynkPuPTVVY6q421WzGZTDNnzoyMjJwzZ05DQ4O/w+mFXnzxxWsLEs/z7733XmJiYnBw8P333282m/0dZq/S1uElpb1L3Xvvvf/4xz+a/iSFvOu0yEetFuwuKu29s4+QIAiCIDqodzaNEgRBEEQHkURIEARB9GkkERIEQRB9GkmEBEEQRJ9GEiFBEATRp5FESBAEQfRpJBESBEEQfRpJhARBEESfRhIhQRAE0aeRREgQBEH0aSQREgRBEH0aSYQE4QeoDV33cfn5+V305gTR0/XO+xESRPf37rvvRkVF+TsKgiBIIiQIP7njjjtSU1P9HQVBEKRplCAIgujbSCIkiG4nPz8fIVRUVDRt2jSVSpWenr5x48amrTzPv/XWWwMGDJDL5RkZGVu2bGnahDF+55130tLSlErlhAkTjhw50rRJq9XOmjUrICAgLi7uyy+/bHr+/PnzM2bMCAwMVKlUmZmZpCuR6INIIiQI/ygpKcm/RvMXzJo167bbbvviiy8mTZq0ePHiXbt2eZ9/880316xZ8+CDD27evDkzM/Oee+5p2vTuu++uXbv2T3/60yeffBISEnLbbbedO3fOu+mPf/zjXXfdtXPnzokTJy5ZssRqtQIAx3HTpk0LCgpat27dRx99JBQK77//fh8eA4LoHjrrVvcEQXRc+7/HvLw8APjkk0+aXv/EE09MnDgRY8zzfFBQ0Geffda06emnn54wYYJ3U1hY2MaNG73Pcxw3Y8aML774wvtxb7/9tvd5bwrMy8vDGFdWVgJAbm6ud5Ner//888+7+KsTRLdDaoQE4R/eVNRC8xfMmTOn6fH8+fNzc3MBQK/XGwyG2bNnN22aOXOmd5PBYKitrc3MzPQ+T1HU7t27Fy9e7P1z3Lhx3gcymaxp34iIiCVLlowcOXLevHmvvfaaw+G47777uuTbEkQ3RhIhQfQAFEWxLNvWJo7jAMD7ApqmW31Z8/zXfN8NGzYUFRVNnTo1KysrLS1t1apVnRc1QfQMJBESRDe1c+fOpsfbtm0bOHAgAISEhAQFBe3evbtp0/fff+/dpNFo1Gr1/v37vc/zPD98+PCXXnqpnY8wmUxLly4NDAxcsWLF5s2bN2/e/MEHH3TJlyGIbozMIyQI/9i3b9+1QzTvvPPOpscrV67U6XRpaWn79+9/5513tm/fDgAIoaeeemr58uXeTYcPH3799de3bdvm3bRy5cqlS5fW1tYmJSVt2rTp/Pnzn376aTsxKJXKHTt22Gy2hQsXOp3ODRs2ZGRkdP5XJYhuzvfdkgRBtP979A6WycrKGjdunFwuHzRoUNMQGIwxx3Fvvvlm//79pVLpkCFDtmzZ0nzTK6+8kpSUJJVKR4wYsXfv3qaPa94l2fzP48ePjx07ViaTqdXq+fPnV1RUdPmXJ4huBuG2f5MEQfhFfn5+//79yW+TIHyD9BESBEEQfdr/B2l1tAuRE99rAAAAAElFTkSuQmCC"
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Comparison to MLP shows faster convergence, better generalization\n",
"plot([mlp[1,:], mlp[2,:], cnn[1,:], cnn[2,:]],ylim=(0.0,0.1),\n",
@@ -618,14 +1172,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 35,
"metadata": {
"scrolled": false,
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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IoqiVqv95JNP2lY99dRTkydPdq+KjIxct26deznGeM6cOZ999pn77dasWeNe7g6BBQUFhJDq6moAyM/Pd69qamr69NNPvXzoFNXv0BohRfmHOxR10H6D+fPnt/2+ePHi/Px8AGhqajIYDLfcckvbqrlz57pXGQyGhoaG7Oxs93KGYXbs2HHXXXe5/5w4caL7F5VK1fba6OjoFStWjB8/fuHCha+88ordbr/77ru9crQU1Y/RQEhR1wCGYQRB6GoVxhgA3BuwLOtxs/bxr/1r165dW1JSMmvWrOPHj2dkZDzxxBN9V2qKujbQQEhR/dTWrVvbft+0adPw4cMBICwsTKvV7tixo23V9u3b3asiIiKCg4N3797tXi6K4tixY//xj3908xZGo3HlypUhISEPP/zwhg0bNmzY8M4773jlYCiqH6PzCCnKP3788cfOQzQXLVrU9vvjjz+u0+kyMjJ27979r3/9a/PmzQCAEHryyScfeugh96p9+/a9+uqrmzZtcq96/PHHV65c2dDQkJKS8uWXX+bm5n788cfdlEGj0WzZssVqtd55550Oh2Pt2rVZWVl9f6gU1c/5vluSoqjur0f3YJnjx49PnDhRrVaPGBAzv1kAAABvSURBVDGibQgMIQRj/Prrrw8bNkypVI4aNerrr79uv+qll15KSUlRKpXjxo3btWtX29u175Js/+fhw4cnTJigUqmCg4MXL15cVVXl9YOnqH4Gka6vSYqi/KKwsHDYsGH02qQo36B9hBRFUdSg9v8BddoLdNislrsAAAAASUVORK5CYII="
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"plot([mlp[3,:], mlp[4,:], cnn[3,:], cnn[4,:]],ylim=(0.0,0.03),\n",
" labels=[:trnMLP :tstMLP :trnCNN :tstCNN],xlabel=\"Epochs\",ylabel=\"Error\") "
@@ -644,13 +1207,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 36,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "w = reshape([1.0, 2.0, 3.0], (3, 1, 1, 1)) = [1.0; 2.0; 3.0]\n",
+ "x = reshape([1.0:7.0...], (7, 1, 1, 1)) = [1.0; 2.0; 3.0; 4.0; 5.0; 6.0; 7.0]\n",
+ "y = conv4(w, x) = [10.0; 16.0; 22.0; 28.0; 34.0]\n"
+ ]
+ }
+ ],
"source": [
"# Convolution and matrix multiplication can be implemented in terms of each other.\n",
"# Convolutional networks have no additional representational power, only statistical efficiency.\n",
@@ -662,13 +1235,29 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 37,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "5×7 Array{Float64,2}:\n",
+ " 3.0 2.0 1.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 3.0 2.0 1.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 3.0 2.0 1.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 3.0 2.0 1.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 3.0 2.0 1.0"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Convolution as matrix multiplication (1)\n",
"# Turn w into a (Y,X) sparse matrix\n",
@@ -677,26 +1266,48 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 38,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "y2 = w2 * mat(x) = [10.0; 16.0; 22.0; 28.0; 34.0]\n"
+ ]
+ }
+ ],
"source": [
"@show y2 = w2 * mat(x);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 39,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3×5 Array{Float64,2}:\n",
+ " 1.0 2.0 3.0 4.0 5.0\n",
+ " 2.0 3.0 4.0 5.0 6.0\n",
+ " 3.0 4.0 5.0 6.0 7.0"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Convolution as matrix multiplication (2)\n",
"# Turn x into a (W,Y) dense matrix (aka the im2col operation)\n",
@@ -706,13 +1317,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 40,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "w3 = [3.0 2.0 1.0] = [3.0 2.0 1.0]\n",
+ "y3 = w3 * x3 = [10.0 16.0 22.0 28.0 34.0]\n"
+ ]
+ }
+ ],
"source": [
"@show w3 = [3.0 2.0 1.0]\n",
"@show y3 = w3 * x3;"
@@ -720,13 +1340,26 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 41,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2×3 Array{Float64,2}:\n",
+ " 1.0 3.0 5.0\n",
+ " 2.0 4.0 6.0"
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Matrix multiplication as convolution\n",
"# This could be used to make a fully connected network accept variable sized inputs.\n",
@@ -735,39 +1368,86 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 42,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3×1 Array{Float64,2}:\n",
+ " 1.0\n",
+ " 2.0\n",
+ " 3.0"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"x = reshape([1.0:3.0...], (3,1))"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 43,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2×1 Array{Float64,2}:\n",
+ " 22.0\n",
+ " 28.0"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"y = w * x"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 44,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3×1×1×2 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 1.0\n",
+ " 3.0\n",
+ " 5.0\n",
+ "\n",
+ "[:, :, 1, 2] =\n",
+ " 2.0\n",
+ " 4.0\n",
+ " 6.0"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Consider w with size (Y,X)\n",
"# Treat each of the Y rows of w as a convolution filter\n",
@@ -776,13 +1456,28 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 45,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3×1×1×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 1.0\n",
+ " 2.0\n",
+ " 3.0"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Reshape x for convolution\n",
"x2 = reshape(x, (3,1,1,1))"
@@ -790,13 +1485,29 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 46,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1×1×2×1 Array{Float64,4}:\n",
+ "[:, :, 1, 1] =\n",
+ " 22.0\n",
+ "\n",
+ "[:, :, 2, 1] =\n",
+ " 28.0"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Use conv4 for matrix multiplication\n",
"y2 = conv4(w2, x2; mode=1)"
diff --git a/tutorial/60.rnn.ipynb b/tutorial/60.rnn.ipynb
index 3bd86cf82..5cd67d1c9 100644
--- a/tutorial/60.rnn.ipynb
+++ b/tutorial/60.rnn.ipynb
@@ -9,27 +9,24 @@
},
"source": [
"# Introduction to Recurrent Neural Networks\n",
- "(c) Deniz Yuret, 2019"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
+ "(c) Deniz Yuret, 2019\n",
"* Objectives: learn about RNNs, the RNN layer, compare with MLP on a tagging task.\n",
"* Prerequisites: [MLP models](40.mlp.ipynb)\n",
"* New functions: \n",
- "[RNN](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.RNN),\n",
- "[adam](http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.adam)"
+ "[RNN](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.RNN),\n",
+ "[adam](http://denizyuret.github.io/Knet.jl/latest/reference/#Knet.adam)\n",
+ "\n",
+ "![image](https://github.com/denizyuret/Knet.jl/blob/master/docs/src/images/RNN-unrolled.png?raw=true)([image\n",
+ "source](http://colah.github.io/posts/2015-08-Understanding-LSTMs))\n",
+ "\n",
+ "In this notebook we will see how to implement a recurrent neural network (RNN) in Knet. In RNNs, connections between units form a directed cycle, which allows them to keep a persistent state over time. This gives them the ability to process sequences of arbitrary length one element at a time, while keeping track of what happened at previous elements. One can view the current state of the RNN as a representation for the sequence processed so far.\n",
+ "\n",
+ "We will build a part-of-speech tagger using a large annotated corpus of English. We will represent words with numeric vectors appropriate as inputs to a neural network. These word vectors will be initialized randomly and learned during training just like other model parameters. We will compare three network architectures: (1) an MLP which tags each word independently of its neighbors, (2) a simple RNN that can represent the neighboring words to the left, (3) a bidirectional RNN that can represent both left and right contexts. As can be expected 1 < 2 < 3 in performance. More surprisingly, the three models are very similar to each other: we will see their model diagrams are identical except for the horizontal connections that carry information across the sequence. "
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -59,13 +56,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "The Brown Corpus has 57340 sentences, 1161192 tokens, with a word vocabulary of 56057 and a tag vocabulary of 472.\n"
+ ]
+ }
+ ],
"source": [
"include(Knet.dir(\"data/nltk.jl\"))\n",
"(data,words,tags) = brown()\n",
@@ -85,13 +90,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "57340-element Array{Tuple{Array{UInt16,1},Array{UInt16,1}},1}\n",
+ "56057-element Array{String,1}\n",
+ "472-element Array{String,1}\n"
+ ]
+ }
+ ],
"source": [
"println.(summary.((data,words,tags)));"
]
@@ -109,13 +124,36 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2×25 Array{Int64,2}:\n",
+ " 15 5860 1296 5597 17468 60 … 14 9 85 10004 221 189 3\n",
+ " 3 40 21 39 21 13 29 14 46 7 13 1 5"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "2×25 Array{String,2}:\n",
+ " \"The\" \"Fulton\" \"County\" \"Grand\" \"Jury\" … \"took\" \"place\" \".\"\n",
+ " \"at\" \"np-tl\" \"nn-tl\" \"jj-tl\" \"nn-tl\" \"vbd\" \"nn\" \".\""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"(w,t) = first(data)\n",
"display(permutedims(Int[w t]))\n",
@@ -135,7 +173,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "fragment"
@@ -165,7 +203,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {
"slideshow": {
"slide_type": "fragment"
@@ -193,7 +231,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -219,14 +257,52 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1×7 Array{String,2}:\n",
+ " \"Rapping\" \"the\" \"stick\" \"against\" \"the\" \"desk\" \".\""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "1×7 Array{Int64,2}:\n",
+ " 47900 1 3014 163 1 1719 3"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "8×7 Knet.KnetArray{Float32,2}:\n",
+ " -5.76045e-5 0.00222079 … 0.000327385 0.00192072 \n",
+ " -0.00522177 -0.000249661 -0.000252162 0.000350792\n",
+ " 0.00511935 -0.000636698 0.00414317 -0.000444564\n",
+ " -0.00366786 0.000273602 0.00106341 -0.0026508 \n",
+ " 0.00499445 0.00397028 0.00135022 0.00303491 \n",
+ " -0.00151867 0.00453946 … 0.000968743 -0.000920549\n",
+ " 0.00123059 0.0011105 -5.77072e-5 0.00345715 \n",
+ " -0.00209608 0.00351814 0.00290676 7.46992e-5 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"embedlayer = Embed(length(words),8)\n",
"(w,t) = data[52855]\n",
@@ -248,14 +324,283 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "\\begin{verbatim}\n",
+ "rnn = RNN(inputSize, hiddenSize; opts...)\n",
+ "rnn(x; batchSizes) => y\n",
+ "rnn.h, rnn.c # hidden and cell states\n",
+ "\\end{verbatim}\n",
+ "\\texttt{RNN} returns a callable RNN object \\texttt{rnn}. Given a minibatch of sequences \\texttt{x}, \\texttt{rnn(x)} returns \\texttt{y}, the hidden states of the final layer for each time step. \\texttt{rnn.h} and \\texttt{rnn.c} fields can be used to set the initial hidden states and read the final hidden states of all layers. Note that the final time step of \\texttt{y} always contains the final hidden state of the last layer, equivalent to \\texttt{rnn.h} for a single layer network.\n",
+ "\n",
+ "\\textbf{Dimensions:} The input \\texttt{x} can be 1, 2, or 3 dimensional and \\texttt{y} will have the same number of dimensions as \\texttt{x}. size(x)=(X,[B,T]) and size(y)=(H/2H,[B,T]) where X is inputSize, B is batchSize, T is seqLength, H is hiddenSize, 2H is for bidirectional RNNs. By default a 1-D \\texttt{x} represents a single instance for a single time step, a 2-D \\texttt{x} represents a single minibatch for a single time step, and a 3-D \\texttt{x} represents a sequence of identically sized minibatches for multiple time steps. The output \\texttt{y} gives the hidden state (of the final layer for multi-layer RNNs) for each time step. The fields \\texttt{rnn.h} and \\texttt{rnn.c} represent the hidden states of all layers in a single time step and have size (H,B,L/2L) where L is numLayers and 2L is for bidirectional RNNs.\n",
+ "\n",
+ "\\textbf{batchSizes:} If \\texttt{batchSizes=nothing} (default), all sequences in a minibatch are assumed to be the same length. If \\texttt{batchSizes} is an array of (non-increasing) integers, it gives us the batch size for each time step (allowing different sequences in the minibatch to have different lengths). In this case \\texttt{x} will typically be 2-D with the second dimension representing variable size batches for time steps. If \\texttt{batchSizes} is used, \\texttt{sum(batchSizes)} should equal \\texttt{length(x) ÷ size(x,1)}. When the batch size is different in every time step, hidden states will have size (H,B,L/2L) where B is always the size of the first (largest) minibatch.\n",
+ "\n",
+ "\\textbf{Hidden states:} The hidden and cell states are kept in \\texttt{rnn.h} and \\texttt{rnn.c} fields (the cell state is only used by LSTM). They can be initialized during construction using the \\texttt{h} and \\texttt{c} keyword arguments, or modified later by direct assignment. Valid values are \\texttt{nothing} (default), \\texttt{0}, or an array of the right type and size possibly wrapped in a \\texttt{Param}. If the value is \\texttt{nothing} the initial state is assumed to be zero and the final state is discarded keeping the value \\texttt{nothing}. If the value is \\texttt{0} the initial state is assumed to be zero and \\texttt{0} is replaced by the final state on return. If the value is a valid state, it is used as the initial state and is replaced by the final state on return.\n",
+ "\n",
+ "In a differentiation context the returned final hidden states will be wrapped in \\texttt{Result} types. This is necessary if the same RNN object is to be called multiple times in a single iteration. Between iterations (i.e. after diff/update) the hidden states need to be unboxed with e.g. \\texttt{rnn.h = value(rnn.h)} to prevent spurious dependencies. This happens automatically during the backward pass for GPU RNNs but needs to be done manually for CPU RNNs. See the \\href{https://github.com/denizyuret/Knet.jl/blob/master/tutorial/80.charlm.ipynb}{CharLM Tutorial} for an example.\n",
+ "\n",
+ "\\textbf{Keyword arguments for RNN:}\n",
+ "\n",
+ "\\begin{itemize}\n",
+ "\\item \\texttt{h=nothing}: Initial hidden state.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{c=nothing}: Initial cell state.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{rnnType=:lstm} Type of RNN: One of :relu, :tanh, :lstm, :gru.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{numLayers=1}: Number of RNN layers.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{bidirectional=false}: Create a bidirectional RNN if \\texttt{true}.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{dropout=0}: Dropout probability. Applied to input and between layers.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{skipInput=false}: Do not multiply the input with a matrix if \\texttt{true}.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{dataType=Float32}: Data type to use for weights.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{algo=0}: Algorithm to use, see CUDNN docs for details.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{seed=0}: Random number seed for dropout. Uses \\texttt{time()} if 0.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{winit=xavier}: Weight initialization method for matrices.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{binit=zeros}: Weight initialization method for bias vectors.\n",
+ "\n",
+ "\n",
+ "\\item \\texttt{usegpu=(gpu()>=0)}: GPU used by default if one exists.\n",
+ "\n",
+ "\\end{itemize}\n",
+ "\\textbf{Formulas:} RNNs compute the output h[t] for a given iteration from the recurrent input h[t-1] and the previous layer input x[t] given matrices W, R and biases bW, bR from the following equations:\n",
+ "\n",
+ "\\texttt{:relu} and \\texttt{:tanh}: Single gate RNN with activation function f:\n",
+ "\n",
+ "\\begin{verbatim}\n",
+ "h[t] = f(W * x[t] .+ R * h[t-1] .+ bW .+ bR)\n",
+ "\\end{verbatim}\n",
+ "\\texttt{:gru}: Gated recurrent unit:\n",
+ "\n",
+ "\\begin{verbatim}\n",
+ "i[t] = sigm(Wi * x[t] .+ Ri * h[t-1] .+ bWi .+ bRi) # input gate\n",
+ "r[t] = sigm(Wr * x[t] .+ Rr * h[t-1] .+ bWr .+ bRr) # reset gate\n",
+ "n[t] = tanh(Wn * x[t] .+ r[t] .* (Rn * h[t-1] .+ bRn) .+ bWn) # new gate\n",
+ "h[t] = (1 - i[t]) .* n[t] .+ i[t] .* h[t-1]\n",
+ "\\end{verbatim}\n",
+ "\\texttt{:lstm}: Long short term memory unit with no peephole connections:\n",
+ "\n",
+ "\\begin{verbatim}\n",
+ "i[t] = sigm(Wi * x[t] .+ Ri * h[t-1] .+ bWi .+ bRi) # input gate\n",
+ "f[t] = sigm(Wf * x[t] .+ Rf * h[t-1] .+ bWf .+ bRf) # forget gate\n",
+ "o[t] = sigm(Wo * x[t] .+ Ro * h[t-1] .+ bWo .+ bRo) # output gate\n",
+ "n[t] = tanh(Wn * x[t] .+ Rn * h[t-1] .+ bWn .+ bRn) # new gate\n",
+ "c[t] = f[t] .* c[t-1] .+ i[t] .* n[t] # cell output\n",
+ "h[t] = o[t] .* tanh(c[t])\n",
+ "\\end{verbatim}\n"
+ ],
+ "text/markdown": [
+ "```\n",
+ "rnn = RNN(inputSize, hiddenSize; opts...)\n",
+ "rnn(x; batchSizes) => y\n",
+ "rnn.h, rnn.c # hidden and cell states\n",
+ "```\n",
+ "\n",
+ "`RNN` returns a callable RNN object `rnn`. Given a minibatch of sequences `x`, `rnn(x)` returns `y`, the hidden states of the final layer for each time step. `rnn.h` and `rnn.c` fields can be used to set the initial hidden states and read the final hidden states of all layers. Note that the final time step of `y` always contains the final hidden state of the last layer, equivalent to `rnn.h` for a single layer network.\n",
+ "\n",
+ "**Dimensions:** The input `x` can be 1, 2, or 3 dimensional and `y` will have the same number of dimensions as `x`. size(x)=(X,[B,T]) and size(y)=(H/2H,[B,T]) where X is inputSize, B is batchSize, T is seqLength, H is hiddenSize, 2H is for bidirectional RNNs. By default a 1-D `x` represents a single instance for a single time step, a 2-D `x` represents a single minibatch for a single time step, and a 3-D `x` represents a sequence of identically sized minibatches for multiple time steps. The output `y` gives the hidden state (of the final layer for multi-layer RNNs) for each time step. The fields `rnn.h` and `rnn.c` represent the hidden states of all layers in a single time step and have size (H,B,L/2L) where L is numLayers and 2L is for bidirectional RNNs.\n",
+ "\n",
+ "**batchSizes:** If `batchSizes=nothing` (default), all sequences in a minibatch are assumed to be the same length. If `batchSizes` is an array of (non-increasing) integers, it gives us the batch size for each time step (allowing different sequences in the minibatch to have different lengths). In this case `x` will typically be 2-D with the second dimension representing variable size batches for time steps. If `batchSizes` is used, `sum(batchSizes)` should equal `length(x) ÷ size(x,1)`. When the batch size is different in every time step, hidden states will have size (H,B,L/2L) where B is always the size of the first (largest) minibatch.\n",
+ "\n",
+ "**Hidden states:** The hidden and cell states are kept in `rnn.h` and `rnn.c` fields (the cell state is only used by LSTM). They can be initialized during construction using the `h` and `c` keyword arguments, or modified later by direct assignment. Valid values are `nothing` (default), `0`, or an array of the right type and size possibly wrapped in a `Param`. If the value is `nothing` the initial state is assumed to be zero and the final state is discarded keeping the value `nothing`. If the value is `0` the initial state is assumed to be zero and `0` is replaced by the final state on return. If the value is a valid state, it is used as the initial state and is replaced by the final state on return.\n",
+ "\n",
+ "In a differentiation context the returned final hidden states will be wrapped in `Result` types. This is necessary if the same RNN object is to be called multiple times in a single iteration. Between iterations (i.e. after diff/update) the hidden states need to be unboxed with e.g. `rnn.h = value(rnn.h)` to prevent spurious dependencies. This happens automatically during the backward pass for GPU RNNs but needs to be done manually for CPU RNNs. See the [CharLM Tutorial](https://github.com/denizyuret/Knet.jl/blob/master/tutorial/80.charlm.ipynb) for an example.\n",
+ "\n",
+ "**Keyword arguments for RNN:**\n",
+ "\n",
+ " * `h=nothing`: Initial hidden state.\n",
+ " * `c=nothing`: Initial cell state.\n",
+ " * `rnnType=:lstm` Type of RNN: One of :relu, :tanh, :lstm, :gru.\n",
+ " * `numLayers=1`: Number of RNN layers.\n",
+ " * `bidirectional=false`: Create a bidirectional RNN if `true`.\n",
+ " * `dropout=0`: Dropout probability. Applied to input and between layers.\n",
+ " * `skipInput=false`: Do not multiply the input with a matrix if `true`.\n",
+ " * `dataType=Float32`: Data type to use for weights.\n",
+ " * `algo=0`: Algorithm to use, see CUDNN docs for details.\n",
+ " * `seed=0`: Random number seed for dropout. Uses `time()` if 0.\n",
+ " * `winit=xavier`: Weight initialization method for matrices.\n",
+ " * `binit=zeros`: Weight initialization method for bias vectors.\n",
+ " * `usegpu=(gpu()>=0)`: GPU used by default if one exists.\n",
+ "\n",
+ "**Formulas:** RNNs compute the output h[t] for a given iteration from the recurrent input h[t-1] and the previous layer input x[t] given matrices W, R and biases bW, bR from the following equations:\n",
+ "\n",
+ "`:relu` and `:tanh`: Single gate RNN with activation function f:\n",
+ "\n",
+ "```\n",
+ "h[t] = f(W * x[t] .+ R * h[t-1] .+ bW .+ bR)\n",
+ "```\n",
+ "\n",
+ "`:gru`: Gated recurrent unit:\n",
+ "\n",
+ "```\n",
+ "i[t] = sigm(Wi * x[t] .+ Ri * h[t-1] .+ bWi .+ bRi) # input gate\n",
+ "r[t] = sigm(Wr * x[t] .+ Rr * h[t-1] .+ bWr .+ bRr) # reset gate\n",
+ "n[t] = tanh(Wn * x[t] .+ r[t] .* (Rn * h[t-1] .+ bRn) .+ bWn) # new gate\n",
+ "h[t] = (1 - i[t]) .* n[t] .+ i[t] .* h[t-1]\n",
+ "```\n",
+ "\n",
+ "`:lstm`: Long short term memory unit with no peephole connections:\n",
+ "\n",
+ "```\n",
+ "i[t] = sigm(Wi * x[t] .+ Ri * h[t-1] .+ bWi .+ bRi) # input gate\n",
+ "f[t] = sigm(Wf * x[t] .+ Rf * h[t-1] .+ bWf .+ bRf) # forget gate\n",
+ "o[t] = sigm(Wo * x[t] .+ Ro * h[t-1] .+ bWo .+ bRo) # output gate\n",
+ "n[t] = tanh(Wn * x[t] .+ Rn * h[t-1] .+ bWn .+ bRn) # new gate\n",
+ "c[t] = f[t] .* c[t-1] .+ i[t] .* n[t] # cell output\n",
+ "h[t] = o[t] .* tanh(c[t])\n",
+ "```\n"
+ ],
+ "text/plain": [
+ "\u001b[36m rnn = RNN(inputSize, hiddenSize; opts...)\u001b[39m\n",
+ "\u001b[36m rnn(x; batchSizes) => y\u001b[39m\n",
+ "\u001b[36m rnn.h, rnn.c # hidden and cell states\u001b[39m\n",
+ "\n",
+ " \u001b[36mRNN\u001b[39m returns a callable RNN object \u001b[36mrnn\u001b[39m. Given a minibatch of\n",
+ " sequences \u001b[36mx\u001b[39m, \u001b[36mrnn(x)\u001b[39m returns \u001b[36my\u001b[39m, the hidden states of the final layer\n",
+ " for each time step. \u001b[36mrnn.h\u001b[39m and \u001b[36mrnn.c\u001b[39m fields can be used to set the\n",
+ " initial hidden states and read the final hidden states of all\n",
+ " layers. Note that the final time step of \u001b[36my\u001b[39m always contains the final\n",
+ " hidden state of the last layer, equivalent to \u001b[36mrnn.h\u001b[39m for a single\n",
+ " layer network.\n",
+ "\n",
+ " \u001b[1mDimensions:\u001b[22m The input \u001b[36mx\u001b[39m can be 1, 2, or 3 dimensional and \u001b[36my\u001b[39m will\n",
+ " have the same number of dimensions as \u001b[36mx\u001b[39m. size(x)=(X,[B,T]) and\n",
+ " size(y)=(H/2H,[B,T]) where X is inputSize, B is batchSize, T is\n",
+ " seqLength, H is hiddenSize, 2H is for bidirectional RNNs. By default\n",
+ " a 1-D \u001b[36mx\u001b[39m represents a single instance for a single time step, a 2-D \u001b[36mx\u001b[39m\n",
+ " represents a single minibatch for a single time step, and a 3-D \u001b[36mx\u001b[39m\n",
+ " represents a sequence of identically sized minibatches for multiple\n",
+ " time steps. The output \u001b[36my\u001b[39m gives the hidden state (of the final layer\n",
+ " for multi-layer RNNs) for each time step. The fields \u001b[36mrnn.h\u001b[39m and \u001b[36mrnn.c\u001b[39m\n",
+ " represent the hidden states of all layers in a single time step and\n",
+ " have size (H,B,L/2L) where L is numLayers and 2L is for\n",
+ " bidirectional RNNs.\n",
+ "\n",
+ " \u001b[1mbatchSizes:\u001b[22m If \u001b[36mbatchSizes=nothing\u001b[39m (default), all sequences in a\n",
+ " minibatch are assumed to be the same length. If \u001b[36mbatchSizes\u001b[39m is an\n",
+ " array of (non-increasing) integers, it gives us the batch size for\n",
+ " each time step (allowing different sequences in the minibatch to\n",
+ " have different lengths). In this case \u001b[36mx\u001b[39m will typically be 2-D with\n",
+ " the second dimension representing variable size batches for time\n",
+ " steps. If \u001b[36mbatchSizes\u001b[39m is used, \u001b[36msum(batchSizes)\u001b[39m should equal \u001b[36mlength(x)\n",
+ " ÷ size(x,1)\u001b[39m. When the batch size is different in every time step,\n",
+ " hidden states will have size (H,B,L/2L) where B is always the size\n",
+ " of the first (largest) minibatch.\n",
+ "\n",
+ " \u001b[1mHidden states:\u001b[22m The hidden and cell states are kept in \u001b[36mrnn.h\u001b[39m and\n",
+ " \u001b[36mrnn.c\u001b[39m fields (the cell state is only used by LSTM). They can be\n",
+ " initialized during construction using the \u001b[36mh\u001b[39m and \u001b[36mc\u001b[39m keyword arguments,\n",
+ " or modified later by direct assignment. Valid values are \u001b[36mnothing\u001b[39m\n",
+ " (default), \u001b[36m0\u001b[39m, or an array of the right type and size possibly\n",
+ " wrapped in a \u001b[36mParam\u001b[39m. If the value is \u001b[36mnothing\u001b[39m the initial state is\n",
+ " assumed to be zero and the final state is discarded keeping the\n",
+ " value \u001b[36mnothing\u001b[39m. If the value is \u001b[36m0\u001b[39m the initial state is assumed to be\n",
+ " zero and \u001b[36m0\u001b[39m is replaced by the final state on return. If the value is\n",
+ " a valid state, it is used as the initial state and is replaced by\n",
+ " the final state on return.\n",
+ "\n",
+ " In a differentiation context the returned final hidden states will\n",
+ " be wrapped in \u001b[36mResult\u001b[39m types. This is necessary if the same RNN object\n",
+ " is to be called multiple times in a single iteration. Between\n",
+ " iterations (i.e. after diff/update) the hidden states need to be\n",
+ " unboxed with e.g. \u001b[36mrnn.h = value(rnn.h)\u001b[39m to prevent spurious\n",
+ " dependencies. This happens automatically during the backward pass\n",
+ " for GPU RNNs but needs to be done manually for CPU RNNs. See the\n",
+ " CharLM Tutorial\n",
+ " (https://github.com/denizyuret/Knet.jl/blob/master/tutorial/80.charlm.ipynb)\n",
+ " for an example.\n",
+ "\n",
+ " \u001b[1mKeyword arguments for RNN:\u001b[22m\n",
+ "\n",
+ " • \u001b[36mh=nothing\u001b[39m: Initial hidden state.\n",
+ "\n",
+ " • \u001b[36mc=nothing\u001b[39m: Initial cell state.\n",
+ "\n",
+ " • \u001b[36mrnnType=:lstm\u001b[39m Type of RNN: One of :relu, :tanh, :lstm,\n",
+ " :gru.\n",
+ "\n",
+ " • \u001b[36mnumLayers=1\u001b[39m: Number of RNN layers.\n",
+ "\n",
+ " • \u001b[36mbidirectional=false\u001b[39m: Create a bidirectional RNN if \u001b[36mtrue\u001b[39m.\n",
+ "\n",
+ " • \u001b[36mdropout=0\u001b[39m: Dropout probability. Applied to input and\n",
+ " between layers.\n",
+ "\n",
+ " • \u001b[36mskipInput=false\u001b[39m: Do not multiply the input with a matrix\n",
+ " if \u001b[36mtrue\u001b[39m.\n",
+ "\n",
+ " • \u001b[36mdataType=Float32\u001b[39m: Data type to use for weights.\n",
+ "\n",
+ " • \u001b[36malgo=0\u001b[39m: Algorithm to use, see CUDNN docs for details.\n",
+ "\n",
+ " • \u001b[36mseed=0\u001b[39m: Random number seed for dropout. Uses \u001b[36mtime()\u001b[39m if 0.\n",
+ "\n",
+ " • \u001b[36mwinit=xavier\u001b[39m: Weight initialization method for matrices.\n",
+ "\n",
+ " • \u001b[36mbinit=zeros\u001b[39m: Weight initialization method for bias\n",
+ " vectors.\n",
+ "\n",
+ " • \u001b[36musegpu=(gpu()>=0)\u001b[39m: GPU used by default if one exists.\n",
+ "\n",
+ " \u001b[1mFormulas:\u001b[22m RNNs compute the output h[t] for a given iteration from\n",
+ " the recurrent input h[t-1] and the previous layer input x[t] given\n",
+ " matrices W, R and biases bW, bR from the following equations:\n",
+ "\n",
+ " \u001b[36m:relu\u001b[39m and \u001b[36m:tanh\u001b[39m: Single gate RNN with activation function f:\n",
+ "\n",
+ "\u001b[36m h[t] = f(W * x[t] .+ R * h[t-1] .+ bW .+ bR)\u001b[39m\n",
+ "\n",
+ " \u001b[36m:gru\u001b[39m: Gated recurrent unit:\n",
+ "\n",
+ "\u001b[36m i[t] = sigm(Wi * x[t] .+ Ri * h[t-1] .+ bWi .+ bRi) # input gate\u001b[39m\n",
+ "\u001b[36m r[t] = sigm(Wr * x[t] .+ Rr * h[t-1] .+ bWr .+ bRr) # reset gate\u001b[39m\n",
+ "\u001b[36m n[t] = tanh(Wn * x[t] .+ r[t] .* (Rn * h[t-1] .+ bRn) .+ bWn) # new gate\u001b[39m\n",
+ "\u001b[36m h[t] = (1 - i[t]) .* n[t] .+ i[t] .* h[t-1]\u001b[39m\n",
+ "\n",
+ " \u001b[36m:lstm\u001b[39m: Long short term memory unit with no peephole connections:\n",
+ "\n",
+ "\u001b[36m i[t] = sigm(Wi * x[t] .+ Ri * h[t-1] .+ bWi .+ bRi) # input gate\u001b[39m\n",
+ "\u001b[36m f[t] = sigm(Wf * x[t] .+ Rf * h[t-1] .+ bWf .+ bRf) # forget gate\u001b[39m\n",
+ "\u001b[36m o[t] = sigm(Wo * x[t] .+ Ro * h[t-1] .+ bWo .+ bRo) # output gate\u001b[39m\n",
+ "\u001b[36m n[t] = tanh(Wn * x[t] .+ Rn * h[t-1] .+ bWn .+ bRn) # new gate\u001b[39m\n",
+ "\u001b[36m c[t] = f[t] .* c[t-1] .+ i[t] .* n[t] # cell output\u001b[39m\n",
+ "\u001b[36m h[t] = o[t] .* tanh(c[t])\u001b[39m"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"@doc RNN"
]
@@ -312,7 +657,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -342,7 +687,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -356,7 +701,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -391,13 +736,50 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "64×32 Array{String,2}:\n",
+ " \"The\" \"Fulton\" … \"term-end\" \"presentments\" \n",
+ " \"director\" \"of\" \"gifts\" \"from\" \n",
+ " \"local\" \"club\" \"who\" \"will\" \n",
+ " \".\" \"The\" \"of\" \"the\" \n",
+ " \"plans\" \"titled\" \"this\" \"fall\" \n",
+ " \"admitted\" \"for\" … \"''\" \".\" \n",
+ " \"American\" \"system\" \"patriotic\" \"apprehensions\"\n",
+ " \"of\" \"the\" \"Then\" \"cometh\" \n",
+ " \"the\" \"misdeeds\" \"is\" \"entitled\" \n",
+ " \"entertaining\" \"and\" \"from\" \"these\" \n",
+ " \"is\" \"merely\" … \"to\" \"the\" \n",
+ " \"is\" \"not\" \"that\" \"any\" \n",
+ " \"has\" \"said\" \"important\" \"that\" \n",
+ " ⋮ ⋱ ⋮ \n",
+ " \".\" \"But\" \"would\" \"I\" \n",
+ " \"not\" \"worth\" \"Constable's\" \"explanation\" \n",
+ " \",\" \"I\" \"carries\" \",\" \n",
+ " \"not\" \"hurt\" … \"happy\" \"to\" \n",
+ " \"you\" \"do\" \"away\" \".\" \n",
+ " \"west\" \",\" \"Water\" \"splashed\" \n",
+ " \"caught\" \"sight\" \"rapidly\" \".\" \n",
+ " \"city\" \".\" \".\" \"It\" \n",
+ " \"her\" \"life\" … \"him\" \"lead\" \n",
+ " \"dog\" \".\" \"that's\" \"the\" \n",
+ " \"what's-his-name\" \"got\" \"spent\" \"the\" \n",
+ " \"solid\" \",\" \"dislike\" \"them\" "
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"(x,y) = first(d)\n",
"words[x]"
@@ -417,13 +799,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "\"128×64×32 Knet.KnetArray{Float32,3}\""
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"embedlayer = Embed(length(words),128)\n",
"summary(embedlayer(x))"
@@ -442,13 +835,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(556, 10)"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# shuffle and split minibatches into train and test portions\n",
"shuffle!(d)\n",
@@ -459,22 +863,33 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 16,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "trainresults (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# For running experiments we will use the Adam algorithm which typically converges faster than SGD.\n",
- "function trainresults(file,model)\n",
+ "function trainresults(file,model,savemodel)\n",
" if (print(\"Train from scratch? \"); readline()[1]=='y')\n",
" takeevery(n,itr) = (x for (i,x) in enumerate(itr) if i % n == 1)\n",
" results = ((nll(model,dtst), zeroone(model,dtst))\n",
" for x in takeevery(100, progress(adam(model,repeat(dtrn,5)))))\n",
" results = reshape(collect(Float32,flatten(results)),(2,:))\n",
- " Knet.save(file,\"model\",model,\"results\",results)\n",
+ " Knet.save(file,\"model\",(savemodel ? model : nothing),\"results\",results)\n",
" Knet.gc() # To save gpu memory\n",
" else\n",
" isfile(file) || download(\"http://people.csail.mit.edu/deniz/models/tutorial/$file\",file)\n",
@@ -487,7 +902,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 17,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -503,52 +918,82 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 18,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "2.06e-01 100.00%┣████████████████████┫ 2780/2780 [00:32/00:32, 88.10i/s]\n",
+ "Float32[0.322172; 0.0997559]\n"
+ ]
+ }
+ ],
"source": [
"# 2.35e-01 100.00%┣┫ 2780/2780 [00:13/00:13, 216.36i/s] [0.295007; 0.0972656]\n",
"t0 = Tagger0(VOCABSIZE,EMBEDSIZE,HIDDENSIZE,OUTPUTSIZE)\n",
- "(t0,r0) = trainresults(\"tagger113a.jld2\",t0);"
+ "(t0,r0) = trainresults(\"tagger113a.jld2\",t0,false);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "9.81e-02 100.00%┣████████████████████┫ 2780/2780 [00:32/00:32, 86.17i/s]\n",
+ "Float32[0.246886; 0.0693848]\n"
+ ]
+ }
+ ],
"source": [
"# 1.49e-01 100.00%┣┫ 2780/2780 [00:19/00:19, 142.58i/s] [0.21358; 0.0616211]\n",
"t1 = Tagger1(VOCABSIZE,EMBEDSIZE,HIDDENSIZE,OUTPUTSIZE)\n",
- "(t1,r1) = trainresults(\"tagger113b.jld2\",t1);"
+ "(t1,r1) = trainresults(\"tagger113b.jld2\",t1,false);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "4.25e-02 100.00%┣████████████████████┫ 2780/2780 [00:34/00:34, 81.05i/s]\n",
+ "Float32[0.191677; 0.0494141]\n"
+ ]
+ }
+ ],
"source": [
"# 9.37e-02 100.00%┣┫ 2780/2780 [00:25/00:25, 109.77i/s] [0.156669; 0.044043]\n",
"t2 = Tagger2(VOCABSIZE,EMBEDSIZE,HIDDENSIZE,OUTPUTSIZE)\n",
- "(t2,r2) = trainresults(\"tagger113c.jld2\",t2);"
+ "(t2,r2) = trainresults(\"tagger113c.jld2\",t2,true);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -561,13 +1006,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 22,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeXwTZfoA8OedyeS+e5/hKhTKfUpBFLzwaCvqeizq6up6sniu4ArF9QZXFMXfuh71WnG9QFQQFbAouCJyFQoFCqW0paVXmjR3MvP+/giUkt5tkknb5/vx4yd533dmnoQ0T96Zd96XUEoBIYQQ6q8YsQNACCGExISJECGEUL+GiRAhhFC/hokQIYRQv4aJECGEUL+GiRAhhFC/hokQIYRQv4aJECGEUEiYzeasrCyj0ZidnW02m1s24Hk+PT29ecm0adPIGffcc0944sREiBBCKCSWLl1qMpkqKytTU1OXLVsWULtixYrMzMxDhw41lVBKi4qKysvLGxsbGxsbX3nllfDEiYkQIYRQSKxZs2bevHkymWzevHmrV68OqB09evTixYubl5w6dcrj8eTk5CQkJNx8881WqzU8cZJuT7EmCALP88GNJswq7ad0Uq2SU7TTpsYFlEKsAgCA8j6+rlISm9JU6/P5WJYlhIQ61F5BEARKKcuyYgcSKbxeL8dxYkcRKXieJ4QwDP74BgCglPI8L5FIxA6kyz744IO1a9cGFPp8vkceeeSiiy4KKFer1TU1NQqFwul0xsXFtZrYCDmbhvbs2fPwww8vX748NTX1oYce8ng8H3/8cSheRWAM3U6EPM97vd7gRhNma4rXj4sdNUCb0k6b14qYwxZ4bYoAAILT1rD0LuOTq5pqa2tr9Xp9b/w0h4Ldbud5XqvVih1IpKiqqoqPjxc7ikhhsVg4jlMqlWIHEhG8Xq/Vao2KihI7kC4rLCw8duxYQOGuXbt27NixcePGgHKVSlVXVyeXyx0OR0xMjN1ub7nD5omwucrKyoyMjPr6+mBF3o7uf4OzLNvbf/vfNPKaDttcNYBe9i0vl0sBAOTyBoaR8h5Gdfq7XiaTyeVyTIR+PM/zPC+Xy8UOJFL4Px5iRxEp3G43x3H4hvixLOt2u3vjuzFhwoQJEyYEFKpUqr1797ZsnJiYWFZWlpaWVlFRkZSU1OHOd+3a5XK5MjMzAUAqlcpksqDE3KF+fZri4wOrN5f+3H6b4XrCMXCw4fQPFklUgq+uMvShIYRQr5eVlZWXl0cpzcvLy8nJ8Rfm5+e31d5ut8+ZM+fgwYMej+fpp5+++uqrwxNnv06ENwyfM8t0fofNLk0m35adToRsdIKvFhMhQgh1LDc3t6CgICUlpbCwcNGiRf7CmTNnttV++vTpS5YsycrKSkpKMpvNS5cuDU+c/fqc3nHLCYfXOTImvf1ms5PJ6weEh0cxgD1ChBDqNL1ev27duoDCgCuCzZ8SQu6777777rsvHME10697hIQQCkKHzS5OYrZXU5sXAEASFc/XVYU8MoQQQuHSr3uEA3WpnWmmksDEGJJfSa9KJYqx58szzgt1YAghhMKmX/cIC2uLXtnx7860nJ3MbCgXAIBRqFmtIcRxIYQQCp9+3SPMiE7PiO7gAqHf5Skk+/uOT6IihBDqdfp1j7DBbXlrzwedaTnSQHgKhy3dnHwAIYRQxOrXiVDFqS4ecEEnG1925iYK839fdhXtDGVcCCGEwqdfJ0KOkbh5Tycbz04m/suEhOV8NRWhjAshhFD49OtECADflfzI005NHX5xEvPLKerwARsV78M7KBBCqK/o74nwgYl3saRTM6ZqORgXTbZUUkl0Io/31COEUF/R3xPhkp+XnrR1tnvnv4lCEhWPs6whhFCf0d8T4T/OX5Co7uxCOZenkG/LqSQ6wVdXBd1dvgohhFBE6e+J8LfKXeWNJzvZeLSR2L1wzC3XXnErFXr3osQIIYT8+nsiZAkrZaWdbEwALksmG8qp5sJrCNuv5yJACKE+o78nwgnxYwxyfefbX55y+iYKhBBCfUN/T4SrD63bcmJb59tfksT8VEldeFoUIYT6iv5+fu+aYVd2qb1eCqOMZEfB0fGuw6qpl4coKoRQ6Pz1r3/dunWruDFQSgVBYNlO3bsVZtOnT3/ttdeCsiuz2Xzrrbdu27Zt+vTp77//vsEQuGIBz/MZGRlFRUUB5fv3758yZYrdbg9KGB3q74lwX83B45YTWUMu6/wms5OZ38tt6SUbMREi1BsVFxffcccd06ZNEzuQSLRt27b169cHa29Lly41mUyff/75I488smzZsueff7557YoVK1atWnXo0KGArSwWy2233eZwOIIVRoe6nwh9Pp/L5QpiKKKIlhh0eo3NZuv8JhdEkb/vj72httJms9ntdo7jJJL+/nvCz+Fw8DzPMP39fHsTu93epY9W32a32yUSiSCIf4md5/nBgwePGzdO7EAiUWVlJc/z7Xxut2zZsnNn4GTLhw8fbjUdrFmzZu3atTKZbN68eTk5OQGJcPTo0YMHD87KympeSCm97bbbFi5c+Ic//KEHr6NrevQNTnv/vXQssNWuWoNM1/lNxhjoUWLkHTbqcdMzQhdhL4LvRgB8N5rzvxX4hvQK7fwzuVyuhoaGgEK73d7qJhUVFSaTCQBMJlNlZeA8JDNnzmy5ydKlSwcPHnzdddd1Oege6H4ilEgkGo0miKGIotFmL7aXjEke2aWtLknh7Ufj4j02tVqt0WiwR+jHMAzP833gUxEsNpsN340mgiBwHKdUKsUOBCLzylzkYFm2nc/ttddee+211wYUrl+/fuXKlS0bU0oJIf4HPN/xIMMff/xxw4YNP/zwQxdD7qn+fhYrUR1/7bCsjtuda3YyKeXicMZRhBBqR2JiYllZGQBUVFQkJSV12H7Tpk1btmyRSqX+9EkICc+wpv6eCG0e+0ObFnV1q8uSmR8kIzx4EwVCCLUtKysrLy+PUpqXl5eTk+MvzM/Pb6v9M8880/wKC6V0+vTpYYizvydCtVT18kXPdHUrowy2pV//e/SUUISEEEJ9Q25ubkFBQUpKSmFh4aJFp7scrV4aFBde3II1h9ddNfhSjuW6tJV/JYpRA0MUFEII9Xp6vX7dunUBhQHDatoamBPOcVX9vUcIAEZ54D2enXF5Cvm2DMe/IYRQr4eJEM5LmsgyXR5FNjGaDKjeUx6meQ8QQgiFCiZCeH3nOyesFV3diiGwrHT59hN4uzRCKAgIIX/84x+bl8ydO9c/eNJf2+omEolEIpHIZLLJkyfv2bMnHIH2RZgI4eHJ9w7QpXRjQ8GYcOhEbdDjQQj1T/n5+W632//Y4/G0M7qyic/n8/l8VVVV2dnZd911V2jj67swEcLaI9/urS7sxobG+ARzdY1X/BmjEEJ9wfTp05vuJd+8eXPnZ0M1GAwPPPDA/v37QxZaH4eJEGakTE0zDOrGhqrY+LGk6qsTOGQGIRQE11xzzRdffOF/vGbNmjlz5nRyw9ra2uXLlw8fPjxkofVxePsEuHmP0+dScoqubiiJSpgh+eX2vXD9EGjl/D1CqJc4YqF/+y1M53aG6mDZ5NZH51155ZWPPPKI1+tlWXbDhg3Lli3rcG9N1w5Hjhz5wQcfBDPQ/gQTIZxsrPIJvkR1fFc3lEQnxLmqOAa+LhWyTdi3Rqi3ipaT24aG6desUdbmgTQazYQJE/Lz85VK5ciRI3W6jhcDwEnMgwITIYyPH929DbnUodxNjy10wz92C1kmBjuFCPVSBhlcHRm/Zf1nR9VqdefPi6Kei4h/e3HtrNr7xu73urEhYSVEpswxEZ8A35Xj7zKEUE9lZ2d/8803X331VXZ2ttix9CPYI4QJ8WMmxI/p9uYE4O9jmX/s4mcn45uJEOoRo9E4YsQIt9sdGxsbUNV8uTefzxfeuPo47BGC2dXw7bFN3d6cej1/GMjYvLDpJHYKEULd1HS17/vvv9+yZUtAIaXU10xALeohTIQgZaVRiu5MNwoAwvFC8ztPMgQWjGGe3o3LMiGEUO+DiRCUnGJ41NDubcskDvaWHaEe102DmUoH/FSFP9AQQqiXwUQIPoF/Ztvybm4slXOJA90lB1gCC8Ywz2CnECGEzjCbzVlZWUajMTs722w2t2zA83x6enrzkg0bNowYMUKv148YMeL7778PT5yYCIFjJEtn5nZ7c2naWPfhPQBwyxCm2ArbTmGnECGEAACWLl1qMpkqKytTU1Nbzg+wYsWKzMzMQ4cONZUIgjB37tzXXnutvr7+qaeeuv3228MTZ/cHOgqC4PV6gxiKiF7d9datGTfoZdqubujxeKQDMlzr35VfOhcAHskgz+wSvpzVT3Oh2+3meb5p1mDk8Xjw3WjidrsFQWDZLi95FnQ4xqR9giC087ktKSkpLy8PKNyzZ0+rA1nXrFmzdu1amUw2b968nJyc559/vnnt6NGjBw8enJWV1VTi8/k+/PDDWbNm2Ww2mUym1+t79lI6q/uJ0Ofz2e19ZDm+HNNs1svYfV1+OXa7nTMm+mpO2mqqiFJzXTwsLVBvLXeNM/THc6QOh4Pn+Uj4posQDoejz/yN9JzD4eA4LhKSEM9H4p8nIaTpb4dl2VGjRr3++utTpkzxVy1ZsuTJJ59s3tj/TrZT1W2CILTzuf3666+//PLLgEKz2RwdHd2ycUVFhclkAgB/vzCgdubMmQElUqn0iiuusNlsWq2WELJ169buvIBuoIjSorojZldDNzasrq72er2ekyWCz+sveXU/f/X3vqBG12vYbDaLxSJ2FBHk5MmTYocQQRoaGux2u9hRUErp7Nmz169fL3YUgZp/GzudzhdffDEjI6OpSq1WFxQUtGzcTlX3rFu37vLLLw/WVkql0ul0UkrtdrtSqWx121YDttlszz777MSJE7saSffgNUIAgGJzicPr7PbmXMIAwp7uW/8lndlRS/fWi/+zFyHUS8nl8nvuuefEiRNNJQsXLrz99ttbPf3YTpXoEhMTy8rKAKCioiIpKanD9sePH//b3/4GACqV6o477jh48GDIQwQAHCzjd+XgS7ox6Xar5Cw8PJJ5djeuUogQ6iaHw/HWW2/NmjWrqeSxxx7jef6ll15q2bidKtFlZWXl5eVRSvPy8nJycvyF7Sw4nJiY+M4772zZsoVS+sknn4wbNy48ceKsYAAAqw58kaCKm2ma3qO9CAIwDADcM5xZVuDdb2ZGGnAiboR6Ab6+ujH/i4BCzUXXs7oo/+PGTZ/ylrrmtbJBIxVjz/c/dh8rdO756ZyNCaOfc/fpx5Q2rHmjqYY1xmkuvKbVMJrWVAIAhmGaXyHjOC4vL2/GjBk5OTkB9xu0UyW63NzcuXPnpqSkjB8//sMPP/QXzpw5k7ZxFVMqla5Zs+bhhx8uKSlJT0/Py8sLT5yYCAEA/jji2h7uoeHzlVxKmmrKZQCglMCDI9kX9gr/uRCHjSDUG3CcJDoxoIxIuKbHrCGWcLLmtYz67BpJjEIVuDk550dw81pW0+Y8Vk3pweVy/etf/5o3b97OnTubaseNG/fAAw/ccccdP/30U8CG7VSJS6/Xr1u3LqAwIAsGPL3ggguav+rwwEQIAFBUd8TqbpycOL7be+CS09yH9/gTIQD8NYMZ/In3sIUZqsNOIUKRjtUY1DNy2mmgHH9hO7VcwgAuYUCb1YS0v/OW5HL5vffeu3jx4oDyxYsXr169euXKlS03aacKdQgTIQCARqqWsdKe7EE+bJzlm3eBUv8vQZUE7h/BvrBXyJuBnUKEUJfJ5XKnM3AEn0wmy8vLu+SSS1q2b6cKdQgHywAAxKlioxTGnuyBNcQycqW3qrSpZH4G880JoaQRh48ihLojLi6uZeF555139913tyxvvwq1DxMhAECx+dgXh77p4U5kw8a5D+1qeqqTwt3DmRf24vBRhFDHWo4fOXnyZKtV//znP2mz5ZnaqkKdh4kQACA9Ku320Tf1cCfyoWNdh/c0L3loJPtFiVBqw88lQghFLkyEAAD1TvOL23t6kVmePlF7+S3NS4wyuDOd+WcBdgoRQihyYSIEANDJtX8Ze0vH7dpFZAppSlpA4aOj2I+PChV27BQihFCEwkQIAMAStrDmUMftui5aDremMS/tw04hQghFKEyEpx1tKBFoSNLVY2PYD44I1d2fyhQhhFAIYSI87daRNxDS45vfBaHqmdup+5ykF6+AmwYzy/dH4sovCCGEMBGe9sH+T34p39HTvTAMa4hzH90XULxgDPNWkVDj6unuEUJ9Vas/xJsKCSGSM2Qy2cSJE7dv395U1Xw9woCt2qpCzWEiPO3WkTdMS57c8/20vIkCAJJV5LqBzKuF2ClECHXBggULmh77zrBYLDfeeOMdd9zRVPXSSy/t2xf4+7vDKtQEE+FpHt7zyo5/93w/AbfVN3liLPPGQcHs7vkREEL9xQsvvNCysM+sVhg5MBGeJmWlWWmXBWE/yWm8pY63mgPKU9UkK5VZeQCHjyIUceqd5p1VewHg+5J8ACg2l5Q0lFKgG49vAYAdlbsb3JZgtWknjCVLlsTExGRmZhYXF/tLWj2T2WdWK4wcmAjPUnOqE9aKnu6FYWRDRrmPBJ4dBYAnxjIrD/CN3p4eASEUXF7BZ/c6AMDitgKAy+d28W5KTz+1eey8IASrTTthCIJQWVl54YUXzp8/v2UtOUOlUj366KPNz5r6lyR85plnioqKArZqpyoMzGZzVlaW0WjMzs42mwO7BwDA83zAGopr164dOXKkXq+fMWPG4cOHwxQoRWf8XrlnZ+XeLm1SXV3t9XoDCj3lR711Va22n/uj7/k9fDfji3g2m81isYgdRQQ5efKk2CFEkIaGBrvdLnYUlFI6e/bs9evXix1FIAA4evQopbSmpkar1TYVBjyglDqdzuXLl48fPz6g6oknnsjMzPSfBe2wqi3r1q27/PLLuxp8W1stWLDg/vvvd7lc999//8KFCwNqX3nllcmTJzcPqbS0VK1W//LLLw6H48UXX8zMzOxqJN2DPcKzJsSPGRc/quf74ZIGSYytTBsPAE+MZV7ez9uwU4gQagPDMBzHtdPAv1rhoUOBc4AsXrzYbDa3tVphW1VdxfO8uwWvt/UvtTVr1sybN08mk82bN2/16tUBtaNHjw5Yc/HYsWM33njj1KlTFQrFn/70p5avMUS6vx6hy+Vqtavbqz2z++VHRt2rkMg72b6urs7lckkknX0b9QDnGbT//M1+96A+eIO9w+Hged5ut4sdSKQ4deqU2CFEEKvVynGcQqEQOxDweDxih9C69957Lzc3d/ny5TNnzmy/ZUhXK/R4PJWVlW3VPvPMM2+99VZAIaV00qRJLRtXVFSYTCYAMJlMLffZ8mVeeOGFF154IQDwPJ+bm3vDDTd0JuCe634ilMvlCQkJQQwlEryesKxL7SUSicFg6HwiBIBnZHT2Bn7BFL2izy2KbLfbeZ7XarViBxJB+t7fSLcplUqO45RKpdiBgFTao1W4Q4fjuISEhIyMjA8//LDDxu2sVtjq0Jh2qgJIpdJ2Prevv/7666+/HlC4fv36VrublFL/eB9KKc939v6xjRs3PvbYY5deeukzzzzTyU16CE+NnqOo7shXRzb0fD/u4gLzxy+3WjXKSK5IITPX+8pwJm6E0BmU0sWLF9fU1OTn56ekpDQVBjxo0itWK0xMTCwrKwOAioqKpKSkDttTSh9//PGnnnrqv//97wsvvNClPkZPYCI8R4I6LjMYt9VLYlOc+7ZBGyPE3jqf/fNQZspa33flmAsRQn1WVlZWXl4epTQvLy8nJ8dfmJ+f31b7X375Zc2aNV999VViYqLNZrPZbOGJExPhOXQybbW9xuHt6QU8VmtgtVGeiuK2GtyVznwyS3LHz/zCHbyA2RAh1Bfl5uYWFBSkpKQUFhYuWrTIX9jOFdD8/PxDhw4ZDAbNGeGJExNhoKK6YqcvCLOCyoaNcx/a3U6D8+PJ7jmSnbX0km99uDYFQqjv0ev169atKy8v/+qrr3Q6nb8w4PRs86dPPPFEwI0N4YkTE2Gga4ZdaVToe76fVicdDRAjhw2zJefHk8lrfb9WY8cQIYREgIkwULG55J/bA8dEdYNsyBhPaRH1djBQmyXw5Hj2tUxmzg++FftxAjaEEAo3TISBhhgG/m3KvJ7vh8gUxrmPQucW+81KZX7NkXx0VLg5n7fj7LgIIRRGmAhbsfbIt4fq2hzn0nmK0dOItLP35pvU5KerJAoWJn7pO9CAp0kRQihMMBG2YmL8WJMuOfzHlbPw1vns42OYmet8nx7D06QIIRQOfW52k2CIUUYV1R0ZHZshytFvTWNGGcl1G/lNJ+nKTJbD3yoIBdvWrVtxLsBW7d7d3lj3vgoTYSu8gm9fzcGgJELrtx9IU4fJM6Z0aatxUWT3NZLbt/Cz1vs+mcUmKltZkwwh1D2LFy9evnx52CZ0bhWl1Ov1RuZkb9OnTxc7hHDDRNgKFaecm3EdBUqgpxmIyFWugzu6mggBQMvB5xezr+4XJn7p++ACycVJmAsRCo7MzMzMzExxY/B6vRaLJTo6WtwwkB+ed2vdp0VrN5du7fl+5EPHutq9rb4dBOCBkczHMyW3/cQ/uQsnoEEIoZDARNi669NzLjKd3/P9cImDqMvB11d3ew8XJJBfs9kfKug1G/naIMx4gxBC6ByYCFsnUGH5b/8Sej7BDyGytNGuIx1MMdO+ZBXJv1KSpoX0z7xLdvKWCF1MDSGEeiVMhK1jCHP10CtIMC7MyYaOc3c011qHOAZenMLumiOpcsLQz7xP7uIbcZl7hBAKBkyEbdJK1aWW8p7vRz58kmLMtJ7vBwBS1eTf09ktV0qOWSHtU+/SvYKrs0tdIoQQah0mwjZV2Kqq7TU93w+ri1KMDk4i9EvXkw8uZDdeIdlZS4d95nuzSPDhzfcIIdRdmAjbNCY2Y1LiOLGjaNNIA/n0IvaTWeynx4S0z3xvFgk8DitFCEUSs9mclZVlNBqzs7PNZnPLBjzPp6end6YwpDARtufx/KfNLovYUbTnvFiy8QrJhxewHxULY1b7PivBmywQQpFi6dKlJpOpsrIyNTV12bJlAbUrVqzIzMwMmNmg1cJQw0TYnhcuzDXIdT3fD+V9tf9eRPlQrSsxPZ5suUryynns83uEqV/5vj6Bp0oRQuJbs2bNvHnzZDLZvHnzVq9eHVA7evToxYsXd6Yw1Ei3lwD2eDxWqzW40USaUlt5YX3RFakXt9Wgrq5Op9NJJB1P0ON++wnp7NtIclpQAwxEAb4+yT13QB4lFZ4Y4c6MDuuSTg6Hg+d5jUYTzoNGslOnTsXFxYkdRaSwWq0cxykUCrEDiQher7exsdFoNIodSJe98cYbn376aUBhY2NjcnLyzz//HFCuVqtramoUCoXT6YyLi2s1ZRDSShpqtTB0uj/FmkQi0emC0FuKZAMVbLwhTqds82V6PJ5OJkJb+gQ4eUSdMTGoAbbiFh3MTYc1J5gHf5cM0sJz42FcVKiPeZpEIuF5XqvVhul4Ec/hcPT5v5Eu4ThOqVSKHUVE8Hq9ANAbPx633HLLpZdeGlC4bdu2DRs2tGxMKSWE+B/wfOSOce9+ImQYhmH6+JlVI2c4VFespRqNVN1qA47jOI7rTCJUDBvfuPET7opbgx1j624cAnMGwptFwtWb+eF6cs0A5moTSVKFdsJSjuMYhuE4LqRH6UX8Hw+xo4gU3BliBxIpeum7YTKZTCZTQGFtbe0PP/zQsnFiYmJZWVlaWlpFRUVSUlJYAuyOPp7Jeu5QfbHD6+j5fmSDR3nKi6nb2fNddfaILPw1gzl2Azc/g/mtho5Z7Zv6le/FAuGoFcfTIITCISsrKy8vj1Kal5eXk5PjL8zPzxc1qFbg6hMdyE6bTSEImYNIZdKUNPex/fLhk3q+t86Ts5BjYnJMwFP2f6foZyXCjG8EvRSyTOSqFGZafFAmz0EIoVbk5ubOnTs3JSVl/PjxH374ob9w5syZ4bz+1xmYCDtQZq14f98ni6Y93PNdaWb9gdWKdm2cJTA9nkyPZ18+D3bX0a9PCHf8zHsEyE4lfxjIZMYRBlMiQiio9Hr9unXrAgoDsmCrSTHMmRITYQdStElByYIAIB8R1r5gWxgCE6LJhGj2yfFQaKaflQgP/sqfsNHZycwfBpHZyQyH58sRQv0Jfud17Ntjm/bVHBA7ipDIMJAnx7O/Xy3ZmiUZYSBP7xYSV3n//BP/9QmcxRQh1F9gj7BjY2Iz9LLeN8q5S4bqyMIxZOEYpsxO1xyny/cJc3/kp8WRS5OZS5NIhgFPmyKE+izsEXYsRhl92Hw0KLvyHD/YuPGToOwqRFJUZH4G8+OVksq53COj2FNOev0mPv4j7/Wb+DeLhMogjJ9FCKHIgomwEyjdc2pfUPZE5CrbL4GXjiOTSgIXJ5EXJrGF10l+yZZcnEQ2VtCRX3gnfulbuIPfWEE9OI8bQqhPwFOjHeNY7rZRN1GgBHp6hpCLTwVB8NVWSqITghJbeAzSkLvSyV3pwFN2Tx3dWEGf3MUX1NMpseTiRCbLREbo8dwpQqi3wkTYKWuPfMsx3BWD25x0tPNkaWPch3f3rkTYhD094pQsGMPUuGBjhfBdOV1RyKsk5LJkMiOKTI4iOMEaQqh3wUTYKTlplwdrV/K0sc4Dv6kyrwjWDsUSI4ebBjM3DQYAtqCefl9B/32E/cuvEgnjHaIlaTqSpiVpOkjTkiFaYpCJHS4SFU/h11rWJjDxWmqUgVFGDDKQ4pUZFBkwEXYKBfrKjn/Pm3Anx/T0HZMNG9+w9i2gFPrQpC6jjWS0kdw7yMfzvFuqPWKhR6z0iIV+VQpHrEKxhUpZGKIlaVoyVEeGaCFNR4ZoiU4a7jgbvXDCRuOVJAoTc1hYPPBdufD1CfptmZCk4BKVYPHxZg/Uu2m9G+QsGKTEKAOjDAwyYpSBQQZG2TklRhkkKgne24pCChNhpxAgOWmXs4Tt+a5YXZT6gjnU4yKyvrkeTYwcYuQkM+6cNH/KCU3ZcfVxOGIViq1UKYE0LUnTkWE6kmGADAMZoA7yBDduHvbU0d9r6Y4auqOGnpHthF0AACAASURBVLDTFBWpclI3D6lqkqyCZBVJVUGKmiSrSIoKUtRE2/umQY44xxrp16X0mzJhezWdHk+yU5nnJkm0PivHcUrl2d8gjV6od1OzG+rdYHbTejeYPVDnosca/SVCvRvMbqhx0XQ9GR9FxkWR8dFktJEo8XsLBRV+oDpLL9OWWk4M1AdOu94N2ktv6vlOepc4BcQpyPT4c7JcpQMOW2ixlR620DcO0gMNUOOkw/VkpJGM0JNRRjJcDyZ11xIjT6HQfDbzHWyg6XoyKZqcH08eGsVk6ImEAQBw+KDURsvtUG6nJ2zwazUttwtlNjhhpwxAipqkqiFZRZJVxKSGZBVJUgJPof1JBiweEM6dFspcz42Q02SVCH3f8OMp/FpNvz4hfHOC1rroVanM/SOYLy9hVGe+YyyWwE00HGg4Yjq9skub/9BOHxTU0911dFcdzTssHGygAzWnk+K4KDIuql+8vSikMBF2VpW9ut7VEJREiPwSlJCgJBcknP0GbPTCATPdb6YHGujGfUJhAzR66AgDGWkgGaf/g0TlOd+YFKDYQnfU0t9r6I5aureOJqvIpBgyMZr8KY0ZG0XkrXXjlRIYrifD9dDy+9figTI7PWGDcjstt9PNJ6HcLpx0gISArN0zAnpp4Nlup0tpPsSX26mPQqqaJCggWUWSVJCoJKlqSFCSZBXEKQjbm8+RN3rhu3LhmxN0fZmQqCRXpZJ3zmcnxQSzZ6+QwJRYMiX29B69AhSa6e46uquWflEi7K2ncQoy/kxeHB9NYuRBO3TQNXrhiIUWW2mRGSqt8nEJgv+DrcdcLqqwrgLcBwTcRFFTU2MwGDqzHmFr+6INa9/SXnw9o9YHLT5R2e32oC/Ma3ZDoZkWNtBCMy000/1m6hVgpIGM0BODDHbW0h01VC8jk6LJpBgyKYaMj46gc5uVlZUJCQkAYPfBCRutdPiTK1Q66Ak7VDpouZ3WuSBGQVJUkKgkySpIUpFEJeikoJIQnRQ0HKi5048jyvFG+k0Z/bpU+LWaTo0j2anMlamk/e67xWIJxcK8AoXDFrqrju6qPZ0dNRwZF02mxZHsVJIu3o09dt/pnHfECsUWesRKD1tooxfStGSIjgxWCwrBVeFT7jPTA2aqlZIMPfjPhYw0kBEGoomYj3FnrF+/fuXKlevXrxc7kG7CHmEXLPl56X3jb49TxQZnd4QwCnXN/z0e89cXGUXrC/8ig8y/aMbZr7NaF+wz04NmWu+GB0cyk2Iiugfgp2q7A+oToMpJy+xw0k7L7VDhoAX1YPFQuxesXrB6weY9/bh5UtRyoDr3sYYjg7WQoSeDtCHpYp5ywp46uqeO7q6je+qo2UOvTGHuHs58cTGjFvUrmyGQrifpevLHwadLjjXS3bX0x0p66beCQgI5JpKdykyNC2HP2+mDI1ZabKVHLFBs9V8Lh3o39Q8KS9PCebHkljRmiBaSzyyO7fUKFos7Olrjf1pqowfMsN9Mf66ibxwUDjbQGAUZoQd/UhxpIMP1eGU0hLBH2CM96hECAEDDl296y4uj736GcBH2m7/rQtEj7NWaeoRB0TwpWjxg953z2OqBI1Z6wAyVTpqmJcP1ZISBDNfDCD1J05Gu3qggUCi2nk17e+upm4dxUWTsmf9G6Lt88jNEPcL27aqlX50Qviql5XZ6VSqTbSKXJjE9zyj+S9G/Vp/+r6SRDtL4bxmCITqSpiVDtJCibm9cuNfrtVgs0dHRrdYKFI7b6P56eqAB9pvpATMtstBEJckwkDQt+K9zazgiaXYAOQuKZq+LIdD8LIKMgYEaMlgbqmzaVo/QbDbfeuut27Ztmz59+vvvv28wGAIa8DyfkZFRVFTU+U1CARNhF5ywVvxS8duNw+c0lfQ8EQKl9R8vp47GqD8vBiYIo1JFhIkwQHATYSc5fVBkoQcbaKGZFjVAoZmesFOTmozQk+F6yDCQdD1J1xGFJHCr/ebTaW9PHd1nprHyprQHY4wktYujlloSJRE2OWGjX52gX5UK26vpBQlMtolkpTJxXRm4Xe2E7TXC9mr6v2r6ew1NVJHzYk//N9LQ5e5m+4mwJZ7CMSvdZ6bHGoEXAACsXso3+/J28eD0ndPe6jn71MnTo1Y41kijZGSwFgZryRAtGayBwVoyWEuMPb6bqK1EuHDhQpvN9tJLLz3yyCMajeb5559vXrtixYpVq1b99ttvzdNQ+5uECCbCLrB7HVZ3Y4I6rqkkCIkQgPK+ureWsMY4w/XzexyjmDARBhAlEbbkEeCIhR5ooAcb4ICZHmygR6w0UUlG6EmaDqocsKeOlthouu505htjJGNDMBRT3ER4NgwPbCgXviyl35cLQ3Ukx8RktzFHoFeAvfVnu311LnpeLJkSS86LZabE9HSOiK4mwqCgAOV2etQKR6202EqPWuFoIz1qpQyBwRoyRHc2NQ7WQJKqC7m9rUQ4bNiwtWvXpqenFxUV5eTkHDp0qHntjz/+aLfbs7Kymqeh9jcJke4nQq/X63D0u8UISqwnouQGrfT0mf3a2lq9Xt/DRAgA4HX7jh+QpI3r6X5E5XA4eJ7XaDRiBxIpqqqq4uPjxY6iFT4BSu2kqJEpbmRiZHSUXkjXCqG+ad1qtXIcp1BEyu2zXgG21bDfVrLrK1iOgSsSfVckCalKYVc981sd83s9s6+BGaCik6KEyVHCBCM/VEuDeJHR6/VardaoqKjg7bL76tykxEaO2UiJnSk583+rFx5K9y0Y4Q1o/PXXX+fn5wcUlpWVud3uluVqtbqmpkahUDidzri4OKvV2vLohJyThjqzSdB1/xucYRiO61UDm4KhxHZCLVM1vXCO4ziOC0Ii5DhuxOSe7kRsEomkf34q2uL/eIgdRSs4gHQZpBv9zwgACxDy0/L+v5TIeUM4gEuS4ZJkunySr8BM1lWwT+yVVDhgYhRMjqZLxtLxBt+ZcUAkFOMKI+fjEc9BvBqmnn5GAXgAsHnBLZCWESYmJo4cOTKgkGXZ4uLilnumlBJC/A94vlOLfXdjk57r/r8uy7Kin+UIvznDr2x+B4VCoVAqlUFIhM1Q3kfYXjk+zP/B7Yefirb4Px5iRxEpvF5vJJwabdV5SjgvCZ4O429Rr9fr9Xoj893wayuyWbNmzZo1K6DQf2q0ZePExMSysrK0tLSKioqkpKTOHLcbm/QcTuHXNTWO2tyfXgjhASitee1R14EdITwEQgiFRVZWVl5eHqU0Ly8vJyfHX9jyDGqHm4QaJsKuiVFGPz3j8RAegBD9tffVr3rJfWx/CI+CEEKhl5ubW1BQkJKSUlhYuGjRIn/hzJkzu7pJqPXKU3Di2lT6s16mnRA/JkT7l6YMjfrTwrq8Z2LufZZLGtzxBgghFJH0ev26desCCgNGaAY8bXWTUMMeYZeNiBo6zDgkpIeQpY013DC/9q0nffWnQnoghBBCmAi7LE4VU2w+FuqjKEZlai6+wbzqpVAfCCGE+jk8NdodO6sKxsSNJG0vHBMU6ulXKSe2dzIdIYRQz2GPsMsYwtwxZm6YjiVXhedACCHUb2Ei7I4NxzavPfxtOI/oOV4EghDOIyKEUD+Bp0a7Y/agwPtJQ836/UesPsbwh78Grv2KEEKoZ7BH2E2v73zH6XOF7XBRtz3hrTjWsOYNwEnSEUIoqDARdtPlgy+WsuGbJ5BI5dH3PuspK67/6EUQwjT/HkII9QeYCLspSmEoaTgRziMyclXMvc8JNkv9h8so7+t4A4QQQp2AibCbTtlryqwVYT4okcqi7lgiiTeF+bgIIdSH4WCZbhpqHDzUOLi6pjrMxyWcVHvZH8N8UIQQ6sOwR9h9z/7y8kl7lZgRUEo94RuwgxBCfRImwu57IvOhJFWCiAE49/xc89pjgj0cKzgjhFBfhYmw+yptp1aXrBcxAMW4GfKMydWvPspb6kQMAyGEejVMhN1nkOumxk0QNwbt7JtVky+uefVRX52oJ2kRQqjXwkTYfXKJnCFMiSWsN1G0pLnoevXMa2tfX+CrCfcoVoQQaofZbM7KyjIajdnZ2WazucPa6urqm2++OSEhITk5+a677mpsbAxPnJgIe6TKUe3hPWJHAerpV2kuudF9ZK/YgSCE0FlLly41mUyVlZWpqanLli3rsPbPf/7zwIEDS0tLi4uLDQbDk08+GZ44Ce3ulF08z3u93uBG0+vU1tYqNMpGny1eFSt2LOKz2+08z2u1WrEDiRRVVVXx8fFiRxEpLBYLx3FKpVLsQCKC1+u1Wq1RUVFiB9Jlu3fvPnjwYEBhQUHB/v37N27cGFA+bNiwtWvXpqenFxUV5eTkHDp0qP1ajUZTXl6u0+kAwGw2jxs37vjx46F8Nad1/z5CQRCcTmcQQ+mNnE7nPmuRQARdvEbsWJqhVJS5uV0uF8/zHBe+mecinMvlwr+RJv6PB8FZ4wEAwOv1Op3O3vjxKCws/OGHHwIKKysrW/2XraioMJlMAODv+XVYO3HixBdeeGHBggUej+fZZ59tuUmIdD8RchxnMBiCGEpv5PP5LjEMlEgkNo9dLY2MtQMprfnX49pLbpSljQ3zkaVSKfYIm3O5XPg30oRhGOwRNvF6vQzD9MaPx5133nnnnXcGFK5fv37lypUtG1NK/QmSUsrzgZMkt6x977337rvvvpSUlNjY2Pnz5xuNxpC8hhbwGmEQ7D61b83hdWJHcQYh2tm31L3/vHPfL2KHghDq1xITE8vKygCgoqIiKSmpw1qVSrVmzZrGxsajR4+OHTt22LBh4YkTE2EQjIsbdcvI64WIWSBJNigj+u5nGj5b6dzzs9ixIIT6r6ysrLy8PEppXl5eTk6OvzA/P7+t2scee+zuu++2Wq2VlZULFy6cP39+eOLERBgcxxpK/7m9lTMDYpGmpEXf90LDl2/at38ndiwIoX4qNze3oKAgJSWlsLBw0aJF/sKZM2e2Vfviiy/W19enpKRcdNFFf/7zn6+55prwxImTbgfHQH3q386bJ3YU5+DiU2Pue74u7ynF6GmMQi12OAihfkev169bF3jZqOlWhZa1UVFRa9euDVNwzWCPMDgIkDpH/bO/LBc7kHNIYpNjH30dsyBCCLUDE2HQRCujHpx0j9hRBCKSszczNG7+vGH1v3BiUoQQag4TYTARIMt/+xeFSBk1E0A1+RJGqTm17N76j1701YXpBh2EEIpwmAiDSckprkvPIhChtwwzap129s3xj7/Jao3VL803f/Ya9g4RQggTYZAlaRJWHfhCoILYgbSJUet1WXfEP/EOo1ALTpvY4SCEkMhw1GiQsYQdpDeJHUXHGJVWd9XtZ58LvM9cI4nCiTERQv0O9giD77zEiT+X/crTwPmEIpm3srR6+Xzzxy/7avHaIUKof8FEGBJmV4OX701Lc3BJgxJy35fEJlW//EDde8/6qsvFjgghhMIEE2FIXD30ikp7tU/oTZ1CIlNoLro+fvG7XMKA6lcfadz4idgRIYRQOGAiDJXNx3+2uK1iR9FljFylvWxu/KI8xZjpYseCEELhgIkwVO4YM1chkXsFn9iBdAcjV0lizk4V7yk5IGIwCCEUUpgIQ+jdglXljSfFjqKnBIfN/Mkrtf/6u7eqVOxYEEIo+DARhtD9E+4YqEuN5HsKO4NRquMe+5dizPTa/3vc/Omrgs0idkQIIdQ1U6ZM+fjjj9uqxUQYWm/t/XBvdaHYUfQYw6oyr4hb8AZh2KoX7nbs2Ch2QAgh1AWxsbGbN29uqxYTYWjdOebmcXGjxI4iOBiVVn/d/THzljJao9ixIIR6AbPZnJWVZTQas7OzzWZzZ2q3bNkyduxYjUYzduzYn376KViR5Obm7tmz57HHHvv555+LmvHXYiIMLQLkqyMbNh0P2j+n6Lh4k3zY+KangqNRxGAQQpFs6dKlJpOpsrIyNTV12bJlnam9+eabn3jiifr6+r///e8333xzsCKZPHny77///uKLL86YMWN4M/7a7k+xRikVhN599avneJ7neZ6Q9mbZnpV6vkIi5/nedE9hJwlOW+3SexSTLlJddAMjV/JniB1XpMB3ozme5xmGwTfEr/f+sdTW1rbs25WXl7eaDtasWbN27VqZTDZv3rycnJznn3++w1qtVmuxWGw2W2Njo1odtLVUm1YDbhVpv7odbrfbYunv4ybq6up0Op1E0sHviT21+83uhplJffHOPKeN3/olX/irZFq2a3gmT6lGoxE7pkhx6tSpuLg4saOIFFarleM4hUIhdiARwev1NjY2Go297yrDq6++umrVqoBCh8MxZMiQrVu3BpSr1eqamhqFQuF0OuPi4qxWa4e1v//++6RJk/wNduzYMXHixJC9lLO6nwgRANTU1BgMhg4TYb3TrOAUCok8PFGFn6fsSMPqNwSPS3bZLYbR54kdTqSorKxMSEgQO4pIYbFYOI5TKpViBxIRvF6vxWKJjo4WO5DgWL9+/cqVK9evXx9QrlKp6urq5HK5w+GIiYmx2+0d1l500UUTJ0588MEHX3755V27dm3cGLSheV9//fWyZcsOHjwoCEJGRsbChQuvvPJKfxVeIwwHo8JQZTvVl64UBpCmpMXO/6dseraA6/0ihM5ITEwsKysDgIqKiqSkpM7Ubt++/aGHHkpISFiwYMH27duDFclnn312zTXXnH/++V9++eXXX399/vnn5+TkrF692l+LiTBMlJwizThI7ChCiRDp6OnchIuaCixfvln3zj8cv/2AA2oQ6p+ysrLy8vIopXl5eTk5Of7C/Pz8dmpHjx79zjvv2Gy2Dz74YMyYMcGK5Lnnnnvssceee+656dOnT5s27bnnnnv00UefffZZfy0mwjCJU8VqpJrfKneJHUj4aC77o2LM+c79v1Y99aea/3vctu0b3lovdlAIofDJzc0tKChISUkpLCxctGiRv3DmzJnt1Obl5a1fvz4hIeHzzz9/++23gxXJ4cOHp08/Z5TGBRdccOjQIf9jXJg3fJw+p693Tj3aPYxCrZw4SzlxFvW4XUU7nQVbwetRX3iN2HEhhMJEr9evW7cuoLBpYEqrtenp6du2bQt6JCaTqbCw8PLLL28q2b9/v8l0ehF1TIThk6iOj1PFHDEfSzP06XOkLRCpTDE6UzE6s3mh9buPAEAxehqXMECcsBBC/cZdd921ePHiuLg4/wCZdevWPfXUU08//bS/FhNhWNU66nZU7u5vibBV8vQJjt0/1b21BFiJbPBIYFh5+gTF6Gn+WlfRTmfBOb8KCSfTz7nb/5h63A1f/ptRqBWjMqWmYdDufZwIITR//nyfz/fQQw/deuutABAVFZWbmzt//nx/LSbCsIpTxf5xxLX1TrNRYRA7FpFJTelSUzpcfZe3vNhTdgQoZXVRTbWsxiBNHtK8PZFwZ58wjDR5CG+pM/93ueBxKcfOUIybIU0ZGrbgEUK9C8Mwjz766COPPFJTUwMAMTExzSdCwUQYbha39Y097/996oNiBxIpuOQh3Lk5DwC4pEFcUpv9ZiLhVJlXAID28lu8lcedu7eYP/pnzLwXGbUutLEihHqnKVOmPPjggzfddFNsbGzLWkyE4aaTaf8+9cESy4lK26nMpElih9PrcQkDuIQB2iv+1FQiOGy2LWsU42Zw8aYwB0N9Xl9VqeC0CU674LTT+jqfZEbzJY4RQqLwrz5x0003tVqLiVA0iep4p8/l8rkNcuzHBJXgox5X7b8XMzKFYtwFynEzJLHJ3dsT5X1Co5lwMkal9Zc49/3PXbxXcNqp0+ZPeKwuOvqup/y1vrrK+v++zCjUjELFyFXU6axZ+U3M/JckUfHBeWkIoW7Jzc297777HnvssaysrJiYmKby9PR0wCnWeqiTU6y1ZWv5dofXeenAC4MalGjsdjvP81qtVuxAAACAUk9pkWP3T849P7G66NiHXml1TA3lfUJjA6uLaqo1f/Yab67mG2qFxgbB0cho9Lqr/qycOMtf6z6821t5nPhTnf//Ki2rj2m5Z/BPsRYf37Rn6vNavnpbMfI86eBRhO13v0FxirXm+skUa5GjraUR/Bmw3/01RpTpyVMAYHPpz27ec/mgizpsj7qAEOmA4dIBw/VX3+U9VdaUjbynTtg2f8E3mnlLrWA1C45GRq2L+9v/NV1flA0ZzciUrD6a0ehZTeCYJtnQcbKh47oUxtnHvI/VRVnWv++rrpCPmKQYNVU+fBKR9tkZaBGKHO13+TARii8zaTIALWkotXkdo2KGix1On0MIF5/a9IyRyqUDR7BaA6uLYjRGVqMP6Ckqx10QqkBkCs1F12suup631rv2/2r/3wbzf1fE577HKIK21gxCqFVNg2VarcVEKD65RAYANq9DI1U7fS4CIO+761SIjjXEqs67TOQYtEZV5hWqzCuox9XUI6Rup+1/3ypGTZVERd6CFYLAN5r5hhreUs831PDWekap0cy8Fu/gRL0FDpbpHfx9wW+PbVJI5BemThM7HBQOzc+LCm6Xr7q8ZsXDjErHGuNYlZZR6zSX3NjUX+QtdYxcSWShWs+Petz+JMeba3hLrSQmUTHmfH+Vfft31g3/YXXRrC6KNcQwGj31uJqyoOCyW758i4tPlSQM4OJNze8HRShCtD9YBhNhZPFfKfy+5EcVp5qWPFnscFD4sFqD4fr58Ie/esqLeUudYLcIjQ2EYZsa1L39D++pUqCUUekYtY7V6FVTLlOMPZ2rfKfKvJXH/Y8Fjwt8XiJXKsdfeLrEabNt+ZJ6PU1PAUBzwRxJXIq/pPbfi93Fe1l9DKszsvoYVhdFuLNJWjX1ctXUs5M0BiCEkaYO9VaVOg/85qsspbyXizcZbniwaecIiW7y5MkA8Pvvv7/44ovNy3GwTOSalDBeIZGVNJQCwEB9uG+GQ2IiRJqSBilpLWtiH3kVAKjHLdgtvK1BaLRIos+eRHUfP+g6uMP/mJHKQcI13fIBAEApADDK051L/+0czTuXUX9eTDhpN0OWKfzzG/gJdqu3spTVnx0PWb3iYSLhqCGON8bxMjkjU3DJQ6Spp2cC4q31gtVMFErCckQqJ1LZObMIdYLgtIF/JITgE9xOIpW3HOWE+jkcLNP7+O8srLRXJ6njXT43x0pYwna4FeoPiFTGSmNZQ+DsGKopl6qmXNrWVoxSo519c3u77W4WbOVYKq1syKjmJVG3L/ZVlVpLigS7RXA7fG5n89Onrv2/2n5ZR50O6vNQr5u6XYxal/CPj/y1gs1Ss/Jv1Os9/dRpA6DGWx+Xp0/wl9S+mespOQD+07SMhJEpZMPGGa4/PYek68Bv5k9fZVQ6VqNnVDpGrWVUOs2F1xCprGmHOFgJYSKMXP55Zz49+GWKNnlq0kSxw0Gom1itgdUapHEDW72P0D9uqK1tiUJlvG0R4U73ERmFGoAQ2dnTtk2zGbRKNmx87IMvCzYL39gg2K2C3SLYrMCe/Vl56oW7+UYzq9IxKi2j1jEqnWrKpfIRp6d8cuze4i4uYOSq08FIZawuummwleCwOff8RDgZ4aRACKNQAYDUlN7U1RZcDhCEbvRx+wyz2Xzrrbdu27Zt+vTp77//vsFg6LC25Q1/QbnZnVL6xhtvrFq16siRI/n5+e+///60adOuuuoqfy0mwkj3h+E5BMi3xzYlqOPGxo4UOxyEwoqwkuZ3v3Rjc1Yfw+pj2kpECf/4iPI+wW4V7FbBZhHsVkns2SnxJPpoIXEgdTn8T6nHRd2OplrqdXvKi6nXTb0eoFRw2gFAP+fuppXF6t971nPiEPW4qc9LJByRypTjZ+qvu99fKxw/0JC/zz+tLhdvCtEdpdTn9VWX++qqJIaYlpP6htrSpUtNJtPnn3/+yCOPLFu27Pnnn++wtrGxsanBsmXLPB5PUCJ5//33//rXvz7wwANbt24FAKvVmpWVtXr16jlz5gDOLNNDPZxZpvNO2qqMckO1o1YjVUfslGyRNbNMBKisrExIiLx7IUTSz2eWoV4P9Xr86RAAvF5vw/EjipOHvCdLPBXHfNVlrC5aahpmvPmxoBzO/ut3zr1bfdXlvLVOEpXARsVLk4doL7/FX+s6sMP82WuMSsOq9YxSw6i0jEqrmXVdUzLmG2oZharzQ5Tbmllm2LBha9euTU9PLyoqysnJaVoRvjO1+/bte+ihhzZs2BCUL9gxY8ZceeWVzz33HCHk4MGDw4YN+9Of/lRUVPTbb79BT3qEbre7oaGh5/H1anV1dR6PJwyJkAVisTdsKd860jjco4wL9eG6x+Fw8DzvdDrFDiRS1NTUMAwjdhSRwmq1chynUITq9o/exev1NvqIMT0T0jMBQCLwtP6Ux1p76tSp0y0sdb6v3iCxKSQ2hcSlkphk4GTn7EIQqKUG6ippXSWtO0nrqpjxM5mM08tfU0YGI6dDVIJEFwMMwwM4AZxNOzckMTctpE6r12EDpw2cNrDbnbV1cGbmP99bj1NLHTNmBntJ4KXlZcuW5eXlBRT6fL7Ro0e3fJkVFRX+VeBNJlNlZWXnaz0ez5133vnuu+8G69v18OHDy5Yta3pKCJkzZ84tt5z+ZdD9Y8hksuZ3Y/Rb4ekR+s2N+QMAvLrzzewhlw/QRdzYdOwRBvD5fPg30kQqlfbnHmEAr9crlUrPmWs07pyZ2ale582+3XuyxHuyxFe4zXvqBKuLNt79jMR4+nfwqaduJSzHxiRx8amSYWPZmCQuaVDT5Uzo8IMX1+5E8H9/u62af/zjHwsXLgwo3LRp0/vvv9+yMaXUf82PUsrzfOdrX3rppcmTJ48YMaK9ILvCZDL5VyJscvz48dTU02fde/QNjr92mTPCedC/jL1VxSl/Pfn7iKhhWpkmnIduH8MwlFL8VDQJ/2cjkonyxxKxOn43ZHJ26Dh508S2Au+trpAYYsiZTeIXvyfK1O1qtVqtDhxnq9VqW53VOjExsaysLC0traKiIikpcD2ytmp5sM4TEgAAIABJREFUnn/jjTc2bdoUxLAfeOCBF154YerUqQDgdDq/+eabJUuWrFixwl+LH8reR8UpAaDGUSeTyDx8cK4kI4QiGsNy8anNM1+vWMAkKysrLy+PUpqXl5eTk+MvzM/Pb6cWADZv3pySkjJkSDCH9txzzz0LFiy4/vrrVSrVZZdd9tJLL/3nP/+5/fbb/bWYCHurrCGXyVjpkp+X2Tx2sWNBCKFW5ObmFhQUpKSkFBYWLlq0yF84c+bMdmoB4L333rv00jZviu0eQsgtt9yyc+dOm81WXV39448/ZmdnN9X2gt8UqB3PXvB3hjAfH1h97bCrpGzQ7olGCKGe0+v169atCyhsulWh1VoA+Oijj0Ie2bmwR9i7MYShQE26ZCkrrXeaxQ4HIYR6H0yEvR4Bkpk02Sv4Xt7xhoB3hSKEUBdhIuwjOEby9IzHPbx7xe//FjsWhBDqTTAR9ilSVpY1ZDYAHDEfEzsWhBDqHTAR9ikMIYP0pnqn+acT/xM7FoQQ6h0wEfZBRoXhjjFzyxtPrvj9TbFjQQihSIeJsM9K0iT8adQNTp/rpzLsHSKEUJswEfZZBIhepqtz1ktZDgDe3vsfsSNCCKFIhImwj0vWJJ6XOFGggn8tw//blWd29fc1QxBCqDlMhP0CQ5iJCWMB4MrBlxjk+k+L1m4r/02g1OVzix0aQgiJDBNh/2LSpQDAnKFXTk4Yd8R89J2CjwDghLVC7LgQQkg0mAj7I46RcCw3zDjkvvG3e3nvqsLPAWBfzQGXzyV2aAghFG6YCPs1AoRjuYVTHwCA3yv3soTdV3PwuKVM7LgQQih8MBGi024ffRPHci6fS8ZKyxtPfnt0IwDUOuvFjgshhEILEyE6x6SEcQnqOLlEPiwqDQD+uX0lAOSf2HbCWsFT3o3rACOEOs1sNmdlZRmNxuzsbLM5cHmcVmt9Pt99990XExMzbdq0ioowDV/ARIhaEa0wDtKbAOCFC3MBwCjX62Sa4vqSvL0fAcDnRV8DgE/gxQ0SIRThli5dajKZKisrU1NTly1b1pnaV155xWq1lpaWZmZmLlmyJDxxYiJEHRsdm6GTaYdFDbl3/O0AoJWpAeDdgo/2VO9vcFu2lm8XO0CEUCRas2bNvHnzZDLZvHnzVq9e3ZnaVatW/e1vf1Mqlbm5uffee2944uz+CvUej8dmswUxlN7IbDZTSiWS7r+NvdFE3Zj6+vprU68SKD1VW+2wOerr6//+63NPjH6guKEkXh8Xp4wRO8aI0NDQIJPJxI4iUlitVo7jXC4cmQwA4PV6rVYrw/S+rsh//vOflsvK19TUaDSalo0rKipMJhMA+Ht+naktLS39+OOPZ86cOWjQoHfffTf4L6A13f8Gl0gkKpUqiKH0Rk6nU6VS9bdE2JxGrR4QnQoAL164xOvyOixOqVxay5t/KM2/c9TN+2sPZkSnEyBihykOpVKJfyNNfD4fx3FKpVLsQCKC1+vleb43fjwuuOCClJSUgMJdu3b9+uuvLRtTSgkh/gc8H3gxpdVaq9VKKS0sLHz99df/8pe/tLrboOv+NzjDMPhrVyqVymSy/pwIm8hAZqf281OmarVan8DP1V4nk8l+rdo5IWnsuqM/DNSlphkH1zrqEtRxYkcaPv6Ph9hRRAqZTMZxHL4hfgzD9NKPx5gxY8aMGRNQKJPJdu7c2bJxYmJiWVlZWlpaRUVFUlJSZ2pjYmIefPDBhISEefPmvfLKK6F4CS31vo45inwShtXLdABw/4Q7AGBc3KhUbXKl7dR3JZsBIK/gI4FSp88lUEHkQBFCoZSVlZWXl0cpzcvLy8nJ8Rfm5+e3U3vZZZe99957brf7zTffnDhxYnjixESIQi5RHa+WqlK1SbeNugkAMqLTGUJWH/pmZ9Veq7tx4/EtAMBTHIOKUF+Tm5tbUFCQkpJSWFi4aNEif+HMmTPbqX3++ec3b94cFxe3adOmt99+Ozxx4jk9FG5TEicAwNyM6wCgzmnWSjUA8MAPT7x6yfMFNYVaqWagPtUn8ByDH06Eeje9Xt9yZA2ltJ3a+Pj4H374IRzBNYM9QiSmKIVhcuJ4AHj1kucZQhggconslL1m2a+vAsCXh9d7ea+b9+BJVIRQ6GAiRBGBIQQARsdmJKrj41WxT2Q+DABqqYpjue+Obd5c+rOH93xW9BUANHr6+007CKHgwkSIItfFAy4AgOy02RcPuMAn8CZtMgD8c/vrdq9jf03RnlP7AKCwtkjkKBFCvRwmQtQ7KDmF/yTqP85foOKUGqlKL9f7BD6/dBsALP311eOWshPWiu+ObQaA3yv3AE4ChxDqHEyEqFcy6VIG6FIkDOu/Q+ORyfenapPVnHKwYSAA7DpVAAD/Pbhma/l2q6fxvX0fA8BvJ3e5eY/V3Wh2WQBgZ9VeANhfU1TrqDO7LD+WbgWAD/Z/4hV8v1fu+ansfwCw6KfnAOCtPR8U1hadtFXlFawCgE+L1voE/qStqrzxJOACHQj1fpgIUV8gYViGEKPCMMQwEADuGnsrANyccd305ClShpuePAUAjllKGSCH6ot/O7kTzvQa65z1bt4jYVgpKwWA4VFDCZDBhgHDjIMBYP7EuwDg1lE3pkelRSuMVw6+BABildEShj1lrzllrxGo8MqOfwPAyp1v+7uk3xR/BwDfl+QDgM1nd+JaxwhFPNI0khV1Q01NjcFgwJll/Ox2O8/zWq1W7EBEYPc6ZKzM4XPUOOoG6wd8XvT1delZq3Z9PjBuwJjYjE2lP2UNuYwC7bezzQGAxWLBKdaaeL1ei8USHR0tdiDBsX79+pUrV65fv17sQLoJe4QIBYGKU0oYVivVDNYPAIDr0rMAYGbCtKlJE32CL14VCwAPbVzkFXwllhOn7NXiRosQag4TIUKhpZVpJiWMA4BlM5dwjKTMWtHosVU7av1XHE/Zqyn09KyMf8o6AHD6XAKlPgGXUEaoCzARIhQm/suQM1KmDjEM0ko1swfNAoD/2/UupbD95M6ShlIKtGVSpECtnkYAOFx/1OVzn7RV7T61DwD+tetdAFj9/+3dfXQTZd438Ctt05f0LQQK2NrWmwoU6Mrycrv3Yi1UFIQ1DaB7nj2ASB9c15U+x7UccVdZ2EVU2lVWHkBFjhFEpShLLVhEBFqgwGKhQLG0pVBq25C+JWnSZNJkMrnuP2bNZtPSN5pMynw/f6XXbyb5ZbiSL8nMZKoLv9eWmeym3H9uIYS8fW6bvtNwsbmcP+fyucPZhJBdV/aWNJ4zdBr/WvI3QsiG05t0VsPF5iv8Mh+X7/HhNgDwSxTuQEtLC8uyQnfhL8xms9FoFLoLP3Lr1q0+LlneUtFqabtuuPnOufcopZtLP6SUHqz5tujHEitrXXPiTUrpZxX7WhmdpkN7TnOBUnpBe5lSarZbrKy1Lw/BOZ0Ma6WUMqyVczqtbKfJ1sE5ubOaUv4Rm8zNNoeNc3IDeap90N7ebrFYvHTnQ47dbm9tbRW6i0FTWFg4b948obsYOBwsc0dwsIw7MR8s0y2tVnvPPff0axXW6ZAGBJW3VDwwcpKFZYIDpNJAqZfac9fCtMXIhn93s5h1OuaNebTGcGO84v7BfQgcLOMOB8v4FXw1CuBH+J8af2DkJEJIuFTmmxQkhIyUjZAQyZz/Sp+f9KjOqiu9dZEQ8s2No078RxlEAEEIAP8mIZIY2YilKb8mhNidbIBE8tW1Q3XGBi89HH/5LUOnsc2qd1LnsR9PEUIO1BxutrReN9Ty+y+f+yabEPJt7fET9WccTu7/n99BCPn6+rdtVn2zpeWft84TQk41nCWEtDBtOquBEsr/yoGh0+hwcgxrbWXaCCG17T8SQpotLXqrweHkLrX8QAi50nrVwjJtVv3VtmpCyIn6M156puDPEIQA0D3V2HmEkJSY5HsiRpU0nvuiqoAQorMael7LSZ1mu4UQUm/SOClts+o1HVpCyNmm84SQY3Un+R/l4UPuxe9edTi5q23VVbqaAEmAjtERQsYpksKCQhOi7l04fj4h5MN5mwghqfH/82Ds1ABJwNwx6YSQhKh7w4JCCZEESgIJIT8aGwkhV9uq602NNoftvTI1IeSzii9bmNaGDk1R/WlCCN9/pa6mztjgpNzFpiuEkNr2H+2c3cpaW9zC8tOKfReaLjOslc9XwS9+0sboCCEtTFu7zUgIMdpMwvZzFxJ6J+XQhoNl3OFgGQ99P1jG/3FOp5W1dtjMG06/Qyn9uPzzToet9NbFb2uLKKV/Kn6dUrrtwkdlTeWaDi1/yM/b57ZZWevFpvLTjecopTtKP7FYLBWt1a2Mzu6wa83NQj6fHtkcNrvDrrcajtadpJT+vyN/tDvsV1oqK9uuUUo7bOaB3a2TOimlmg6t3WHXGptO15yjlO6rOkgpPdNY+kNrJcNat5zfQSl9t/QDrbn5vPbS+2Uf058275GbRRebr+ithg2nN1FKv7p2yMpaWc4xGM+4e30/cup2B8vo9fonnnhi2LBhSqVSr9f3pTpjxgxXPP3ud7+7k/77DkF4RxCE7hCEHu6mIPRwufkHu8NutJl0jJ5S2sroel1l6B41yudBZdu1H40Nxk7T2pMbKaVfVBZ02Mxmu8VoM1FK7Q47pVTToWVYq47RX2y+QindWb6HUnq07mRJwzmbw7by21copR9d/lTToa3T1xdcOUQpPXTjKKW0rr2+ydzMObkafS2lVG9t7zXhjtaddFLngZrD39w45nA6Dt84dufPtLb9R6PN1GRu3ld1gFJ6rO5kH1e8XRC+8sorK1eu7OzsXLly5R//+Mdeq06nU6FQNDY2dnR0dHR0WK19OiL6zg38qFGHw9HZKfbfUWxra5PL5ThqlMcwDMdxkZGRQjfiL5qamkaPHi10F/7CZDIFBQXdNUeNnm++NHXk5PMtF812y6x7U18p+evfHv7LvusH/2f09JDA4Kv6azPjfnmuqezB0VM67GYJkUQGR7ivzrKsyWQaPnz4nXfipNTqsH7fXJZ+b+pf//m3l6dnGTrbOepMiIzrYS1DZ3tkcGQz09LMtE4d+cBrZ958Y8arxxtOJUTeGx8Z96OpYdywpG5XLCoqKi0t9Risqalpbm4+fvy4x/j48eMLCgqSk5OrqqpUKlV1dXXP1aamprFjx44fP766unr27NkffvjhyJEj+79J+u2OgtBqtQ5uN0MOgtAdgtADgtCdyWSSSqVhYWFCN+IXBjEI3dk4W0hgyOXWCmmg9L6o+PfLd66a+vtr7TcSI+N1nXonpaNlI7f/sGvlA//346t7Hk98JCggSGtpfmDERMZhlQX16Z/m6NGjZ8+e9Risra3V6XRFRUUe4xEREa2trWFhYVarddSoUSaTqefqpUuXsrOzN23alJCQ8NJLL9nt9j17fPGDDziP8I7gPEJ3OI/QwwDOI7yL4TxCdz44j9BJnfrO9hFhih2Xdy9L+T81+lqrw/rf90y5bqi9f9iYwX2s251HGB4ertPpQkNDGYaJiYmxWCx9r2q12kmTJun1vrjMGY4aBQC4CwVIAkaEKQghv538dEhgcEpMMv+bt4Oegj2IjY1taGgghGg0mrg4z69qu1bLysrOnPnXGSzBwcEhISG+6RNBCAAAXqFUKtVqNaVUrVarVCp+sLi4+HZVi8WycOHCyspKu93++uuvL1iwwDd9IggBAMAr1q5dW15eHh8fX1FRsWbNGn4wPT39dtXU1NR169Yplcq4uDiDwZCTk+ObPrFzCwAAvEIulxcWFnoMug5M6VqVSCQvvPDCCy+84KP+foJPhAAAIGoIQgAAEDUEIQAAiBqCEAAARA1BCAAAooYgBAAAUUMQAgCAqCEIAQBA1BCEAAAgaghCAAAQNQQhAACIGoIQAABEDUEIAACihiAEAABRQxACAIBXGAwGpVKpUCgyMjIMBkPfqz/88EN4eLjP+kQQAgCAV+Tk5CQmJmq12oSEhNzc3D5WjUbj8uXLGYbxWZ8S1zUS+8vpdLIsO7jdDDltbW1yuTwoCNc3JoQQi8XCcVxUVJTQjfiLpqam0aNHC92FvzAajVKpVCaTCd2IX2BZ1mQyDR8+XOhG+u3GjRv19fUeg6WlpadOnTpy5IjH+Pjx4wsKCpKTk6uqqlQqVXV1da9VSumiRYuWLFny61//esDx1F8Dfwd3OBwWi2UQWxmKLBaLVCpFEPIYhuE4LjAwUOhG/AXDMHiNuDAMI5VKffbW5udYlrVYLKGhoUI30m/ffPNNQUGBx6Ber1coFF0X1mg0iYmJhBD+k19fqjk5OUlJSU899dTgt357A38HDw4O7vaZiwrHccOGDUMQ8kJCQvCJ0J3NZsNrxCUwMBCfCF1Ylg0MDByK02PVqlWrVq3yGDx06NDWrVu7LkwplUgk/A2O43qtFhUVHT58+LvvvvNK67eHfYQAAOAVsbGxDQ0NhBCNRhMXF9dr9dixYydOnAgODuYDUiKRlJSU+KBPBCEAAHiFUqlUq9WUUrVarVKp+MHi4uLbVTds2EB/QgihlKampvqgTwQhAAB4xdq1a8vLy+Pj4ysqKtasWcMPpqen91AVBHZuAQCAV8jl8sLCQo9B1wFT3Va7LuYD+EQIAACihiAEAABRQxACAICoIQgBAEDUEIQAACBqCEIAABA1BCEAAIgaghAAAEQNQQgAAKKGIAQAAFFDEAIAgKghCAEAQNQQhAAAIGoIQgAAEDUEIQAAeIXBYFAqlQqFIiMjw2Aw9KV6+PDhiRMnyuXyiRMnHjlyxDd9IggBAMArcnJyEhMTtVptQkJCbm5ur1Wn07lkyZItW7bo9fr169dnZmb6ps87ujCv0+kcrD6GKOdPhG7EL2BreMDWcIfp4W7obg273c6yrMeg1Wrt9jq6+fn5BQUFISEhWVlZKpXqrbfe6rnqcDh27979yCOPmM3mkJAQuVzuxWfiZuBBaLPZ2tvbB7GVoUin0zkcjqCgO/r/xF2DYRiO42w2m9CN+AudToe54WIymaRSaVhYmNCN+AWWZTs6Onx5EfbB8uabb+7YscNjkOO46dOnd11Yo9EkJiYSQvhPfr1Wg4OD58+fbzabo6KiJBJJSUmJV55DF5Kh+C/hP1pbW4cNG4Y3O57FYuE4LioqSuhG/IVWq73nnnuE7sJfGI1GqVQqk8mEbsQvsCxrNBpHjBghdCOD49ChQ1u3bj106JDHeHh4uE6nCw0NZRgmJibGYrH0sWqxWDZv3pyfn19aWuqD/rGPEAAAvCI2NrahoYEQotFo4uLieq3W1dW9/PLLhJDw8PAVK1ZUVlb6pk8EIQAAeIVSqVSr1ZRStVqtUqn4weLi4ttVY2NjP/rooxMnTlBK9+7dO2XKFN/0iSAEAACvWLt2bXl5eXx8fEVFxZo1a/jB9PT021WDg4Pz8/Ozs7OHDx+el5fXdWekl2DnFgAAeIVcLi8sLPQYdB2Y0m115syZFy5c8EVzbvCJEAAARA1BCAAAooYgBAAAUUMQAgCAqCEIAQBA1BCEAAAgaghCAAAQNQQhAACIGoIQAABEDUEIAACihiAEAABRQxACAICoIQgBAEDUEIQAACBqCEIAAPAKg8GgVCoVCkVGRobBYOhLtaCgICUlRS6Xp6WlXbt2zTd9IggBAMArcnJyEhMTtVptQkJCbm5ur9X6+vqlS5fu2LFDq9VmZGRkZmb6pk8EIQAAeEV+fn5WVlZISEhWVtb+/ft7rdbW1v7mN7/55S9/GRYW9swzz1RXV/umT4nrYsH9ZbfbTSbT4HYz5Oh0uujo6KCgIKEb8QsMw3AcFxkZKXQj/qK5uXnUqFFCd+EvTCaTVCoNCwsTuhG/wLJsR0eHQqEQupF+e++99/Ly8jwGzWZzYmLiqVOnPMYjIiJaW1vDwsKsVuuoUaM8IqOHKsdxWVlZAQEB27Zt89ITcTfwd/CgoKDo6OhBbGUostvtCEKXoKAgjuOioqKEbsRfMAyD14g7qVQqk8mE7sIvsCxLCBmK02P58uVPPPGEx2BJSUlhYWHXhSmlEomEv8FxXB+rR48eXb169Zw5czZs2DDI3d/GwN/BAwICAgLE/s2qVCqVSqUIQp5UKg0ICJBKpUI34i/46SF0F/5C+hOhG/EXQ3RrJCQkJCQkeAw2NTUFBgZ2XTg2NrahoWHs2LEajSYuLq7XKqX01VdfPX36dF5e3rhx47z0FLoSe5IBAICXKJVKtVpNKVWr1SqVih8sLi6+XfXMmTP5+fkHDhyIjY01m81ms9k3fSIIAQDAK9auXVteXh4fH19RUbFmzRp+MD09/XbV4uLi6urqYcOGRf7EN33iOz0AAPAKuVzedd+h6wjNrtXXXnvttdde81FzbvCJEAAARA1BCAAAooYgBAAAUUMQAgCAqCEIAQBA1BCEAAAgaghCAAAQNQQhAACIGoIQAABEDUEIAACihiAEAABRQxACAICoIQgBAEDUEIQAACBqCEIAAPAKg8GgVCoVCkVGRobBYOhjleO45ORkX/aJIAQAAK/IyclJTEzUarUJCQm5ubl9qW7evHnGjBnV1dW+7BNBCAAAXpGfn5+VlRUSEpKVlbV///6+VB944IE///nPPu5z4FeoZ1mWYZhBbGUoMplMAQEBQUED34x3E4ZhOI5zXX4aTCaTTCYTugt/YTKZpFIpy7JCN+IXWJblN4jQjfRbQUHB8ePHPQYbGxsdDkfXhTUaTWJiIiGE/+TXl2p6evrgN92bgb+DBwQEDMV/xcEllUqlUimCkBcUFIRZ4Y6fHkJ34S/4Vwo2iMsQnR4JCQnTp0/3GAwLC7t27VrXhSmlEomEv8FxXL+qvjTwd/DAwED8bzcsLEwmkyEIefxsxqxw4aeH0F34C5ZlpVIpNgiPZVmWZYfi1pg1a9asWbM8Bg8dOrR169auC8fGxjY0NIwdO1aj0cTFxfWr6kvYRwgAAF6hVCrVajWlVK1Wq1QqfrC4uLiHqiAQhAAA4BVr164tLy+Pj4+vqKhYs2YNP+jaC9htVRD4Tg8AALxCLpcXFhZ6DLqOp+u26rGMb+ATIQAAiBqCEAAARA1BCAAAooYgBAAAUUMQAgCAqCEIAQBA1BCEAAAgaghCAAAQNQQhAACIGoIQAABEDUEIAACihiAEAABRQxDekba2tm6vyyxOFovFZDIJ3YUfaW5uFroFP2I0GhmGEboLf+FwONra2oTuAv4FQXhHFixYUFNTI3QX/uLTTz9dv3690F34C6fTOXXqVKG78CPr1q3bs2eP0F34i6tXrz755JNCdwH/giAEAABRQxACAIBXGAwGpVKpUCgyMjIMBkNfqj2v4iUIQgAA8IqcnJzExEStVpuQkJCbm9uXas+reMnAr1B/8+bNI0eODGIrQ1F7e/sXX3xx5swZoRvxC2fPnm1qatq+fbvQjfgF/hLb2Bou1dXVVqs1ODhY6Eb8Qn19vcFgGIrTo66u7tatWx6DGo2GZdmuC+fn5xcUFISEhGRlZalUqrfeeqvXas+reImEf7kOwIULF7Zs2TK43Qw5DMOEhIQEBgYK3YhfsNvtlNKQkBChG/EXZrM5IiJC6C78RWdnZ2BgoFQqFboRv8BxnM1mk8lkQjfSb3V1dRqNxmOQUvrOO++oVCqP8YiIiNbW1rCwMKvVOmrUKI+jyrut9ryKlwz8E+G0adN27tw5eJ0AAMBdhVIqkUj4GxzH9aXa8ypegn2EAADgFbGxsQ0NDYQQjUYTFxfXl2rPq3gJghAAALxCqVSq1WpKqVqtdn1xWlxc3EO120FvG/g+QgAAgB60t7cvWbLk8uXLU6dO3b17d3R0NCFEIvlX7nRb7XbQ2xCEAAAgavhqdOAeeughyU+ef/55odsRDMdxycnJ7iOCnBLrJ7puDdHOk4KCgpSUFLlcnpaWdu3aNX5QzHOj2w0i2unhVxCEA0Qpraqqamxs7Ojo6OjoePfdd4XuSBibN2+eMWNGdXW1+6Agp8T6g65bQ7TzpL6+funSpTt27NBqtRkZGZmZmfy4aOdGtxtEtNPD71AYEK1WGxERMW3atIiICJVK1dzcLHRHwjh+/PjBgwc9JtK4ceMqKysppZWVlePGjROoNQF03RqinSdFRUXPPvssf7ulpWX48OH8bdHOjW43iGinh7/BPsIBunTpUnZ29qZNmxISEl566SW73S7mX9Z37f3mCXJKrP9w3xqYJxzHZWVlBQQEbNu2jYh+bpD/3CCYHn4CQTgItFrtpEmT9Hq90I0IxiMIw8PDdTpdaGgowzAxMTEWi0XA3nzPY2u4iHCeHD16dPXq1XPmzNmwYUNQUBAR/dzoukFcRDg9/MfAf1lG5MrKyjo7O2fMmEEICQ4Oxu+KueNPiR07dqwvT4n1T6KdJ5TSV1999fTp03l5eePGjXONi3ZudLtBRDs9/A0Olhkgi8WycOHCyspKu93++uuvL1iwQOiO/Iggp8T6J9HOkzNnzuTn5x84cCA2NtZsNpvNZn5ctHOj2w0i2unhd4TaOTnUOZ3Obdu2JSUljRgxYtmyZUajUeiOhOQxkQwGw/z58+Pi4pRKZXt7u1BdCcV9a4h2nmzYsKHbtxrRzo1uN4hop4e/wT5CAAAQNXw1CgAAooYgBAAAUUMQAgCAqCEIAQBA1BCEAAAgaghCAAAQNQQhAACIGoIQAABEDUEIAACihiAEAABRQxACAICoIQgBfKqqqkoikQjdBQD8G4IQ7k6/+MUvqqqqPAYPHjw4ffr0qKio1NTU0tLSPpYE8fXXX7suXQQAXoUghLsNy7Jbtmz5/vvvPcZPnTq1YMGCRx99dNeuXWPGjHn44Yc1Gk2vJaEolcrGxkZhewAQCVyGCe4q27dvf/HFF202GyGksrIyOTnZVVKpVPfdd9/mzZsJIZTSuXPnTp06dePGjT2XBl1VVdWECRN6fd1JJBKP/gHAS/CJEIaekydPBgUFFRUV8X++8cYYL4gJAAAFQUlEQVQbo0ePbmlpIYQsWrTo/PnzV65c8ViFUnrs2LElS5bwf0okksWLFx8/frznkgeJROL6utV9Vx9/+/r163Pnzo2Ojp48efLnn3/u3m1aWlp0dHRSUtLy5ct1Op2rVFFRsWDBgri4uLCwsJSUlLy8PNcDEUImTJjA36CUfvDBBxMmTJDJZFOmTNm1a5crR69cuTJv3jyFQhEdHT1nzpyu3wYDQK8QhDD0pKWlvfzyy5mZmSaT6fLly+vXr//kk09GjhxJCImJiUlJSUlJSfFYpaOjw2KxjBkzxjWSlJR069atnkv98qtf/WrWrFm7d++eOXPm0qVLv/76a0JISUnJrFmzYmJitm/fvnHjRpZl58+fzy9vs9nS09Nramr+8pe/7N27NzU1denSpUajkRCi1WoJISdPnuRvfPrpp1u2bPnTn/60f//+xx9/fMWKFdu3byeEcBw3d+7c4cOHf/DBBx9++GFwcPCyZcv62zYAEO9c+B7Au2w2289//vNly5ZNnjw5Ozu76wKEkMrKStefN27cIITY7XbXyOXLl6VSac+lHu6zsrLS9fLhb3/88ceuJf/whz+kpaVRSh955JHMzEz3O/ntb3/Lr2gwGNatW3fhwgV+vL293f3+3W9PnTr1+vXrrnvIzs5OTU2llDY0NBBCrl69yo+3trZ+8sknt9tiAHA7+EQIQ1JwcPBnn322d+9ejuPefPPNXpdXKBSEEJPJ5BoxGo38YA+lflEqla7bCxcuvHr1KiHk4sWLzzzzjPtiixcv5m/I5fJ169ZZrdb33nvv+eeff/DBB293z9XV1ffff7/kJ5s2baqpqSGExMbGZmZmPvjggyqVKjc312q1Pv300/1tGwAQhDBUNTc32+12rVZrMBh6XTg6Ojo0NLSurs41UldXFxsb23OpBwzD9FANCAhwOByEkKCgII+S+0mETz/99IoVK5qamp588smSkpLb3ZtMJisrK6t0U1xczD+KWq2+fv36Y489VlpaOnHixNWrV/fcNgB0hSCEIUmv1y9btuyNN94YN27cs88+S/twEObjjz/+xRdfuEb27ds3d+7cnktdufLv7NmzHqWDBw+6bn/11Vf8fsrJkyfv3LnTfTHXcTStra2fffbZiRMn1q9f/9hjj/XwFCZNmqTRaJKTk5OTk8ePH79ly5Zdu3YRQgwGw3PPPadQKLKysr788ssvv/zy/fff73k7AEA3hP5uFqDfnE7nU0899dBDDzkcjqqqqtDQ0B07dngsQ/5zHyGltKioKCQk5O233z558mR2dnZkZGRtbW2vJXeJiYmzZ88+fPjwzp07p0yZQv5zH+GIESM2btx44MCBF198USKRHDhwgFJ6+vRpiUSyaNGivLy8ffv2LVmyJD4+nl+RYRiZTLZy5cqSkpI9e/ZMmTIlMDBw165dNpuNUhoYGPjuu+/yexALCgoiIyP//ve/5+fn84fDHDx4kFLqcDhGjRq1ePHigoKCvXv3zp07d+bMmYO6pQFEAUEIQ49arZbJZDU1Nfyf77zzTkRExI0bN9yX6RqElNL8/Pzp06dHRkampaWdP3++jyWXY8eOJScnR0REzJ49u7a21iMIS0tLH3rooYiIiJ/97Geff/65a60TJ048/PDD0dHR991333PPPXf+/HnXivn5+UlJSREREenp6WVlZb///e8jIiJu3rxJKV21alV4ePiwYcP4JT/66KPk5GSZTDZt2rR//OMfrjs/e/bsjBkz+CUXLlxYX1/fv00JAJTihHqAO9XHc+QBwD9hHyEAAIja/wI/5sDk1Y65bgAAAABJRU5ErkJggg=="
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"plot([r0[2,:], r1[2,:], r2[2,:]]; xlabel=\"x100 updates\", ylabel=\"error\",\n",
" ylim=(0,0.15), yticks=0:0.01:0.15, labels=[\"MLP\",\"RNN\",\"biRNN\"])"
@@ -575,13 +1029,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 23,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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"
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"plot([r0[1,:], r1[1,:], r2[1,:]]; xlabel=\"x100 updates\", ylabel=\"loss\",\n",
" ylim=(0,.5), yticks=0:0.1:.5, labels=[\"MLP\",\"RNN\",\"biRNN\"])"
@@ -601,13 +1064,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tag (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"wdict=Dict{String,UInt16}(); for (i,w) in enumerate(words); wdict[w]=i; end\n",
"unk = UInt16(length(words))\n",
@@ -621,13 +1095,33 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 25,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "stdin> colorless green ideas sleep furiously\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "2×5 Array{AbstractString,2}:\n",
+ " \"colorless\" \"green\" \"ideas\" \"sleep\" \"furiously\"\n",
+ " \"jj\" \"jj\" \"nns\" \"vb\" \"rb\" "
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"tag(t2,readline())"
]
diff --git a/tutorial/70.imdb.ipynb b/tutorial/70.imdb.ipynb
index bf115d4b0..616f9e542 100644
--- a/tutorial/70.imdb.ipynb
+++ b/tutorial/70.imdb.ipynb
@@ -9,20 +9,14 @@
},
"source": [
"# Sequence classification model for IMDB Sentiment Analysis\n",
- "(c) Deniz Yuret, 2019"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
+ "(c) Deniz Yuret, 2019\n",
"* Objectives: Learn the structure of the IMDB dataset and train a simple RNN model.\n",
"* Prerequisites: [RNN models](60.rnn.ipynb)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
@@ -35,13 +29,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1.0e-8"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Set constants for the model and training\n",
"EPOCHS=3 # Number of training epochs\n",
@@ -51,7 +56,7 @@
"MAXLEN=150 # maximum size of the word sequence, pad shorter sequences, truncate longer ones\n",
"VOCABSIZE=30000 # maximum vocabulary size, keep the most frequent 30K, map the rest to UNK token\n",
"NUMCLASS=2 # number of output classes\n",
- "DROPOUT=0.0 # Dropout rate\n",
+ "DROPOUT=0.5 # Dropout rate\n",
"LR=0.001 # Learning rate\n",
"BETA_1=0.9 # Adam optimization parameter\n",
"BETA_2=0.999 # Adam optimization parameter\n",
@@ -67,65 +72,222 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "imdb"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"include(Knet.dir(\"data\",\"imdb.jl\")) # defines imdb loader"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "\\begin{verbatim}\n",
+ "imdb()\n",
+ "\\end{verbatim}\n",
+ "Load the IMDB Movie reviews sentiment classification dataset from https://keras.io/datasets and return (xtrn,ytrn,xtst,ytst,dict) tuple.\n",
+ "\n",
+ "\\section{Keyword Arguments:}\n",
+ "\\begin{itemize}\n",
+ "\\item url=https://s3.amazonaws.com/text-datasets: where to download the data (imdb.npz) from.\n",
+ "\n",
+ "\n",
+ "\\item dir=Pkg.dir(\"Knet/data\"): where to cache the data.\n",
+ "\n",
+ "\n",
+ "\\item maxval=nothing: max number of token values to include. Words are ranked by how often they occur (in the training set) and only the most frequent words are kept. nothing means keep all, equivalent to maxval = vocabSize + pad + stoken.\n",
+ "\n",
+ "\n",
+ "\\item maxlen=nothing: truncate sequences after this length. nothing means do not truncate.\n",
+ "\n",
+ "\n",
+ "\\item seed=0: random seed for sample shuffling. Use system seed if 0.\n",
+ "\n",
+ "\n",
+ "\\item pad=true: whether to pad short sequences (padding is done at the beginning of sequences). pad\\_token = maxval.\n",
+ "\n",
+ "\n",
+ "\\item stoken=true: whether to add a start token to the beginning of each sequence. start\\_token = maxval - pad.\n",
+ "\n",
+ "\n",
+ "\\item oov=true: whether to replace words >= oov\\emph{token with oov}token (the alternative is to skip them). oov\\_token = maxval - pad - stoken.\n",
+ "\n",
+ "\\end{itemize}\n"
+ ],
+ "text/markdown": [
+ "```\n",
+ "imdb()\n",
+ "```\n",
+ "\n",
+ "Load the IMDB Movie reviews sentiment classification dataset from https://keras.io/datasets and return (xtrn,ytrn,xtst,ytst,dict) tuple.\n",
+ "\n",
+ "# Keyword Arguments:\n",
+ "\n",
+ " * url=https://s3.amazonaws.com/text-datasets: where to download the data (imdb.npz) from.\n",
+ " * dir=Pkg.dir(\"Knet/data\"): where to cache the data.\n",
+ " * maxval=nothing: max number of token values to include. Words are ranked by how often they occur (in the training set) and only the most frequent words are kept. nothing means keep all, equivalent to maxval = vocabSize + pad + stoken.\n",
+ " * maxlen=nothing: truncate sequences after this length. nothing means do not truncate.\n",
+ " * seed=0: random seed for sample shuffling. Use system seed if 0.\n",
+ " * pad=true: whether to pad short sequences (padding is done at the beginning of sequences). pad_token = maxval.\n",
+ " * stoken=true: whether to add a start token to the beginning of each sequence. start_token = maxval - pad.\n",
+ " * oov=true: whether to replace words >= oov*token with oov*token (the alternative is to skip them). oov_token = maxval - pad - stoken.\n"
+ ],
+ "text/plain": [
+ "\u001b[36m imdb()\u001b[39m\n",
+ "\n",
+ " Load the IMDB Movie reviews sentiment classification dataset from\n",
+ " https://keras.io/datasets and return (xtrn,ytrn,xtst,ytst,dict)\n",
+ " tuple.\n",
+ "\n",
+ "\u001b[1m Keyword Arguments:\u001b[22m\n",
+ "\u001b[1m ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡\u001b[22m\n",
+ "\n",
+ " • url=https://s3.amazonaws.com/text-datasets: where to\n",
+ " download the data (imdb.npz) from.\n",
+ "\n",
+ " • dir=Pkg.dir(\"Knet/data\"): where to cache the data.\n",
+ "\n",
+ " • maxval=nothing: max number of token values to include.\n",
+ " Words are ranked by how often they occur (in the training\n",
+ " set) and only the most frequent words are kept. nothing\n",
+ " means keep all, equivalent to maxval = vocabSize + pad +\n",
+ " stoken.\n",
+ "\n",
+ " • maxlen=nothing: truncate sequences after this length.\n",
+ " nothing means do not truncate.\n",
+ "\n",
+ " • seed=0: random seed for sample shuffling. Use system seed\n",
+ " if 0.\n",
+ "\n",
+ " • pad=true: whether to pad short sequences (padding is done\n",
+ " at the beginning of sequences). pad_token = maxval.\n",
+ "\n",
+ " • stoken=true: whether to add a start token to the beginning\n",
+ " of each sequence. start_token = maxval - pad.\n",
+ "\n",
+ " • oov=true: whether to replace words >= oov\u001b[4mtoken with\n",
+ " oov\u001b[24mtoken (the alternative is to skip them). oov_token =\n",
+ " maxval - pad - stoken."
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"@doc imdb"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "┌ Info: Loading IMDB...\n",
+ "└ @ Main /home/deniz/.julia/dev/Knet/data/imdb.jl:57\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " 6.811008 seconds (29.27 M allocations: 1.493 GiB, 7.70% gc time)\n"
+ ]
+ }
+ ],
"source": [
"@time (xtrn,ytrn,xtst,ytst,imdbdict)=imdb(maxlen=MAXLEN,maxval=VOCABSIZE);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "25000-element Array{Array{Int32,1},1}\n",
+ "25000-element Array{Int8,1}\n",
+ "25000-element Array{Array{Int32,1},1}\n",
+ "25000-element Array{Int8,1}\n",
+ "Dict{String,Int32} with 88584 entries\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "(nothing, nothing, nothing, nothing, nothing)"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"println.(summary.((xtrn,ytrn,xtst,ytst,imdbdict)))"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1×150 LinearAlgebra.Adjoint{Int32,Array{Int32,1}}:\n",
+ " 30000 30000 30000 30000 30000 … 1908 92 11 6 1 17 15 22"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Words are encoded with integers\n",
"rand(xtrn)'"
@@ -133,13 +295,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1×25000 LinearAlgebra.Adjoint{Int64,Array{Int64,1}}:\n",
+ " 150 150 150 150 150 150 150 … 150 150 150 150 150 150"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Each word sequence is padded or truncated to length 150\n",
"length.(xtrn)'"
@@ -147,13 +321,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "reviewstring (generic function with 2 methods)"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Define a function that can print the actual words:\n",
"imdbvocab = Array{String}(undef,length(imdbdict))\n",
@@ -167,11 +352,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Positive review:\n",
+ "who definitely needed a hug these evil people capture the yokai and throw them into a red pit along with unwanted objects like and other mechanical things and these meld into one horribly violent robotic monsters whose only job is to kill takashi a young boy is the one to become their saviour alongside a red man dragon a turtle man and a river princess as well as a cute little creature that if it had been america they could have turned it into a cuddly toy and sold it at all good toy stores the lines are good especially the don't try this at home kids and other gems that bring a smile to your lips suspend belief and watch this with a child or on your own and enjoy though i must admit that the end was a wee bit sad and not necessarily so cheers \n"
+ ]
+ }
+ ],
"source": [
"# Hit Ctrl-Enter to see random reviews:\n",
"r = rand(1:length(xtrn))\n",
@@ -180,13 +374,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1×25000 LinearAlgebra.Adjoint{Int8,Array{Int8,1}}:\n",
+ " 1 2 2 1 1 1 1 1 2 2 1 … 1 2 2 1 1 2 1 1 1 2 2"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Here are the labels: 1=negative, 2=positive\n",
"ytrn'"
@@ -205,7 +411,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
@@ -214,9 +420,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "SequenceClassifier"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"SequenceClassifier(input::Int, embed::Int, hidden::Int, output::Int; pdrop=0) =\n",
" SequenceClassifier(param(embed,input), RNN(embed,hidden,rnnType=:gru), param(output,hidden), pdrop)"
@@ -224,7 +441,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
@@ -248,9 +465,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(390, 390)"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"dtrn = minibatch(xtrn,ytrn,BATCHSIZE;shuffle=true)\n",
"dtst = minibatch(xtst,ytst,BATCHSIZE)\n",
@@ -259,14 +487,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 16,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "trainresults (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# For running experiments\n",
"function trainresults(file,model; o...)\n",
" if (print(\"Train from scratch? \"); readline()[1]=='y')\n",
- " progress!(adam(model,dtrn;lr=LR,beta1=BETA_1,beta2=BETA_2,eps=EPS))\n",
+ " progress!(adam(model,repeat(dtrn,EPOCHS);lr=LR,beta1=BETA_1,beta2=BETA_2,eps=EPS))\n",
" Knet.save(file,\"model\",model)\n",
" Knet.gc() # To save gpu memory\n",
" else\n",
@@ -279,9 +518,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 17,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(0.69312066f0, 0.69312423f0, 0.5135817307692307, 0.5096153846153846)"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"model = SequenceClassifier(VOCABSIZE,EMBEDSIZE,NUMHIDDEN,NUMCLASS,pdrop=DROPOUT)\n",
"nll(model,dtrn), nll(model,dtst), accuracy(model,dtrn), accuracy(model,dtst)"
@@ -289,20 +539,41 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 18,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> y\n",
+ "1.53e-01 100.00%┣████████████████████┫ 1170/1170 [00:18/00:18, 64.14i/s]\n"
+ ]
+ }
+ ],
"source": [
+ "# 2.51e-01 100.00%┣████████████████████┫ 1170/1170 [00:16/00:16, 75.46i/s]\n",
"model = trainresults(\"imdbmodel113.jld2\",model);"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(0.05890469f0, 0.38913542f0, 0.9833733974358975, 0.8548477564102565)"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# 33s (0.059155148f0, 0.3877507f0, 0.9846153846153847, 0.8583733974358975)\n",
+ "# (0.059155148f0, 0.3877507f0, 0.9846153846153847, 0.8583733974358975)\n",
"nll(model,dtrn), nll(model,dtst), accuracy(model,dtrn), accuracy(model,dtst)"
]
},
@@ -315,9 +586,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "str2ids (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"predictstring(x)=\"\\nPrediction: \" * (\"Negative\",\"Positive\")[argmax(Array(vec(model([x]))))]\n",
"UNK = VOCABSIZE-2\n",
@@ -326,9 +608,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Negative review:\n",
+ " this is an emperor's new clothes situation someone needs to say that's not a funny and original etc etc film that is an inferior film don't waste your money on it the film is trashy and the people in it are embarrassingly inferior trailer trash they are all too realistically only themselves they have no lines they don't act the american dream is not to create shoddy no quality films or anything else shoddy and of no quality it is to achieve something of quality and thereby success only people who are desperate to praise any film not made in hollywood it can't have been made in hollywood can it would try to any kind of quality to this film it's worse than ed woods another film about a film maker without standards these films shouldn't have been made and you shouldn't go see american movie\n",
+ "\n",
+ "Prediction: Negative\n"
+ ]
+ }
+ ],
"source": [
"# Here we can see predictions for random reviews from the test set; hit Ctrl-Enter to sample:\n",
"r = rand(1:length(xtst))\n",
@@ -338,9 +631,19 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 22,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "stdin> this was not a great movie\n",
+ "\n",
+ "Prediction: Negative\n"
+ ]
+ }
+ ],
"source": [
"# Here the user can enter their own reviews and classify them:\n",
"println(predictstring(str2ids(readline(stdin))))"
diff --git a/tutorial/80.charlm.ipynb b/tutorial/80.charlm.ipynb
index 1733f5e7e..96e4e5203 100644
--- a/tutorial/80.charlm.ipynb
+++ b/tutorial/80.charlm.ipynb
@@ -24,7 +24,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
@@ -45,7 +45,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
@@ -58,7 +58,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
@@ -71,7 +71,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
@@ -87,9 +87,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "CharLM (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# The h=0,c=0 options to RNN enable a persistent state between iterations\n",
"CharLM(vocab::Int,embed::Int,hidden::Int; o...) = \n",
@@ -105,7 +116,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
@@ -130,7 +141,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -166,7 +177,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "slide"
@@ -185,13 +196,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(\"4934845-element Array{UInt8,1}\", \"526731-element Array{UInt8,1}\", \"84-element Array{Char,1}\")"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Load 'The Complete Works of William Shakespeare'\n",
"include(Knet.dir(\"data\",\"gutenberg.jl\"))\n",
@@ -201,13 +223,26 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\r\n",
+ " Cheated of feature by dissembling nature,\r\n",
+ " Deform'd, unfinish'd, sent before my time\r\n",
+ " Into this breathing world scarce half made up,\r\n",
+ " And that so lamely and unfashionable\r\n",
+ " \n"
+ ]
+ }
+ ],
"source": [
"# Print a sample\n",
"println(string(shakechars[trn[1020:1210]]...))"
@@ -215,13 +250,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(192, 20)"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Minibatch data\n",
"function mb(a)\n",
@@ -235,18 +281,37 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(\"256×100 Array{UInt8,2}\", \"256×100 Array{UInt8,2}\")"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"summary.(first(dtrn)) # each x and y have dimensions (BATCHSIZE,SEQLENGTH)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> n\n"
+ ]
+ }
+ ],
"source": [
"# 3.30e+00 ┣ / / / / / ┫ 122 [04:46, 2.35s/i]\n",
"Knet.gc()\n",
@@ -256,22 +321,66 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3.2993853f0"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"exp(shakemodel(dtst)) # Perplexity = 3.30"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Floudg, \n",
+ " Kent. My lord, of more, youth away, his gracious\n",
+ " forgot rules over a gentlewisold, how thou reads,\n",
+ " The business, Romeo, Hastings, the field\n",
+ " GENTLOW, MACBETH, with the TRIER\n",
+ "\n",
+ "\n",
+ "Flourish coults\n",
+ " DUKE, SILVIA, and, Monten\n",
+ "\n",
+ "Enter CLOWN and CLARENCE of OARSMA\n",
+ "\n",
+ " FLUELLEN. He is good, let your sooving themselves shin excelsions\n",
+ " banished you are not acquainting the now. Yet she comes\n",
+ " that doth make defeat of mine are that he makes an oath,\n",
+ " there is a connnivation dospish from these hands, upon the\n",
+ " coverworth as certain physice.\n",
+ " PISTOL. T' never soft as come dead.\n",
+ " Well, are the god sitting odds foo my business?'\n",
+ " The bloody king, this fast show rank and runk.\n",
+ " PERDIATA. Well, let's awly ladies.'\n",
+ " WIDOW. Take your hands, you are poison nor the valiant man\n",
+ " proph on matches sent out 'Hang.\n",
+ " CELIA. They are the new-my woman's character; I am both about the\n",
+ " friend of the duncatar; I, a drum in the searchine! \n",
+ " HO\n"
+ ]
+ }
+ ],
"source": [
"generate(shakemodel,shakechars,1000)"
]
@@ -285,7 +394,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
@@ -300,9 +409,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 17,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "9168446"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Read julia base library source code\n",
"base = joinpath(Sys.BINDIR, Base.DATAROOTDIR, \"julia\")\n",
@@ -319,9 +439,46 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 18,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3642×2 Array{Any,2}:\n",
+ " ' ' 1981523\n",
+ " 'e' 550283\n",
+ " 't' 479801\n",
+ " 'n' 344556\n",
+ " 'r' 339428\n",
+ " 'i' 330713\n",
+ " 's' 327190\n",
+ " 'a' 317875\n",
+ " 'o' 277083\n",
+ " '\\n' 266644\n",
+ " 'l' 204455\n",
+ " ',' 201044\n",
+ " ')' 194869\n",
+ " ⋮ \n",
+ " 'ה' 1\n",
+ " '🍢' 1\n",
+ " '𝗾' 1\n",
+ " '𝔔' 1\n",
+ " 'É' 1\n",
+ " '𝓟' 1\n",
+ " '𝚿' 1\n",
+ " '𝕨' 1\n",
+ " 'ɛ' 1\n",
+ " 'Χ' 1\n",
+ " '🕙' 1\n",
+ " 'ℚ' 1"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Find unique chars, sort by frequency, assign integer ids.\n",
"charcnt = Dict{Char,Int}()\n",
@@ -334,9 +491,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(9168446, 8644158, 524288)"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Keep only VOCABSIZE most frequent chars, split into train and test\n",
"data = map(c->charid[c], collect(text))\n",
@@ -349,9 +517,27 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{}, Union{}) === Const(true) # any result is ok\n",
+ " @test subtype_tfunc(Union{}, Type{typeof(Union{})}) === Const(true) # any result is ok\n",
+ " @test subtype_tfunc(Union{}, Const(typeof(Union{}))) === Const(true) # any result is ok\n",
+ " @test subtype_tfunc(typeof(Union{}), Const(typeof(Union{}))) === Const(true) # Union{} <: typeof(Union{})\n",
+ " @test subtype_tfunc(typeof(Union{}), Const(Int)) === Const(true) # Union{} <: Int\n",
+ " @test subtype_tfunc(typeof(Union{}), Const(Union{})) === Const(true) # Union{} <: Union{}\n",
+ " @test subtype_tfunc(typeof(Union{}), Type{typeof(Union{})}) === Const(true) # Union{} <: Union{}\n",
+ " @test subtype_tfunc(typeof(Union{}), Type{typeof(Union{})}) === Const(true) # Union{} <: typeof(Union{})\n",
+ " @test subtype_tfunc(typeof(Union{}), Type{Union{}}) === Const(true) # Union{} <: Union{}\n",
+ " @test subtype_tfunc(Type{Union{}}, typeof(Union{})) === Const(true) # Union{} <: Union{}\n",
+ " @test subtype_tfunc(Type{Union{}}, Const(typeof(Union{}))) === Const(true) # Uni\n"
+ ]
+ }
+ ],
"source": [
"# Print a sample\n",
"r = rand(1:(length(trn)-1000))\n",
@@ -360,9 +546,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(2110, 127)"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Minibatch data\n",
"function mb(a)\n",
@@ -376,18 +573,37 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 22,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(\"64×64 Array{Int64,2}\", \"64×64 Array{Int64,2}\")"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"summary.(first(dtrn)) # each x and y have dimensions (BATCHSIZE,SEQLENGTH)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 23,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train from scratch? stdin> n\n"
+ ]
+ }
+ ],
"source": [
"# 3.25e+00 ┣ / / / / /┫ 126 [05:43, 2.72s/i]\n",
"juliamodel = CharLM(VOCABSIZE, INPUTSIZE, HIDDENSIZE; rnnType=RNNTYPE, numLayers=NUMLAYERS)\n",
@@ -396,18 +612,78 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3.27486f0"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"exp(juliamodel(dtst)) # Perplexity = 3.27"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 25,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " # optional\n",
+ " _ = Expr(expMreadcos, Expr(:meta, :stderr), :n, :default, ex, context[o.e.ex, ex.args[1] -typeinfo + Int])\n",
+ "\n",
+ " isprint((v\"), GotoNode(e))\n",
+ "end\n",
+ "\n",
+ "for (fname, getfield) do t\n",
+ " print(io, \":\")\n",
+ " new()\n",
+ " end\n",
+ "end\n",
+ "\n",
+ "if option\n",
+ " quote\n",
+ " bounds end\n",
+ " end\n",
+ " @sprintf(\"Other prompt\", ex.field, UV_REQ) == pop!(bb_start_off+1, i)\n",
+ " write(io, take!(builder_path))\n",
+ "end\n",
+ "\n",
+ "Base.:Table(io::IOContext) = write(io, position(s))\n",
+ "\n",
+ "function const_rerror(pre::GlobalRef)\n",
+ " ret = proty(d)\n",
+ " if !rel_key && length(blk)\n",
+ " return htstarted_keys(terminal(u, p))\n",
+ " end\n",
+ " write(io, (\"\\\\\\\\\\\" => \"\\n\\n\\n\\n\") ? \"\\n>\\n\"\n",
+ " p = empty(dir+stdout)\n",
+ " n = MD(count_ok_new_data(L) : n_power\n",
+ " while push!(blks[$ur], altbuf)\n",
+ " end\n",
+ " function prec_uninitual(p, keep='\\n')\n",
+ " print(io, \"1 2\")\n",
+ " else\n",
+ " p = blk + p0\n",
+ " out = Mair(1)\n",
+ " elseif occursin(\".cmd\", keep=ks) != 0\n",
+ " res = write(io, c)\n",
+ " end\n",
+ " while take!(word)\n",
+ " \n"
+ ]
+ }
+ ],
"source": [
"generate(juliamodel,juliachars,1000)"
]