Last active
May 3, 2026 07:05
-
-
Save mvoelk/7fafa31e2b63c194cf93a3b7913dfa32 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "\n", | |
| "# Overview\n", | |
| "\n", | |
| "Gist https://gist.github.com/mvoelk/7fafa31e2b63c194cf93a3b7913dfa32\n", | |
| "\n", | |
| "Google Colab https://colab.research.google.com/gist/mvoelk/7fafa31e2b63c194cf93a3b7913dfa32\n", | |
| "\n", | |
| "- **Jupyter Notebook** is what you see here, an interactive Python shell and a document format\n", | |
| "- **NumPy** is a Python library for matrix calculation, linear algebra, etc., similar to MATLAB\n", | |
| "- **Matplotlib** is plotting library, similar to the MATLAB plot functions, and is often used with NumPy\n", | |
| "- **TensorFlow** works similar to NumPy, but offers GPU support and allows automatic differentiation (backpropagation) for neural networks training\n", | |
| "- **Keras** is a high level API for Deep Learning on top of TensorFlow, PyTorch or JAX\n", | |
| "- **Pandas** is a library for data analysis and manipulation" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Numpy\n", | |
| "\n", | |
| "Deep learning libraries like TensorFlow and PyTorch come with NumPy-like low-level API" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'2.4.2'" | |
| ] | |
| }, | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "import numpy as np\n", | |
| "\n", | |
| "np.__version__" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from numpy import *" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([], dtype=float64)" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "array([])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Arrays" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1, 2, 3, 4, 5])" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# 1D Array\n", | |
| "np.array([1, 2, 3, 4, 5])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1, 2, 3],\n", | |
| " [4, 5, 6]])" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# 2D Array\n", | |
| "np.array([\n", | |
| " [1, 2, 3],\n", | |
| " [4, 5, 6],\n", | |
| "])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[[1, 2, 3],\n", | |
| " [4, 5, 6]],\n", | |
| "\n", | |
| " [[1, 2, 3],\n", | |
| " [4, 5, 6]]])" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# 3D Array\n", | |
| "np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1, 2, 3, 4],\n", | |
| " [5, 6, 7, 8]])" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])\n", | |
| "a" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(2, 4)" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1, 2],\n", | |
| " [3, 4],\n", | |
| " [5, 6],\n", | |
| " [7, 8]])" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.reshape(a, (4,2))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1, 2, 3, 4, 5, 6, 7, 8])" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.reshape(a, (-1,))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[[[[1, 2, 3, 4]]]]])" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4], ndmin=5)\n", | |
| "a" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(1, 1, 1, 1, 4)" | |
| ] | |
| }, | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Indexing" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "np.int64(2)" | |
| ] | |
| }, | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4, 5])\n", | |
| "\n", | |
| "a[1]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "np.int64(4)" | |
| ] | |
| }, | |
| "execution_count": 14, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a[-2]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "by list of indices" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([2, 5, 4])" | |
| ] | |
| }, | |
| "execution_count": 15, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a[[1,4,3]]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Slicing\n", | |
| "\n", | |
| "Takes elements from one given index to another given index\n", | |
| "\n", | |
| "- Slice instead of index have the notation [start:end:step]\n", | |
| "- Start is considered 0 if omitted\n", | |
| "- Step is considered 1 if omitted\n", | |
| "- The result includes the start index, but excludes the end index" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1, 3])" | |
| ] | |
| }, | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4, 5])\n", | |
| "\n", | |
| "a[0:4:2]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([6, 7])" | |
| ] | |
| }, | |
| "execution_count": 17, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 7]]])\n", | |
| "\n", | |
| "a[:,1,2]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(2, 2, 3)" | |
| ] | |
| }, | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[3],\n", | |
| " [3]])" | |
| ] | |
| }, | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a[:,0:1,2]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[2, 5],\n", | |
| " [2, 5]])" | |
| ] | |
| }, | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a[...,1] # ellipsis notation, in this case equivalent to a[:,:,1]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Broadcasting" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 21, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[62, 64, 66],\n", | |
| " [42, 44, 46]])" | |
| ] | |
| }, | |
| "execution_count": 21, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a1 = np.array([\n", | |
| " [21, 22, 23], \n", | |
| " [1, 2, 3]]\n", | |
| ")\n", | |
| "\n", | |
| "a2 = np.array(\n", | |
| " [41, 42, 43]\n", | |
| ")\n", | |
| "\n", | |
| "a1 + a2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "((2, 3), (3,))" | |
| ] | |
| }, | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a1.shape, a2.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Data Types" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 23, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "dtype('int64')" | |
| ] | |
| }, | |
| "execution_count": 23, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([[1,2,3]])\n", | |
| "a.dtype" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 24, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1, 2, 3]], dtype=int32)" | |
| ] | |
| }, | |
| "execution_count": 24, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.array([[1,2,3]], dtype='int32')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 25, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1., 2., 3.]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 25, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.array([[1,2,3]], dtype='float32')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1, 2, 3]], dtype=int8)" | |
| ] | |
| }, | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.array([[1,2,3]], dtype=np.int8)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1., 2., 3.]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.float32([[1,2,3]])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Copy vs View" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([42, 2, 3, 4, 5]), array([1, 2, 3, 4, 5]))" | |
| ] | |
| }, | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4, 5])\n", | |
| "c = a.copy()\n", | |
| "a[0] = 42\n", | |
| "a, c" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([42, 2, 3, 4, 5]), array([42, 2, 3, 4, 5]))" | |
| ] | |
| }, | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4, 5])\n", | |
| "v = a.view()\n", | |
| "a[0] = 42\n", | |
| "a, v" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Check with the base attribute if an array owns its data\n", | |
| "- The copy owns its data and returns None\n", | |
| "- The view does not own its data and returns the owner array" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 30, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "None\n", | |
| "[42 2 3 4 5]\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(a.base)\n", | |
| "print(v.base)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Iteration" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 31, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([[[ 0, 1],\n", | |
| " [ 2, 3]],\n", | |
| " \n", | |
| " [[ 4, 5],\n", | |
| " [ 6, 7]],\n", | |
| " \n", | |
| " [[ 8, 9],\n", | |
| " [10, 11]]]),\n", | |
| " (3, 2, 2))" | |
| ] | |
| }, | |
| "execution_count": 31, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.arange(12).reshape((3,2,-1))\n", | |
| "a, a.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 32, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "0 1 2 3 4 5 6 7 8 9 10 11 " | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for x in a:\n", | |
| " for y in x:\n", | |
| " for z in y:\n", | |
| " print(z, end=' ')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 33, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "0 1 2 3 4 5 6 7 8 9 10 11 " | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for x in np.nditer(a):\n", | |
| " print(x, end=' ')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "(0, 0, 0) 0\n", | |
| "(0, 0, 1) 1\n", | |
| "(0, 1, 0) 2\n", | |
| "(0, 1, 1) 3\n", | |
| "(1, 0, 0) 4\n", | |
| "(1, 0, 1) 5\n", | |
| "(1, 1, 0) 6\n", | |
| "(1, 1, 1) 7\n", | |
| "(2, 0, 0) 8\n", | |
| "(2, 0, 1) 9\n", | |
| "(2, 1, 0) 10\n", | |
| "(2, 1, 1) 11\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for idx, x in np.ndenumerate(a):\n", | |
| " print(idx, x)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Join and Split" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 35, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1, 2, 3, 4, 5, 6])" | |
| ] | |
| }, | |
| "execution_count": 35, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a1 = np.array([1, 2, 3])\n", | |
| "a2 = np.array([4, 5, 6])\n", | |
| "\n", | |
| "np.concatenate((a1, a2))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 36, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1, 4],\n", | |
| " [2, 5],\n", | |
| " [3, 6]])" | |
| ] | |
| }, | |
| "execution_count": 36, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.stack((a1, a2), axis=1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 37, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[array([1, 2]), array([3, 4]), array([5, 6])]" | |
| ] | |
| }, | |
| "execution_count": 37, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4, 5, 6])\n", | |
| "\n", | |
| "# by number of sections\n", | |
| "np.split(a, 3, axis=0)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 38, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[array([1, 2]), array([3]), array([4, 5, 6])]" | |
| ] | |
| }, | |
| "execution_count": 38, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# by index\n", | |
| "np.split(a, [2,3], axis=0)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Unique" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 39, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1, 2, 3, 4, 5])" | |
| ] | |
| }, | |
| "execution_count": 39, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4, 5, 4, 4])\n", | |
| "\n", | |
| "np.unique(a)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Search" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 40, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([3, 5, 6]),)" | |
| ] | |
| }, | |
| "execution_count": 40, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4, 5, 4, 4])\n", | |
| "\n", | |
| "# return indices of matching elements\n", | |
| "np.where(a == 4)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 41, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([1, 3, 5, 6]),)" | |
| ] | |
| }, | |
| "execution_count": 41, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4, 5, 4, 4])\n", | |
| "\n", | |
| "np.where(a%2 == 0)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Sort" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 42, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([0, 1, 2, 3])" | |
| ] | |
| }, | |
| "execution_count": 42, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([3, 2, 0, 1])\n", | |
| "\n", | |
| "np.sort(a)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 43, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array(['apple', 'banana', 'cherry'], dtype='<U6')" | |
| ] | |
| }, | |
| "execution_count": 43, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array(['banana', 'cherry', 'apple'])\n", | |
| "\n", | |
| "np.sort(a)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 44, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([2, 0, 1])" | |
| ] | |
| }, | |
| "execution_count": 44, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# return indices\n", | |
| "np.argsort(a)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Filter" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 45, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([41, 43])" | |
| ] | |
| }, | |
| "execution_count": 45, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([41, 42, 43, 44])\n", | |
| "\n", | |
| "x = [True, False, True, False]\n", | |
| "\n", | |
| "a[x]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([43, 44])" | |
| ] | |
| }, | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([41, 42, 43, 44, 42])\n", | |
| "\n", | |
| "a[a > 42]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Linear Algebra" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 47, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "a1 = np.array([[0,1,2],[3,4,5],[6,7,8]])\n", | |
| "a2 = np.array([[1,0,1],[2,1,1],[0,2,1]])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Elementwise Operations" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 48, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1, 1, 3],\n", | |
| " [5, 5, 6],\n", | |
| " [6, 9, 9]])" | |
| ] | |
| }, | |
| "execution_count": 48, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a1 + a2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[ 0, 0, 2],\n", | |
| " [ 6, 4, 5],\n", | |
| " [ 0, 14, 8]])" | |
| ] | |
| }, | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a1 * a2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Scala Operations" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Actually a special case of broadcasting" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 50, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[ 2, 3, 4],\n", | |
| " [ 5, 6, 7],\n", | |
| " [ 8, 9, 10]])" | |
| ] | |
| }, | |
| "execution_count": 50, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "2 + a1" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 51, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[ 0, 2, 4],\n", | |
| " [ 6, 8, 10],\n", | |
| " [12, 14, 16]])" | |
| ] | |
| }, | |
| "execution_count": 51, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "2 * a1" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Matrix Multiplication" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 52, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[ 2, 5, 3],\n", | |
| " [11, 14, 12],\n", | |
| " [20, 23, 21]])" | |
| ] | |
| }, | |
| "execution_count": 52, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.dot(a1, a2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 53, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[ 33, 43, 53],\n", | |
| " [114, 151, 188],\n", | |
| " [195, 259, 323]])" | |
| ] | |
| }, | |
| "execution_count": 53, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.linalg.multi_dot([a1, a2, a1])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Matrix muliplication Operator, since Python 3.5" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 54, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[ 2, 5, 3],\n", | |
| " [11, 14, 12],\n", | |
| " [20, 23, 21]])" | |
| ] | |
| }, | |
| "execution_count": 54, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a1 @ a2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Cross Product" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 55, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[-4, 2, -1],\n", | |
| " [ 3, -6, 3],\n", | |
| " [-1, 2, -1]])" | |
| ] | |
| }, | |
| "execution_count": 55, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.cross(a1, a2, axisa=-1, axisb=-2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Scalar Product, Inner Product, Outer Product" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 56, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "v1 = np.float32([1,2,3])\n", | |
| "v2 = np.float32([6,5,4])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 57, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "np.float32(28.0)" | |
| ] | |
| }, | |
| "execution_count": 57, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.inner(v1, v2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 58, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "np.float32(28.0)" | |
| ] | |
| }, | |
| "execution_count": 58, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "v1 @ v2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[ 6., 5., 4.],\n", | |
| " [12., 10., 8.],\n", | |
| " [18., 15., 12.]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.outer(v1, v2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 60, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[ 6., 5., 4.],\n", | |
| " [12., 10., 8.],\n", | |
| " [18., 15., 12.]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 60, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "v1[:,None] @ v2[None,:]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 61, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1., 2., 3.], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 61, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "v1" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 62, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[[1.]],\n", | |
| "\n", | |
| " [[2.]],\n", | |
| "\n", | |
| " [[3.]]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 62, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "v1[...,None,np.newaxis]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Transpose" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 63, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[0, 3, 6],\n", | |
| " [1, 4, 7],\n", | |
| " [2, 5, 8]])" | |
| ] | |
| }, | |
| "execution_count": 63, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.transpose(a1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 64, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[0, 3, 6],\n", | |
| " [1, 4, 7],\n", | |
| " [2, 5, 8]])" | |
| ] | |
| }, | |
| "execution_count": 64, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a1.T" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 65, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[0, 1, 2],\n", | |
| " [3, 4, 5],\n", | |
| " [6, 7, 8]])" | |
| ] | |
| }, | |
| "execution_count": 65, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a1.T.base" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Inverse Matrix" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 66, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[-0.33333333, 0.66666667, -0.33333333],\n", | |
| " [-0.66666667, 0.33333333, 0.33333333],\n", | |
| " [ 1.33333333, -0.66666667, 0.33333333]])" | |
| ] | |
| }, | |
| "execution_count": 66, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.linalg.inv(a2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Norms\n", | |
| "\n", | |
| "Frobenius Norm" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 67, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "np.float64(14.2828568570857)" | |
| ] | |
| }, | |
| "execution_count": 67, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.linalg.norm(a1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "L2 Norm along the last axis" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 68, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([ 2.23606798, 7.07106781, 12.20655562])" | |
| ] | |
| }, | |
| "execution_count": 68, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.linalg.norm(a1, axis=-1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "L1 Norm along the last axis" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 69, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([ 3., 12., 21.])" | |
| ] | |
| }, | |
| "execution_count": 69, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.linalg.norm(a1, ord=1, axis=-1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "L0 or Maximum Norm along the last axis" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 70, | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([2., 3., 3.])" | |
| ] | |
| }, | |
| "execution_count": 70, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.linalg.norm(a1, ord=0, axis=-1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 71, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[0, 1, 2],\n", | |
| " [3, 4, 5],\n", | |
| " [6, 7, 8]])" | |
| ] | |
| }, | |
| "execution_count": 71, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a1" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Einsum\n", | |
| "\n", | |
| "Things like transpose, matrix multiplication, inner and outer product, tensor product etc. can also be done using Einstein notation\n", | |
| "- More versatile, especially when dealing with many dimensions\n", | |
| "- Typically faster an less code compared to other solutions" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 72, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "a3 = np.arange(24).reshape((4,3,2))\n", | |
| "a4 = np.arange(24).reshape((4,2,3))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Example: batch matrix multiplication" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 73, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[[ 0, 3],\n", | |
| " [ 2, 12],\n", | |
| " [ 8, 25]],\n", | |
| "\n", | |
| " [[ 36, 63],\n", | |
| " [ 56, 90],\n", | |
| " [ 80, 121]],\n", | |
| "\n", | |
| " [[144, 195],\n", | |
| " [182, 240],\n", | |
| " [224, 289]],\n", | |
| "\n", | |
| " [[324, 399],\n", | |
| " [380, 462],\n", | |
| " [440, 529]]])" | |
| ] | |
| }, | |
| "execution_count": 73, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.einsum('bij, bji -> bij', a3, a4)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "https://numpy.org/doc/stable/reference/generated/numpy.einsum.html" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Random" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Seed\n", | |
| "\n", | |
| "Sets the initial condition for the random number generator" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 74, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "np.random.seed(1337)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Integers Values\n", | |
| "\n", | |
| "Generate a random integer values from 0 to 100" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 75, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "23" | |
| ] | |
| }, | |
| "execution_count": 75, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.random.randint(100)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 76, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[61, 92, 39, 89, 39],\n", | |
| " [90, 82, 84, 72, 9],\n", | |
| " [ 6, 54, 90, 23, 24]])" | |
| ] | |
| }, | |
| "execution_count": 76, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.random.randint(100, size=(3, 5))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Float Values" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Generate a random float values from 0 to 1" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 77, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "0.11527422668314946" | |
| ] | |
| }, | |
| "execution_count": 77, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.random.rand()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 78, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[0.38627507, 0.62850118, 0.12505793, 0.98354861, 0.44322487],\n", | |
| " [0.78955834, 0.79411858, 0.36126157, 0.41610394, 0.58425813],\n", | |
| " [0.76017177, 0.18780841, 0.28816715, 0.67021886, 0.49964826]])" | |
| ] | |
| }, | |
| "execution_count": 78, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.random.rand(3, 5)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 79, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[0.17856868, 0.4131413 , 0.19919524, 0.5316994 , 0.8323707 ],\n", | |
| " [0.18525095, 0.95735922, 0.42541467, 0.50400704, 0.51047095],\n", | |
| " [0.01579145, 0.73169007, 0.99330504, 0.16287753, 0.12663478]])" | |
| ] | |
| }, | |
| "execution_count": 79, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.random.uniform(size=(3,5))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Choice\n", | |
| "\n", | |
| "Returns an random value based on an array of values" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 80, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "np.int64(5)" | |
| ] | |
| }, | |
| "execution_count": 80, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.random.choice([3, 5, 7, 9])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 81, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[5, 3, 5, 7, 3],\n", | |
| " [3, 5, 9, 3, 7],\n", | |
| " [5, 5, 3, 5, 5]])" | |
| ] | |
| }, | |
| "execution_count": 81, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.random.choice([3, 5, 7, 9], size=(3, 5))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Choose elements with certain probability (discrete distribution)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 82, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([7, 7, 7, 7, 7, 7, 5, 3, 3, 7, 7, 7, 5, 7, 3, 7, 7, 5, 7, 7])" | |
| ] | |
| }, | |
| "execution_count": 82, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=(20))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Schuffle\n", | |
| "\n", | |
| "Randomly changes the location of elements in an array (the array is modified)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 83, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([3, 5, 1, 2, 4])" | |
| ] | |
| }, | |
| "execution_count": 83, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4, 5])\n", | |
| "\n", | |
| "np.random.shuffle(a)\n", | |
| "\n", | |
| "a" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Permutation\n", | |
| "\n", | |
| "Returns a random permutation of the array elements" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 84, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([1, 2, 3, 4, 5]), array([3, 4, 2, 5, 1]))" | |
| ] | |
| }, | |
| "execution_count": 84, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.array([1, 2, 3, 4, 5])\n", | |
| "\n", | |
| "b = np.random.permutation(a)\n", | |
| "\n", | |
| "a, b" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Distribution\n", | |
| "\n", | |
| "Normal, Binomial, Poisson, Uniform, Logistic, Multinomial, Expoinential, ..." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 85, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[-0.13062312, -1.31026002, -2.17131242],\n", | |
| " [-1.06618141, -0.03316184, 1.46639575]])" | |
| ] | |
| }, | |
| "execution_count": 85, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# with zero mean and standard deviation of one\n", | |
| "np.random.normal(size=(2, 3))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 86, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[2.75328619, 2.33997916, 2.39489902],\n", | |
| " [0.49442913, 2.13597421, 1.60877572]])" | |
| ] | |
| }, | |
| "execution_count": 86, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# with given mean (loc) and standard deviation (scale)\n", | |
| "np.random.normal(loc=1, scale=2, size=(2, 3))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Matplotlib\n", | |
| "\n", | |
| "https://matplotlib.org/stable/api/index.html" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 87, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import matplotlib.pyplot as plt\n", | |
| "import numpy as np" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Basic Plot" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 88, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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", | |
| "text/plain": [ | |
| "<Figure size 600x300 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "x = np.linspace(-np.pi, np.pi, 40)\n", | |
| "y1, y2 = np.sin(x), np.cos(x)\n", | |
| "\n", | |
| "fig = plt.figure(figsize=(6,3))\n", | |
| "\n", | |
| "plt.plot(x, y1, label='sin')\n", | |
| "plt.plot(x, y2, label='cos')\n", | |
| "\n", | |
| "plt.xlim(-np.pi, np.pi)\n", | |
| "plt.ylim(None, None)\n", | |
| "\n", | |
| "plt.xlabel('x')\n", | |
| "plt.ylabel('y')\n", | |
| "plt.title('functions')\n", | |
| "plt.grid()\n", | |
| "plt.legend()\n", | |
| "\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Histogram" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 89, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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", | |
| "text/plain": [ | |
| "<Figure size 600x300 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "x = np.random.beta(5, 5, size=1000)\n", | |
| "\n", | |
| "plt.figure(figsize=(6,3))\n", | |
| "plt.hist(x, bins=50)\n", | |
| "plt.xlim(0,1)\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## 2d Data and Images" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 90, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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Ubz88suYMWMGhg8fXrIk2S+88AIOOOAA/OAHP8B7772H9957DzfffDMOOOAAvPjii0W3V1E/PQPAmWeeibfffhtXXXUVWltbccQRR2Dx4sWOELQQqTYgVawuNikdbcx2vHW8PjsYeITQZ8inDyTG9j3wUVN7tOONT1u+Cm+nnt/nuZ8f7xyU1CSSpNK/Ws0spXQisd1/fG4Djz7RjYVsme95Mp9Hb4uY59xpq6f7RGK8rnjMthmxH7NymYy4CbhXUmgOsnbtWqT22PXtk5/8JO677z5ceeWV+Nd//VeMHj0av/rVr3D44YfnYi699FJs374d559/PjZv3oxjjz0WixcvRlNTU0mO4Rvf+AZOO+003HHHHair2zXN6+jowHnnnYeLLroITz75ZFHtBVHkua9ZlbB161b0798fo678LlLFXoSqmSgmE1PKiaLXSOk7UezJPrG2NFHspK3kmipI1UwUPcsMPhNFr7YrYVJWiX3y+vyEYlB9E8Vw50789Tv/DVu2bPHS8iXJ7u/skd+N8Z1dgHDnTrzx38pzXOWkT58++POf/4xDDjkkr/w//uM/cNRRR2HHjh1FtVdxPz0LIYQQopdRIT891wLNzc1Yu3atU75u3Tr069ev6PY0URRCCCGEqBHOPPNMnHvuuXjggQewbt06rFu3Dvfffz/OO+88nH322UW3V3EaxaRItQVIF/vbWIL6OIvXr12eP0P6/KTqxpCmvdr265MDEYi65yDmb0S+P1mnTPve5zdGPfZbU5L1vNou/Oczlbcm9XN0kr/oJvYTHLkPvX5iZDeGTz2PtpiMkWobC9ezZfQnbFovvzAK3Xr0csY5B6RP9JYzCbe9P985B0nWi/lzuJfcoHBM7OegaI1iBew2UYoVwF66onjTTTchCALMmDEDHR0dAID6+npccMEF+N73vld0ezU7URRCCCGE6G00NDTg3/7t37BgwQKsWbMGAHDAAQegb9++sdrTRFEIIYQQZSWIkt9+saTbOVYBffv2xdixY7vdjiaKQgghhBBVzOc+9znv2F/+8pdFta2JohBCCCHKSxQkn7qqlKmwKoz+/fuXrO2anSim24B0VwE9bVyJm1zay3BCBPvWz87aIZ53myibxdBzYOKi0A0JbAxpKCCifkfT72NcAZx+RizGx/dP63kYXkg951KR30YCj2PxMaX452/3UfX7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tGlTBCB64oknerLrYg/a2tqidDodPfzww3nlM2bMiE477bTydEoUpLvPn569ykbfiaIYesWK4saNG1FXV4djjjkGLS0teOeddxCGIY477jhlpK9QHnroIQDA0qVLsWHDBrzxxhtIpVJ48MEHMXv2bADAo48+ilNPPRVBENA2tmzZAgAYOHBgz3RaOLzzzjvIZrMYOnRoXvnQoUPR2tpapl6JQnT3+dOzV9noO1EUQ9VOFC+//PJOl853v1atWgUAePnll3HQQQflHoDly5djyJAhzpeXqBx8BrJHHnkk97OzJQxDXHTRRTjmmGNw+OGH92TXhah6uvP86dmrfPSdKIqhrtwdiMvFF1+MmTNndhkzatQoAMCKFSswduzYXPny5cvz3oue4fLLL8f111/fZczKlStxyCGHFBzIVq5cifXr1+PEE0+k7cyZMwevvPIK/vjHPyZ7EKIoBg0ahHQ6jY0bN+aVb9y4ES0tLWXqlShEd54/PXuVj74TRTFU7URx8ODBGDx4sFfsihUrMH369Nz75cuX48gjjyxRz0RnJDm5f/TRR/GZz3wGTU1NThtz587FokWL8OSTT2LfffdNpvMiFg0NDZgwYQKWLl2aewbDMMTSpUsxd+7c8nZOdErc50/PXnWg70RRDFX707MvYRji1Vdfxbhx43Jla9aswciRI8vXqV7K4MGDccghh3T5amhoALBrINvzmi1fvjzv/SOPPILTTz89r/0oijB37lw8/PDD+P3vf4/999+/Zw5MdMm8efNwxx134O6778bKlStxwQUXYPv27Zg1a1a5uyY6odjnT89e9aDvRFEsNT9RXLNmDXbs2JH3UIwdOxbz58/HU089Vcaeic4oNJBt2rQJL7zwAv7pn/4pr96cOXPw85//HPfddx/69euH1tZWtLa24oMPPujJ7gvDmWeeiZtuuglXXXUVjjjiCLz00ktYvHix9FAVSpznT89e9aDvRFEsQRRFUbk7IcSe/OUvf8FBBx2EN998E/vttx8A4JRTTsEzzzyDRYsWYdWqVbjrrrscDVRn7ue77rqr4E/eQohdxHn+9OwJUbtooiiqjtNOOw3HHnssLr300nJ3RYheh54/IXoXNf/Ts6g9jj32WJx99tnl7oYQvRI9f0L0LrSiKIQQQgghKFpRFEIIIYQQFE0UhRBCCCEERRNFIYQQQghB0URRCCGEEEJQNFEUQgghhBAUTRSFEEIIIQRFE0UhhBBCCEHRRFEIIYQQQlA0URRCCCGEEBRNFIUQQgghBOX/A1fRkjOvRi4+AAAAAElFTkSuQmCC", | |
| "text/plain": [ | |
| "<Figure size 800x600 with 2 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "t = np.linspace(-np.pi, np.pi, 100)\n", | |
| "data = np.sin(t)[:,None] * np.cos(t)[None,:]\n", | |
| "\n", | |
| "labels = [r'$-\\pi$', r'$-\\pi/2$', r'$0$', r'$\\pi/2$', r'$\\pi$']\n", | |
| "ticks = np.linspace(0,1,len(labels))*(len(t)-1)\n", | |
| "\n", | |
| "plt.figure(figsize=(8,6))\n", | |
| "\n", | |
| "plt.imshow(data)\n", | |
| "\n", | |
| "plt.title(r'$\\sin(t) \\cdot \\cos(t)$')\n", | |
| "plt.colorbar(label='colorbar')\n", | |
| "plt.xticks(ticks, labels)\n", | |
| "plt.yticks(ticks, labels)\n", | |
| "\n", | |
| "# save plot as file\n", | |
| "plt.savefig('./plot.pdf')\n", | |
| "plt.savefig('./plot.png')\n", | |
| "plt.savefig('./plot.jpg', pil_kwargs={ 'quality': 90, 'subsampling': 10})\n", | |
| "\n", | |
| "plt.show()\n", | |
| "\n", | |
| "from IPython.display import Image\n", | |
| "#Image('plot.jpg')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 91, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "!rm plot.pdf plot.png plot.jpg" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "- You can use LaTeX in Matplotlib as shown in the example above\n", | |
| "- More advanced examples can be found at \n", | |
| "https://matplotlib.org/stable/gallery/index.html" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# TensorFlow\n", | |
| "\n", | |
| "- **Ubuntu** is an often used Linux distribution\n", | |
| "- **APT** (Advanced Package Tool) is the package manager used by Linux distributions like Debian and Ubuntu\n", | |
| "- **Anaconda** is a Python distribution often used under Windows (can also install system dependencies, not only python packages)\n", | |
| "- **Conda** is the package manaer used by Anaconda\n", | |
| "- **CUDA** (Compute Unified Device Architecture) is a parallel computing platform and library for Nvidia GPUs \n", | |
| "- **cuDNN** (CUDA Deep Neural Network) low-level library for GPU-accelerated deep learning" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Tensorflow Setup \n", | |
| "\n", | |
| "- Latest TensorFlow at time of writing was version 2.21.0\n", | |
| "- Official setup instructions \n", | |
| "https://www.tensorflow.org/install\n", | |
| "- The typical system dependencies for GPU support are the Nvidia Driver, CUDA and cuDNN\n", | |
| "- See TensorFlow website for compatible versions of TensorFlow, cuDNN and CUDA \n", | |
| "https://www.tensorflow.org/install/source_windows#gpu\n", | |
| "\n", | |
| "### Ubuntu 24.04 \n", | |
| "\n", | |
| "With GPU Support\n", | |
| "\n", | |
| "1) Remove old Dirver and CUDA if installed\n", | |
| "- `apt purge nvidia* cuda* libcudnn*`\n", | |
| "- `apt autoremove`\n", | |
| "\n", | |
| "2) Add Nvidia Reopository\n", | |
| "- `wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb`\n", | |
| "- `dpkg -i cuda-keyring_1.1-1_all.deb`\n", | |
| "- `apt update`\n", | |
| "- `apt` requires elevated privileges and must be run by user `root` or using `sudo`\n", | |
| "\n", | |
| "3) Install Nvidia Driver, CUDA and cuDNN\n", | |
| "- `apt update`\n", | |
| "- `apt install nvidia-driver-595 cuda-toolkit cudnn9 nvtop`\n", | |
| "- Us `apt-cache` search for finding the right packackages if necessary\n", | |
| "\n", | |
| "4) Install Python\n", | |
| "- `apt update`\n", | |
| "- `apt install python3 python3-dev python3-pip python3-venv`\n", | |
| "\n", | |
| "5) Create and activate a virtual Python environment\n", | |
| "- `python3 -m venv venv`\n", | |
| "- `source venv/bin/activate`\n", | |
| "\n", | |
| "6) Install required Python packages in the new environment\n", | |
| "- `pip install -U numpy jupyter matplotlib pandas tqdm tensorflow keras pydot`\n", | |
| "\n", | |
| "\n", | |
| "### Windows 10\n", | |
| "\n", | |
| "Not up-to-date, but a similar procedure should also work for Windows 11\n", | |
| "\n", | |
| "1) Download and install Anaconda (Python distribution) \n", | |
| "- https://www.anaconda.com/products/individual#Download\n", | |
| "- Windows > Python 3.8 > 64-Bit Graphical Installer\n", | |
| "\n", | |
| "2) Open Anaconda Prompt\n", | |
| "- Windows Start Menue > Anaconda Command Prompt\n", | |
| "\n", | |
| "3) Crate an environment (not necessarily required, but recommended)\n", | |
| "- `conda create -n tf`\n", | |
| "- `conda activate tf`\n", | |
| "- default environment is `base`\n", | |
| "\n", | |
| "4) Install required Python packages\n", | |
| "- `pip install -U numpy jupyter matplotlib pandas tqdm tensorflow`\n", | |
| "\n", | |
| "GPU Support\n", | |
| "\n", | |
| "1) Requires an adequate Nvidia GPU and installed Nvidia Driver\n", | |
| "- https://en.wikipedia.org/wiki/CUDA#GPUs_supported\n", | |
| "\n", | |
| "2) Install Microsoft Visual Studio or at least Microsoft Visual C++ Redistributable\n", | |
| "- Required by cuDNN, Community edition should be sufficient\n", | |
| "- https://visualstudio.microsoft.com\n", | |
| "- https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0\n", | |
| "\n", | |
| "3) Install Nvidia CUDA toolkit — 11.2.1\n", | |
| "- https://developer.nvidia.com/cuda-11.2.1-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal\n", | |
| "\n", | |
| "4) Install Nvidia cuDNN — 8.1.1\n", | |
| "- https://developer.nvidia.com/rdp/cudnn-download\n", | |
| "- You have to create a free account to access the files\n", | |
| "\n", | |
| "5) Create Anaconda environment `tf` and install Python packages as described above" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Import of Libraries " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 92, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "('2.20.0', '3.13.2')" | |
| ] | |
| }, | |
| "execution_count": 92, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "import os, time\n", | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import pandas as pd\n", | |
| "from tqdm.notebook import tqdm\n", | |
| "#from tqdm import tqdm # use this in the terminal\n", | |
| "\n", | |
| "os.environ['CUDA_VISIBLE_DEVICES'] = '0' # 0=GPU1, 1=GPU2, ... -1=CPU\n", | |
| "os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # 0=DEBUG, 1=INFO, 2=WARNING, 3=ERROR\n", | |
| "os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'\n", | |
| "\n", | |
| "import tensorflow as tf\n", | |
| "import keras\n", | |
| "\n", | |
| "tf.__version__, keras.__version__" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 93, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "tf.get_logger().setLevel('ERROR')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Tensors\n", | |
| "\n", | |
| "TensorFlow tensors most of the time behave like NumPy arrays, but are immutable and allow back-probagation." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 94, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[[ 0, 1, 2, 3],\n", | |
| " [ 4, 5, 6, 7]],\n", | |
| "\n", | |
| " [[ 8, 9, 10, 11],\n", | |
| " [12, 13, 14, 15]],\n", | |
| "\n", | |
| " [[16, 17, 18, 19],\n", | |
| " [20, 21, 22, 23]]])" | |
| ] | |
| }, | |
| "execution_count": 94, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a = np.arange(24).reshape((3,2,4))\n", | |
| "a" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 95, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", | |
| "I0000 00:00:1777791487.591328 886747 gpu_device.cc:2020] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 22337 MB memory: -> device: 0, name: NVIDIA GeForce RTX 3090, pci bus id: 0000:5e:00.0, compute capability: 8.6\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<tf.Tensor: shape=(3, 2, 4), dtype=float32, numpy=\n", | |
| "array([[[ 0., 1., 2., 3.],\n", | |
| " [ 4., 5., 6., 7.]],\n", | |
| "\n", | |
| " [[ 8., 9., 10., 11.],\n", | |
| " [12., 13., 14., 15.]],\n", | |
| "\n", | |
| " [[16., 17., 18., 19.],\n", | |
| " [20., 21., 22., 23.]]], dtype=float32)>" | |
| ] | |
| }, | |
| "execution_count": 95, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "t = tf.convert_to_tensor(a, dtype='float32')\n", | |
| "t" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 96, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[[ 0, 1, 2, 3],\n", | |
| " [ 4, 5, 6, 7]],\n", | |
| "\n", | |
| " [[ 0, 0, 0, 0],\n", | |
| " [ 0, 0, 0, 0]],\n", | |
| "\n", | |
| " [[16, 17, 18, 19],\n", | |
| " [20, 21, 22, 23]]])" | |
| ] | |
| }, | |
| "execution_count": 96, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "a[1,:,:] = 0.0\n", | |
| "a" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 97, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "ename": "TypeError", | |
| "evalue": "'tensorflow.python.framework.ops.EagerTensor' object does not support item assignment", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[31m---------------------------------------------------------------------------\u001b[39m", | |
| "\u001b[31mTypeError\u001b[39m Traceback (most recent call last)", | |
| "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[97]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43mt\u001b[49m\u001b[43m[\u001b[49m\u001b[32;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m:\u001b[49m\u001b[43m,\u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m = \u001b[32m0.0\u001b[39m\n\u001b[32m 2\u001b[39m t\n", | |
| "\u001b[31mTypeError\u001b[39m: 'tensorflow.python.framework.ops.EagerTensor' object does not support item assignment" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "t[1,:,:] = 0.0\n", | |
| "t" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 98, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<tf.Tensor: shape=(3, 2, 4), dtype=float32, numpy=\n", | |
| "array([[[ 0., 1., 2., 3.],\n", | |
| " [ 4., 5., 6., 7.]],\n", | |
| "\n", | |
| " [[ 0., 0., 0., 0.],\n", | |
| " [ 0., 0., 0., 0.]],\n", | |
| "\n", | |
| " [[16., 17., 18., 19.],\n", | |
| " [20., 21., 22., 23.]]], dtype=float32)>" | |
| ] | |
| }, | |
| "execution_count": 98, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "tf.stack([t[0], tf.zeros_like(t[1]), t[2]], axis=0)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "https://www.tensorflow.org/api_docs/python/tf" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## MNIST Image Classification Dataset\n", | |
| "\n", | |
| "MNIST database (Modified National Institute of Standards and Technology database) \n", | |
| "for handwritten digits classification\n", | |
| "\n", | |
| "<img src=\"https://upload.wikimedia.org/wikipedia/commons/2/27/MnistExamples.png\"> </img>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Load Data Set" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 99, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "(60000, 28, 28, 1) (60000, 10)\n", | |
| "(10000, 28, 28, 1) (10000, 10)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "from keras.datasets import mnist\n", | |
| "from keras.utils import to_categorical\n", | |
| "\n", | |
| "input_shape = (28, 28, 1)\n", | |
| "num_classes = 10\n", | |
| "\n", | |
| "# the data, split between train and test sets\n", | |
| "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", | |
| "\n", | |
| "# normalize input data\n", | |
| "x_train = x_train.astype('float32').reshape((-1, *input_shape)) / 255\n", | |
| "x_test = x_test.astype('float32').reshape((-1, *input_shape)) / 255\n", | |
| "\n", | |
| "# convert class labels to one-hot encoding\n", | |
| "y_train = to_categorical(y_train, num_classes)\n", | |
| "y_test = to_categorical(y_test, num_classes)\n", | |
| "\n", | |
| "# input, output shape\n", | |
| "print(x_train.shape, y_train.shape)\n", | |
| "print(x_test.shape, y_test.shape)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 100, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1., 0., 0., 0., 0., 0., 0., 0., 0., 0.])" | |
| ] | |
| }, | |
| "execution_count": 100, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "y_train[1]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Some Samples" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 101, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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VqxYIe+884506NCh1td79uwpTZs2rbW3vXv3yqFDh1y/NziL/Hd//otQAxA+1AD31wDyH+HilfwXoQYAJl6pAZGc/yLUANeezrl06VKNj4/XRYsW6a5du3Ty5MmakpKipaWlTi+tXk6fPq3bt2/X7du3q4jonDlzdPv27Xrw4EFVVX3++ec1JSVF//rXv+o//vEPveOOO7RDhw56/vx5h1det/vuu0+Tk5P13Xff1SNHjtQ8zp07VzPm3nvv1dzcXH3nnXd069at2q9fP+3Xr5+Dq0akIP/dnf+q1ACEFzXA3TWA/Ec4RUv+q1IDqAFoiGipAdGa/6rUANc20VRV586dq7m5uRoXF6e9e/fWTZs2Ob2kelu3bp2KiOVRUFCgqt8cb/vEE09oZmamxsfH62233aZ79+51dtEBMO1JRHThwoU1Y86fP6//+Z//qa1atdLExES988479ciRI84tGhGF/Hc3agDCjRrgXuQ/wi0a8l+VGkANQENFQw2I1vxXpQb4VFVDc08bAAAAAAAAEJ1c+TvRAAAAAAAAADehiQYAAAAAAADYoIkGAAAAAAAA2KCJBgAAAAAAANigiQYAAAAAAADYoIkGAAAAAAAA2KCJBgAAAAAAANigiQYAAAAAAADYoIkGAAAAAAAA2KCJBgAAAAAAANigiQYAAAAAAADYoIkGAAAAAAAA2KCJBgAAAAAAANigiQYAAAAAAADYoIkGAAAAAAAA2KCJBgAAAAAAANigiQYAAAAAAADYoIkGAAAAAAAA2HBFE23ixIni8/nE5/NJXl6e08uBhzzwwAM1r73mzZs7vRxPIv/hFPLfHagBcAo1wHnkP5xC/rsDNQBOCaYGuKKJJiLSunVrWbx4sTz//POWr33wwQcyYMAASUxMlKysLLn//vvlzJkzAV/7f/7nf+T666+XhIQEufbaa2Xu3LkBz71w4YI8+uijkpOTI82aNZM+ffrImjVrAp7/5Zdfyo9//GNJSUmRli1byh133CGfffZZwPMjde979+6VBx98UPr37y8JCQni8/nk888/D/i5RUR2794tQ4cOlebNm0tqaqrcddddcvz48YDnr1y5Unr06CEJCQmSm5srTz31lFy6dKnWmLvuuksWL14sAwcOrNfaEFpuzP8zZ87IU089JUOHDpXU1FTx+XyyaNGigJ9XROTUqVMyefJkSU9P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", | |
| "text/plain": [ | |
| "<Figure size 1600x200 with 5 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "plt.figure(figsize=(16, 2))\n", | |
| "for i in range(5):\n", | |
| " plt.subplot(151+i)\n", | |
| " plt.imshow(x_test[i,:,:,0], cmap='gray')\n", | |
| " plt.title(str(np.int8(y_test[i,:])), y=-0.4)\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Keras Model\n", | |
| "\n", | |
| "Keras used to be an independent library. With TensorFlow 2.0 the complete Keras API was integrated in TensorFlow. " | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Sequential API" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 102, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from keras.layers import Input, Dense, Conv2D, MaxPooling2D, Dropout, BatchNormalization, Flatten, Activation\n", | |
| "from keras.models import Sequential\n", | |
| "\n", | |
| "model = Sequential()\n", | |
| "\n", | |
| "model.add(Input(input_shape))\n", | |
| "model.add(Conv2D(32, kernel_size=(3, 3), activation='relu'))\n", | |
| "model.add(Conv2D(64, (3, 3), activation='relu'))\n", | |
| "model.add(MaxPooling2D(pool_size=(2, 2)))\n", | |
| "model.add(Dropout(0.25))\n", | |
| "model.add(Flatten())\n", | |
| "model.add(Dense(128, activation='relu'))\n", | |
| "model.add(Dropout(0.5))\n", | |
| "model.add(Dense(num_classes, activation='softmax'))\n", | |
| "\n", | |
| "model.build()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Functional API" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 103, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from keras.layers import Input, Dense, Conv2D, MaxPooling2D, Dropout, BatchNormalization, Flatten, Activation\n", | |
| "from keras.models import Model\n", | |
| "\n", | |
| "x = x_in = Input(input_shape)\n", | |
| "x = Conv2D(32, kernel_size=(3, 3), activation='relu', name='foo')(x)\n", | |
| "x = Conv2D(64, (3, 3), activation='relu')(x)\n", | |
| "x = MaxPooling2D(pool_size=(2, 2))(x)\n", | |
| "x = Dropout(0.25)(x)\n", | |
| "x = Flatten()(x)\n", | |
| "x = Dense(128)(x)\n", | |
| "x = Activation('relu')(x)\n", | |
| "x = Dropout(0.5)(x)\n", | |
| "x = Dense(num_classes, activation='softmax')(x)\n", | |
| "\n", | |
| "model = Model(x_in, x)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "- Models can be used like layers in other models (nesting)\n", | |
| "- It is much easier to build larger models using the functional API" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Model Info" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 104, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"functional_8\"</span>\n", | |
| "</pre>\n" | |
| ], | |
| "text/plain": [ | |
| "\u001b[1mModel: \"functional_8\"\u001b[0m\n" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", | |
| "┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n", | |
| "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", | |
| "│ input_layer_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">InputLayer</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ foo (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">26</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">26</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">320</span> │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ conv2d_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">24</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">24</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">18,496</span> │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ max_pooling2d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">12</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">12</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ dropout_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">12</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">12</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ flatten_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Flatten</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">9216</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ dense_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">1,179,776</span> │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ activation (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Activation</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ dropout_3 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ dense_3 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">10</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">1,290</span> │\n", | |
| "└─────────────────────────────────┴────────────────────────┴───────────────┘\n", | |
| "</pre>\n" | |
| ], | |
| "text/plain": [ | |
| "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", | |
| "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", | |
| "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", | |
| "│ input_layer_1 (\u001b[38;5;33mInputLayer\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ foo (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m320\u001b[0m │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ conv2d_2 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m24\u001b[0m, \u001b[38;5;34m24\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ max_pooling2d_1 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m12\u001b[0m, \u001b[38;5;34m12\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ dropout_2 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m12\u001b[0m, \u001b[38;5;34m12\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ flatten_1 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m9216\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m1,179,776\u001b[0m │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ activation (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ dropout_3 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", | |
| "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", | |
| "│ dense_3 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m1,290\u001b[0m │\n", | |
| "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">1,199,882</span> (4.58 MB)\n", | |
| "</pre>\n" | |
| ], | |
| "text/plain": [ | |
| "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m1,199,882\u001b[0m (4.58 MB)\n" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">1,199,882</span> (4.58 MB)\n", | |
| "</pre>\n" | |
| ], | |
| "text/plain": [ | |
| "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m1,199,882\u001b[0m (4.58 MB)\n" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n", | |
| "</pre>\n" | |
| ], | |
| "text/plain": [ | |
| "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "model.summary()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 105, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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EVFfXy8hIbFq1SqyToqiSkpKzp8/39zc3LE+r1+/Dg4Onjt37oQJEz5U50mTJt26dYv3Nioqav/+/R2zKSoqLlq0iKIoJpN548aNoqIidXX1UaNG0en04ODgJ0+eTJo0SVtbOzg4uKys7MiRIxISEj4+PmpqaklJSQ8fPgQAFxcXsipra+vY2NikpCTy9vbt24cPHw4NDe3uXkao23BEj74MSUnJ5cuX5+fnm5mZfTSzmppaTk7O1q1bFRQUNmzY8OrVKz09PQkJiaCgoKCgIBcXF1NT02PHjp07d67H9bGysiLDeWL8+PHBwcHBwcHkJ6cdGo1mYmISHx+vo6PTxTqlpaUfP348atQoBQWFffv2kZkfFxeXo0ePBgYGampq3r1718rKimROT08fMmRID/7djtBHYaBHn19bW9v27dsBgMlkBgcHZ2Zm8n966tSp8vLypqamly9fiouLT5o06fr16yTP2bNng4ODb9++HRkZCQCPHj0iI/r169fr6uqmpqY2Nzenp6erqKgsXryYrK2xsXH8+PHffvstl8vlzZ/0gJycXF1d3UezMZnMy5cvv337trKysrCw0MPDo6ys7MGDB7GxscHBwXfv3j179mxRUVFwcPCRI0fmz5/f2NhYXFzc2trKYDDmz59PVpKSkvLNN98sXbr0jz/+GDduHElsbW3lcDh4l3zUG3D4gPrUsGHD4uLiKisrz5w5Q27ZIScn99GlDA0NAaC2thYAMjIyMjIysrKyyEelpaVNTU0AwGKx/skd92pqaviD7IemblxdXcPCwq5cucJkMlkslry8fBfrNDAwaGho4K3/yJEj5HVOTg55wWQyFRUVyWsxMTFhYeHu/Ngg9Kkw0KM+NXr0aBERkf3792/bti00NHTixIkknTzkgFyI2fHtixcvRo0a9fz583379vFWRULk53oWZkpKirGxcXh4eNfZ3N3df/vtt23btgEA7+odFoslKSnJey0sLExe5+fnq6qqknMSH2VmZvb8+XPeU20R+oww0KM+FRcXR1HUggUL2l2dQubHly1bNmzYsJ07d5IBu7e3d0tLy+XLlzdv3uzh4REaGmpgYPD27VsAuH79elFRUTcLVVdXnz9/PpkNt7W1DQ4Ovn79ekpKCn+eq1ev/v7777/++mvXq0pMTNy7d6+CgoKJiYm5ufmTJ09I5ffu3ctms+Pi4lJSUgYPHrx9+/a8vLzDhw/PmjUrOjo6ISGBxWK9fPny/PnzH1qzm5tbu7PWCH0uGOhRr2hqagoJCWEymeTtli1byGnG2NhYe3v7UaNGiYmJkXFxQkICAOzYsaOgoEBPT48Mh588eTJu3Dhra2sxMTEAKC0tNTQ0nDBhwsCBA3nzM+2K+GiMTklJaRfc+aWmpra1tZmYmGRlZV26dKmgoID/00ePHpFyL1269P79ezMzs7t377LZbC6XCwCRkZF0Ot3ExAQAmEzm2LFjR44cCQB1dXWWlpYTJ040MDAQEREhq2IwGLzVPnnyREJCAgCEhYUnT57Mm69H6DP71CdMaWhofOkqI9QrTExMPu+V+92nq6vLm8VCqGuysrKf+oQpHNEjgaKrqztr1iz+lJMnT7Ybnn9IVlYW7xxvHysoKOhmJRHqAby8EiGEBB1O3SCE0H9ID6ZucESPEEICDgM9QggJOAz0CCEk4DDQI4SQgMNAjxBCAg4DPUIICTgM9AghJOAw0COE0H8J766u3dfDWyDIycn1oDAk8BoaGoSFhfv16/elK4J60bt37yQlJcn95lAfY7PZfRfo58yZM3Xq1J4tiwRVeXm5v7+/iIjI1atXv3RdUG+JiYlZu3athobG2bNnv3Rdvkbk0cSfulQPA72WlpaNjU3PlkWCityWi0ajYd8QYMXFxQAgJiaGrfxF8B5J9klwjh4hhAQcBnqEEBJwGOgRQkjAYaBHCCEB9598wlRkZKS+vr6RkdGXrghC6N/iyZMnQkJCdnZ2vbT++Ph4BoPR2tpK3q5atYo87/c/4TMH+tevXz958sTPz6/Ha4iKitLV1TU2Nu4iT2RkpJubWy8F+vr6+gEDBsyaNWvnzp1NTU3bt28HgMWLFysoKGRnZ1+6dGns2LHDhw//7OWmpaVFRESQ18uWLZOWlgaArVu3trS00Ol0LS0tHx8fkthRbW3tnj17yOtJkyaZm5sDwIULF3Jzc2k0mpKS0vjx43V1dbsoPTs7OzY2trKyUkxMbPXq1SSxoaFh9+7dHA5n/vz56urqcXFxTk5OkZGRHh4ePd7MsrKyO3fuvH//3tbWtovdePDgwVmzZnX/i9SdbhMQEODm5ubt7f1pNe4e/m5D+omUlNTy5ctJ3RITE8k+7I2io6KisrOzdXV1vb296XR6RUXF4cOHAUBcXNzY2NjDw0NYWLjTHgIAbW1tkZGRL168aG1tdXNzs7Oz27Rp07Zt2/Lz81VUVHpcpfT09NjYWFFR0VGjRunr63eap6mp6eTJkwsXLuz+arvuFU+ePKHT6XZ2dp/aebrj+fPnDg4Ow4cPHz169IULF168eLFo0aLuF8FgMBgMxqxZs3R1dblc7saNGwGgX79+BgYGHh4eYmJiCQkJt2/fBgAZGRl7e/vP/nP1maduXr9+/Q+vriW99nPVpwfOnz//9u3bmTNnAkBTU1NISEhISAhpmOzs7JCQkB5cxNp9ly5dCgkJqaur40+sqqoKCAgwNzdvl95OYmJiSEhIeno6f2Jra2toaKiRkVFSUtKHFjxw4ICVldWjR4+4XC5/+uzZs4ODg0NCQsrKygDA0dFxwIABe/fu7cmGAQDAgwcPhgwZEhMTU1hYOGPGjEWLFn0o58GDB5uamrq/5n9VtyH9ZMWKFdeuXSN14+3Dz87Pz8/X17ekpGThwoUjR47kcDi8j1JTUydOnPjNN9/wUtr1kHfv3llZWa1du7a2tpaXZ+bMmY2NjcePH+9xlbZv3z5u3Ljc3Nxnz57Z29ufO3eu02xNTU0HDx78pDV3s1d8aufpjvj4eIqifvrpp+Dg4B4MMRkMRkhISLvHAicmJk6ePNnHx4eXwuVyL126ZG9vv2/fvn9eZ369NXWTmZlZUlIiKiqalpbm4eFhaGjY0NBw9uxZBweH+/fvW1tbOzk5AcDOnTtXrFgBACUlJY8ePRo+fHhiYmJVVVVmZmZAQICqqipZW1ZW1q1btxoaGoyNjadMmQIAbDb73Llz7969mzFjhqysbEFBwcmTJ4WFhQ0NDSdPniwsLBwZGamtrf38+fP6+vrvvvtORkYGAN68eXPz5k0hIaFvvvlGSUkpOzs7LS3t22+/5a95ZGSkvLw8b8gDAKKioocOHVq8eDF/Ni6Xe/PmzZycHHl5eS8vL2VlZSaTuX//fvKpmJjYqFGjhg0bBgCFhYW3b99uaGgYPny4vb39h/aYhYWFhYVFZmZmTk4OL5E3uK6oqLh8+XJKSoqLi0vHZWVlZYODg/fv33/r1i1e4rRp08gLTU3NwMDAmzdvdnrhc2Vl5YoVK8aPHz906FAJCQleXAgNDU1JSZkxY8apU6d4mV1cXM6cOdPY2CgpKfmhDenC3LlzT5w4MWHCBADYuHGjmZnZN998Y2JiEhkZSZ7o/ejRIzqd3tbWVlVVtX37dnl5+UWLFv13u83PP//s6enJn+3zdpvCwsJz58599913e/bskZWVDQkJiYiImDx5cnBwMMnAYDCuX7/O4XA67SG//vprbm7uoUOHamtrbW1tyShSR0dnwIABkZGRa9as6UET5+fnb9u2LT09nTxzNCAgYPTo0RMmTHj58mVDQwPpvWfPnh09enRERERVVRWJm6ampiUlJUJCQllZWZ6engYGBkwms4tewfteAEBJScnVq1e1tbXJ29jYWF42MzMzbW1tMzMzAEhISGhublZSUmpXEADU19dfuXKlpqZm7NixpqamTU1Ne/bs4d/83NxccrR95coVNpvNv70FBQW3b99ubGy0sLBwdXUFgMzMzCtXrtBoNFlZWQcHh6FDh6alpTEYDAA4efIkg8FYs2YNr4FkZGQSEhIAwM7Ojuz/adOmmZiYhIeH//jjjz3Y/x/SWydjMzMzAwMDT506lZ+f7+zs3NDQ0NDQsG7dutWrV5eVlc2YMePChQsAsHPnTpK/pKSEpHT07t27MWPGlJeX8ydu3rw5KSnpwYMH5AtMsFisU6dOkXFiZGTkt99+m5yczGAwHB0d2Wx2cnLyyJEj8/PzMzMzHRwc3r9/32lxL1++bDfLMXLkyIEDB/7888+8FA6HM3bs2GnTppWVle3bt09fXz8jI4PJZIaEhGzevLmqqurkyZMjRozIy8u7e/fuoEGDLly4kJeXN2LEiNDQ0B7sTAaDERkZqa6ubmlp+anLlpWV/fbbb3Q6fdy4cZ1mSElJaWlpuXnz5ps3b0JCQiwsLGpra2/fvr158+bw8HBZWVn+zAMGDGCz2a9fv+7BVpSWltbU1JAoDwBSUlI+Pj6PHj1iMpknT54kiY8ePSL9nue/223mzp1bWFhIZlGIz95t+MetFEUBAP/x3LZt26qqqtzc3ISFhTtd/PHjxxwO588//0xOTnZxcdm9ezdJHzBgwIsXLzpd5KMSEhKcnJx4T5a2tLTU1tbOyMggu5Qknj17tqKign8p8gt9+vTpvLw8BweH169fd90reJhMpq2tbXp6elRUFP+uJiQlJTds2EBer1ixQklJqWNBdXV1NjY2jx49qqio8PLyevr0afc39u7du4aGhufPn3/16tXYsWNnz57N+4jL5TIYDBsbm077Z1NTU1BQ0KRJkzgcDq8zAwCbzSa/Ye3GB/9cL56MHTZsGBkMFhcX5+bmampq0un0v/76i06ne3l5bd68mTfk5NHW1ra1tXVxcfH19f3/VaTT5eXlNTU1hw8fzhuTLliwYP78+RRFaWpqkgWtra2zsrJsbGxOnDhB8vj7+5NhuKura3Jy8rFjx6ysrMgYTVpamsFgTJw4seOsLkVR7W4lQafTt23bNnHiRB0dHZKSlJQUHR0dGBi4Z8+epKQkW1vbgwcPLlmyBAC8vLwOHjy4a9eu5cuXp6WlHTt2rK2tzcLCQkZGRkVFZevWratXr/6kW1WkpaVNnDhRRUXl9u3bpPLdV1tb6+bmVlZWdvny5Q+NCltaWgDA3d197969WlpaK1euvHXr1p49e0xNTa9du0a+YEeOHFFUVNTV1SXRpGe3Oeq4YzumEE5OTsrKyqtWrVJUVKyoqPiPdpsBAwYEBgZu3LjRzc2NpHz2bmNoaOjo6BgeHr506VIyQ8K7y9Dx48dXr149ZsyYsLCwD7UIafqDBw+am5vfunXr8OHDS5cu7aJduqP7rezr67t//34ytr1w4YK1tTWZ9VVVVb106VLHUyn8vYKXGBkZOWHChD/++AMAyBC4XbbVq1e/efOGyWRKS0ubmppmZma2K0hTU1NCQkJLSwsArKysLly4MGzYsHZHM0ZGRm5ubnfu3Jk2bZq3tzcvdu/atautrS08PFxRUbG4uPjkyZNbt27V19c3NTXNz88nMzzXrl27ePGii4vLw4cPZ82aRY5pyGGBhIREU1PT1atXZ8+eTaPRKIr64Ycfbty48csvv5AD1s+oFy+vVFZWJi8kJCRIl+JH2l5MTKy5uRkAqqqq/lchISESTXikpaUfP36sra196dIld3d3/pXTaDSyntDQ0O3bt5PRVk1NDX8RvNdcLpc3tPH09ORF7XYMDAzevHnTLtHLy8vFxeXAgQMdN6EdJSUlABAVFYW/mxP+/vrNnz9/6dKlbDY7NjY2ODg4Ly+v0wrwy8/Pd3Nzk5CQuH//vqGhIUncuHHjsWPHPrpsS0uLl5dXdnb2xYsXeV+b06dPBwcH8x9+mpqa8jaE7HkJCYkffviBF574FRQU0On0AQMGfLT0jjQ1NaWlpW/cuEHeNjQ0REREODg48PoAdNkNiP9Wt1m/fj2Hw7l06VLHTWinZ91GSEjo/v37f/zxh5qa2vTp0wHAwcEBAK5fv+7v7+/o6Hj9+nUpKalOKwwAZE6Dh3dqsaCgYNCgQR9aqmt2dnYMBqO0tJS8TU1NLS4uNjU17djK7Zqs3W7vZq/o9FeEP9vSpUt///333bt3r1y5stOC+NvX1NTU2dm5ZxvOM2/evClTphQXF5PzJaR3taukhIRESEjI2bNnbW1to6KiyHHnqlWrTp8+vXLlyi1btvzDOnTUp5dXstlsb29vY2PjS5cubd26FQAcHBy8vb3NzMweP35MzvLr6OgcOHAgKyuLN9laVlZ25MgRAKitrW13xMfT2NgoIiJCo9Gys7Pp9P9t1B9//JGXl1deXl5dXW1tbb1gwYKpU6eqqanJy8sDgKamZqeTrePHj4+KikpPT+efbwWAnTt38gaGNjY2I0eO/PPPP+l0ekxMTP/+/RcsWNBpxZYtWxYTE/PkyRMnJychISF1dXUREZHY2NiQkBAHBwf+CxLIpRrkjOKuXbtMTU3nzJnj6elZWVk5adKkM2fOAICvr6+pqenGjRuHDRs2d+5c3rLk6qDExEQACA8Pz8vL27Bhw9KlS+Pi4qysrFJSUlJSUoYOHerp6Xn69OkHDx7wD1gMDAwCAgKOHz++ZMmSK1euWFhYuLm58W5MWFtb+/Tp0/nz55N5CQaDMXLkyJ5N0APA0aNHp0+fPn78eAUFhevXr3t6ejo7O7PZ7MrKynnz5tFotNjY2ICAAADQ0dFZsWLF4MGDZ82a9d/tNnJycuvWrSPX3kDvdJvz588XFBRUV1efO3du0aJFjo6OhYWFU6dOpSjK2tqa7K4VK1YICQl17CFr1669devWwoULtbS0GhsbV61aBQCFhYVv3rzh712fRF9ff+XKlUOHDvX19SWj3X379klLS9vZ2a1cuZLD4RQUFFRWVgKArKwsk8n8+eefyYRkcnLyzJkzpaWlL1++HB8fr6Wl1UWv4M3RT5gwYe3atWw2W0hIKCYmJjAwsF02X1/fLVu29OvXb+TIkWSRdgXJy8tv27atsLBQW1ubRqNpamp2nKP/kKVLlz548MDX13fw4MF37tyZMWOGiopKW1sbAFAURfY2Qb4+v/32W3Jy8vjx48lv/5s3bxITEx0cHNTV1S9durRz504FBQUJCYng4GBFRcUuLlXogc8c6PX09Mi1laamprzpXV9fX3KqRFNTMzQ09P79+6dPnyZn1Y4dO3b69GkxMTF/f/9nz54BwMKFC2VkZHgjAh4ajWZra7tt2zYA8PT05PX1ZcuWAUBQUFBYWFh9ff3cuXN5VyatX7++tbW1vr7+yJEjdDrdxsbm4cOHkZGRVVVVnY4WiRkzZgQFBZ0+fXrnzp0SEhJBQUFkdGNtbX306NHi4uLhw4cLCwvfu3ePXJcWGBjo5eWloqLCZDKDgoKGDh0KALa2tkFBQaampqampnl5eVFRUZWVlbxrWlJTU4cNG8brefz4545JZUi/4cnIyOBwOPwnDHhsbW1tbW15bx0dHdtdIcflctPT05cuXUpGjjwHDx709vZOT0/fsWPH5MmT+W8/6+bmJisrS64LjIuLe/PmDe/MYQ+MGTPm+fPn5PLKM2fOkMsr6XT6w4cPr169OmjQoJkzZ5KAe/jw4UuXLpFrlv9z3cbY2DgoKIhs3aJFixobGzkcjrq6eu91GwMDg1u3bpHZORERkU67B3ToIYMHD87MzIyMjGxqalq3bh0Z4J8+fVpSUrLHgR4AfvnlF3d397i4OFFR0ZUrV5J9Pnjw4MjIyMePH3/33XdZWVmqqqpCQkI3b968f/8+Wcrb29vd3T07O/vRo0d6enoA0HWvIBQVFRMTE8nJ2FmzZgkJCbXLJiwsbGNjM3r0aN4iHQsiaygsLOS/ZqkdOzu7oKAgMhszbdo0CwsLCQmJcePGvXjxgpyMvXXr1pgxYwDg+PHjo0aNqqioUFJScnFxIZvv5+cnIiKSn5/PWyGNRjM3N4+MjCRLaWpqBgUF9Xiffxz1KVpaWshplj179nzSghRFlZeXDxky5FOX6jF/f/9r1671bNmoqKjffvvt89aH32+//fb69eueLfvs2bMTJ070bNm3b99u3ry5tbW1Z4tHRkbu2rWriwxv3rxRVVXV1tbu2fo7hd2G5590m+7bv39/eHh4FxmuXr1Kp9PNzMw+Y6FhYWFLliz5jCskSktLly5damBgwGKxerWgvjRz5kxZWdlnz5590lJ9N3XTv39/cvzVN/iHb5/K3d2dN6vbG8hwsmesrKysrKx6tqy8vHzPrpkjPDw8/slfpXoGuw3PP+k23UdmP/oY/wTA56WgoEDO5Pd2Qf9yghzo+6ws1Huw23wNyGzVZ1+turr62rVr+6Cgfz+8qRlCCAk4DPQIISTgMNAjhJCAw0CPEEICDgM9QggJOAz0CCEk4DDQI4SQgOvhdfS//fbb0aNHP29V0H8dh8Npbm5msVhf56XKX4nm5mYul1tSUoKt/EVUV1f3YKlPC/Q0Gq2trY3cwK+hoaEH5SHBRv52+G/uG+R+Jh+6RTvqDnJT339zKwswck/TT+3ANOrD92lCSPDMnTs3Ozu7V58HidC/Dc7RI4SQgMNAjxBCAg4DPUIICTgM9AghJOAw0COEkIDDQI8QQgIOAz1CCAk4DPQIISTgMNAjhJCAw0CPEEICDgM9QggJOAz0CCEk4DDQI4SQgMNAjxBCAg4DPUIICTgM9AghJOB6+ChBhP5biouLz58/DwDp6emVlZXbtm0DgLFjx1paWn7pqiHU6/AJU+ir0NTUpKSk1NzcLCQkBAAURXG53JycHCMjoy9dNYR6HU7doK+ChISEj4+PsLAwh8PhcDgURZmZmWGUR18JDPToa/Htt9+y2WzyWkhIaObMmV+2Pgj1GZy6QV8LNputoqLy7t07AKDRaG/evNHR0fnSlUKoL+CIHn0t6HT61KlT6XS6kJDQ8OHDMcqjrwcGevQVmTZtGpvN5nK5fn5+X7ouCPWdvpi6qaur6+0iEOoOLpdrZGTEZDLz8vLk5eW/dHUQAgDo378/uRis9/R6oGez2YqKipKSkr1aCkLdVFdXx2azMcqjf4mWlpaYmBhzc/NeLaUv/jDVv3//0tLSPigIoW4qKyv70lVACABAUVGxD0rBOXqEEBJwGOgRQkjAYaBHCCEBh4EeIYQEHAZ6hBAScBjoEUJIwGGgR31qw4YNa9as+dK16ET//v1/+OGHvizRxcVlyJAhfVki+mrhg0dQn9qwYUNLS8uWLVv6rERzc/NJkyYBQGtra35+/l9//dXa2tox24rTelF6AAAgAElEQVQVKyorKwFAWVl54cKFJH9paWl0dHQv/QukpKTk1KlTDg4OvbFyhPjhiB59LYyNjS9evJiWliYtLd3uI1FR0Tlz5pw9exYAlJWVV61aBQBycnI+Pj55eXkrVqzojfrk5eW1tLTY29v3xsoR4ocjetTr+vfvP3XqVE1NTRqN1u6eHmPGjDE3N29oaLhz505BQQEALFy4UFlZmXxaW1t75cqVkpISADAwMBg3bpyCggKNRktLS4uIiAAAcXFxLy8vXV3d8vLyiIiI+vr6jqWnp6enp6eT1zo6Oo6Ojq6urteuXePP4+Tk9PLlS97iTU1NwcHB5LW9vX1sbGx0dHRqaioAjB8/3sTEpKCg4Nq1a2w2W1dX18XFJSEhwc3NraCggNQKAExNTceOHSstLV1bW7tnzx74+8knampqSUlJDx8+JNlu377t6+sbHx//D/cwQl3DET3qXSIiIo8fP/7jjz9UVVW9vb1pNBpJFxISioqKunbtmqam5tSpU1+8eOHt7Q0ACxcuDAoK8vPzU1RU3LFjx9OnT/v162dqapqZmenh4cH/O6GmppaTk7N161YFBYUNGza8evVKT0+vi5poa2ubmpoCAJPJbPeRlZVVdnZ2p0vFx8fHxMS4u7sDwPnz5/39/eXk5GbNmhUZGQkAurq6oaGhBw4cUFdX37Fjx08//QQARkZG9+/f19LS4q1EWlr68ePHo0aNUlBQ2Ldv3+rVq0l6enr60KFDP22HIvTpMNCj3uXj42Nubn7hwoUFCxb4+vry0n19fd3d3V+8ePH+/fvU1FRRUdGgoCDep3PmzFm0aFF8fLy6urqhoaG9vb2oqKiWlpasrGxubu6tW7cAYP369bq6uqmpqc3Nzenp6SoqKosXL/5QNaSkpKKiouTk5I4dOxYXF9fuUzk5uS7usVpcXKykpDR06FAnJ6fU1NS2trakpCR7e3ttbW0AYLPZbm5uq1atWrx4Mfk9MDAwePHixZYtW4KDg8lwfv78+Y2NjcXFxa2trQwGY/78+WTNdXV1cnJyPdirCH0SDPSodw0YMAAAXr9+DQBv3rzhpRsaGgJAbW0tANTX14eEhJw/f5736atXrwCgqakJAMTFxR8/ftzS0mJiYvLjjz+GhYXdvXu33RoyMjJCQkKePHnSaR2EhITCwsJMTEyOHTvGC7L8ampqOk7c82hpaVVXVxsYGDQ0NPASd+/e3dbWBgD5+fksFgsAmEymjIwMANy+fTsrKysnJyczM9Pf3x8A+Jetqak5cuQIeS0tLU2eeIVQr8I5etS7SHAnkyok6BMvXrwAgPfv3/Nmw/m1u3t2dna2gYHB+PHjLS0tZ8+ebW9vT6PRXrx4MWrUqOfPn+/bt6/rOmzbts3DwyM6OnrBggWd3pc7JSVl7NixnS5rb28/atSoVatWiYqKSklJ7dixo7Gxkfdpp48XZ7FYCxcuXLRokYWFxb17927dupWfn6+qqtpxS83MzJ49e9Z15RH65zDQo94VERGRmZk5bdq0+vp6Ozs7XvrVq1fv3r3r4+Nz8eLFnJwcAEhPTw8PD+90JaampmTap7Gxkc1mR0dHUxS1efNmDw+P0NBQAwODt2/fAsD169dTUlLaLTtmzBhy2UxWVta6desA4O7du+3G/rGxscePH5eSkiLnYyUkJIKDg/v16zdo0CB3d/dffvklLS0NAGJiYpKTk2/cuNHU1NTW1vahi0SHDh3q6ekJANra2g0NDdXV1YcPH541a1Z0dHRCQgKLxXr58iU5fHFzc1u/fn2P9itCnwADPepdbW1tw4cPnzp1qoaGxl9//fXXX3+RGQ8OhzNu3LjRo0ebmZmRGQ/i4MGDysrKZKLj7NmzCQkJJSUlsrKy5FMmkzljxgxyIrS0tNTQ0HDChAkDBw4UFxf/UAWqq6tDQkI+WskTJ07MmDHj4MGDVVVV27dvB4D3799HREQsWrSIdx29n5+fq6urlZUV70E6BQUFJ0+eJK/LysqOHTvGWyeXy01ISPj555+bm5ubm5stLS0nTpxoYGAgIiJCMgwcOLBfv354yQ3qC1QvY7FYGhoaX3orEfoI/Gcs+iIUFRWfP3/e23EYR/RIoLSbB2cwGAwGozsLNjQ0HD9+vDeq9CHdrBhC/xxedYMQQgIOR/RIoHR6DQ9CXzkc0SOEkIDDQI8QQgIOAz1CCAk4DPQIISTgMNAjhJCAw0CPEEICDgM9QggJOAz0CCEk4ProD1NiYmL9+/fvm7IQQug/obm5uW8K6qNAr6CgcO7cuS6e7YAQQl8bX1/fTh90/Nn13S0QzM3N5eXl+6w4hBD6l+M9Qrm34Rw9QggJOAz0CCEk4DDQI4SQgMNAjxBCAg4DPUKd2Llz5/79+/lfIPTfhYEefRlFRUUhISFNTU2dfhoVFZWdnU1eHz58mDwr/KMOHjxIVpibm0seIN5jGOiRIMFAj76M/fv3h4eHX7x4sdNP+QN9QEBAN/9txwv0RkZGnp6en6WeK1asWLRo0WdZFUJfCj5KEH0BLBbrzp07ERER33///ezZswGAy+XeuHEjKyurra1t0qRJiYmJVVVVmZmZAQEBERERfn5+f/755+zZs0nEv3jxoo2NTVFREYPB6Nevn729vZOTU2xsbFVV1fbt2+Xl5b29vfPy8kisj46OTklJMTAwmDhxIo1G279//8SJEyMjI6WlpadPny4kJJSdnZ2Wlvbtt992XecrV65kZmYCAI1GU1NT8/Pzk5CQ4HK5UVFROTk5ioqKkydPlpaWbmho2LlzJwBISEiYmJi4u7sLCQklJyfzjjBMTU19fX17dfci1A6O6NEXcO3aNR8fnwEDBqipqZHo6evru3379sbGxo6ZydRNUVHRuXPnAKCxsfGXX35RV1cnn75//37x4sXtjgx4UzdbtmxZtGhRdXX1li1b/P39AWD//v1z584tKCjYtWvX1q1bP1pV3tTNlStXQkJCrl+/XlRU5O/vv3DhQg6HM27cuOnTp5eXl+/evdvExKSqqoq3YEFBgY+Pz8KFCwEgOTk5JCRk7969ffM3SITawRE9+gKOHj2qr68fHBzM5XKPHDmycuXKtLS0V69eCQsLkwy2trYuLi78I19/f/+pU6f6+/ufO3du0qRJ4uLi1tbWRUVFRUVFtra2ERERYWFhysrKq1atUlRUjIiI4BX08OFDbW3tpqYmTU3NgwcPAsDvv/8+aNCglJSUDRs2AICxsbGxsXE3a37q1CkzM7MrV64kJycnJSXdv3/fwsJCWlra1NQ0LCzs7Nmzy5Ytc3Z2Tk1NpdFoCgoK165dO3z4MFk2KCjop59++lz7EKHuwxE96muvX78uKSlRUVEBABMTk6ioqI6nZIWEhCiK4k/R19dXUFB4+vTpkSNHAgICAGDSpEm3b99ubW2lKKqmpqbTpfjf8l4rKysDgISEREtLy6dWXklJCQBERETYbDZJ6devHwAMGjQoKCjIzMzs+PHjo0aNYjAYFEVxOJz379/zllVVVf3U4hD6LHBEj/ra0aNH586du3z5cvK2tLT06dOn5ubmTk5OLi4uIiIiP/30k46OzoEDB7KyskhMJxYsWBAYGKigoKCvrw8AjY2N6urqLBaroKCATqcDgI6OzooVKwYPHmxkZEQWmTt3rru7u6enJ4PBmDx5MsnWTjfn6DuysbFxdXVNSkqysbGRk5MjFcjLyyOf5uXlMZlMUVHRT10tQp8dBnrU17S1tSdOnMh7++OPP+bm5oaHh0dEROTk5LBYLABYuHChjIxMaWkp8F114+XllZmZ6ebmRha8du3ahQsXpKSkfvjhh6dPnwLA4cOHL1261NraamRkRGL6unXrhg0blpqaunr1am9vbwBYtGiRuLg4ACgqKs6cOfNDlVyxYgXJxnvh6+trZGREarJq1SoJCQlhYeG7d+/eunUrOzubd3YhICBASUkpOzuby+Vu2LCBVGPo0KFBQUGmpqaff28i1A20doe6nx2bzdbV1aUoKiMjA+9eiRBCPAMHDqyrq4uOjjY3N+/VgnCOHiGEBBwGeoQQEnAY6BFCSMBhoEcIIQGHgR4hhAQcBnqEEBJwGOgRQkjAYaBHCCEBh4EeIYQEXB/dAqG5udnBwUFICH9XEELof96/f0+j0fqgoD4K9HV1da2trX1TFuo9XC63paVFXFwcf7MFA4fDaW1tlZCQ+NIV+UqxWCwZGZk+KKiPAr2KisrevXulpKT6pjjUS3bu3Hn//v0RI0asWLHiS9cFfQY//fRTbm7uzJkzyR3fUB8LCAjo5vOQ/6G+u3vlqFGj8KZm/3Xnz58HAHV19XHjxn3puqDPQFpaGgCMjIywQb+IPjsyxgNwhBAScBjoEUJIwGGgRwghAYeBHiGEBNzXEugTExN5T3NGAqmtrS05OflL1wKhf6MvH+hTU1Pr6ur+yRqSkpLIg0a7MHPmzN67jKmwsFBcXPzQoUMAUF1dzWAwkpKSyEevXr1iMBj19fW9VHRxcfGzZ894DywtKSlhMBgMBiM1NbWpqYkkVlRUMP7W7t8MRUVFsbGxDAaD7Bx/f38dHZ2WlpZ/UqWGhoZnz56Rx71+CIvF4u2i7uhO/nfv3s2dO7f76/xUFy5cEBISys7Ohr+b9dWrV+SjpKSkuLi43ii0paWF13aVlZUksdNWBoDGxsZnz56lpKTwEvusQaurq3l7ozs+2qCenp5paWmf2k+66datW6KiokZGRi4uLnQ6/VOf5ctgMNLS0sjrmpoaBoPx8OHD1NRU3tcwMzOTJJJHB3/m2vcM1ctYLJaGhoa6uvrbt287zeDg4BAfH/9PijAxMamuru46j6GhYU1NzT8ppQs//fRTv3796urqKIq6fPkyAAgJCaWmplIUFRgYCABJSUmfvVAul/v999+Li4ubmJj079//ypUrpHRnZ2dHR0cZGRk5Obl79+5RFHXr1i1nZ2dFRUUAKC4uJouXlJSMGDFCTk7OwcHB2dn51atXFEUlJiYCwIkTJz5UKHma9syZMz+UYefOnTIyMtbW1qqqqm5ubkwms9Ns1dXVJiYm3d/Y7uQvLy8fMmRI99f5qSwtLR0cHMhr0qwaGhpNTU0URZmYmEhKSvZGoeXl5c7Ozvr6+gBw5swZkthpK0dFRUlJSWlpaamrq8vIyERHR1PdaFBbW1sA2LNnz4cydLNBL1++HBgY2P3t+miDenh4pKamfmo/6SbSjcl3QUZG5lOLAABnZ2fyOjk5mbSFtLR0//79//rrL4qi1q5d6+zsbG9vT6fTjYyMSkpKPrQqPT09RUXF58+f93xjuufLj+h5Xr58yWQyS0tLMzIySEpVVVVeXl5tbW1qampbWxsANDU18X5Li4qKSkpKCgsLGxsbHz9+/OjRI/611dbWxsfHMxgM3kiEoqicnJyioiLytqCggMFgPH36lHc8kZiYyGKxsrOz+QcvZJRUXFxM3r569Yr3mufKlSsODg78fwfjcrkrV67suI3FxcWJiYkVFRXkbVlZGW+89uzZMw6HQ9Kbm5ufP3+elZXFS+no+vXrp06d2rhxY2Zm5sCBA+fNm1dfX+/r68tgMGJjY6Ojo2tqarZv3w4Abm5uDAbD2dmZf/HAwMCSkpJ79+7t37//3r17JJTY2NgoKiqS36oeiImJ2bNnT1paWnJycnFxsaqq6vLly8lmFhQUkDzp6ekNDQ3Z2dmNjY0MBiMzM5O0e3FxMRksfzQ/f4klJSVxcXEMBoM3mGKxWKmpqTU1NeRtWloaGX+RYz4yvdPa2pqamvr+/Xveeqqrq5OSknhLJSUltTsIy8/PT01NdXd3508sLS3dtWtXu53A4XByc3OfPXvG61fZ2dmkiR8+fPjy5Uteznfv3iUlJb1586aLXaqqqspgMJYsWcKf2GkrHzlypL6+Pjo6+vr16+/fvz958iT0WoNmZ2fX1taSPE+ePCEppaWlDAajpKTknzRoY2Mj/xEJL1tSUtKzZ8942RISEthsds++sHl5efn5+QCQlpZWUlLC/1Fzc3NaWlpmZiaJNgCQmJjIYDAeP37MW0lCQgIA1NbWMhiM/Px8a2tr0hY3b95saGj4888/AeDXX39lMBhPnjzZunVrbm7uqVOnerL3P6/e/iXp/oje39/fzc1tyJAhGhoaP/74I0VRYWFh9vb2RkZGxsbGpqamdXV1OTk5vN/S0NDQ3bt3nz59WkJCYvjw4R4eHrx1pqWlKSoqDh8+3NnZOTw8nKIoQ0NDLy8vW1tbOTm5y5cvUxT1559/kl9ddXX15ORkksfd3d3GxkZOTu7o0aMURT148EBDQ8POzk5TU3PTpk0URe3Zs+fChQv89WcymQBAKkz9PaL39PQEgKioKN6IvqWlZcKECaKiotbW1sLCwvPmzeNyuWS2R0hIyNLSEgDGjh1LUdSNGzcUFBT09fXV1dUHDx5cUFDQ6X7bvXs3AJw9e5aiKPJvF/4Do6CgIADw9/fnpUyePBn+HsWwWCw6nS4iIqKnpycnJ2dgYFBaWkqyOTo6qqqqfqg1ux7R//jjj7/++ivvbUlJiYyMDEVRhw4dCgoKIonjxo1LTU1dvHixhISEs7Pz2rVr/f39XV1dzc3NNTQ0yJq7zs9b/x9//KGiouLo6Ojs7Pz69evy8nIdHZ3hw4fb2NgoKCjk5+dTFLVkyRJnZ2dLS0sTE5O6ujqSx8bGZujQoUpKSqTdf/vtNzU1NTs7OzU1tdu3b1MUNWvWrNzcXP5Nu3LlCgCQvkT9PaL39PSUkpKqrKzkjejz8/MHDx4sLy9vZGQkISFBetHUqVMBQEpKatCgQQCwefNmiqJCQkJERUUtLS379+/v5eXV1tb2oX1OUdTvv/8OfCN6Hv5WPnjwIACsX79++fLlNBqNl7nrBu16RP+hBp06dWpMTAxJVFFRoSjKzMxMXV3d2dn58uXLPW7QvLw8dXV1S0tLc3NzMzMz/my//PKLiYlJWVkZRVHZ2dl2dnZUT7+wv//+u4KCAgA4ODhcvnyZN6K/ceOGvLy8np6empqapqbm06dPKYqaMWOGs7OzjY0NnU6fNWsW9XdrysjIODs7Hzx4kKKoqqqq+/fvz58/n06nnzp1ildQW1vb6NGjASAsLOxD+7/PRvT/rkC/fv16iqLq6+vV1dWpvwM9m82mKGrevHn79+/vGOipzqZuLl++7OPjk5eXx0sxNDQkB7P379/38fEhiQUFBXFxcVu3bp0zZw7Jc/PmTZKupqZGUZSVldXBgwdjYmLu3LmjoqLS3Nzcsf7kEGHVqlW8ogFgx44dXl5eJiYmAQEBJNCTmE56Brl/wO3bt0niunXrKIoifaK2tlZFRUVWVvbevXuXLl0CgBkzZnS639LS0oSFhV1dXS9dukQOJh48eEA+Iqt1cXGpr6/n5ecP9GS2t1+/fg0NDXfv3gWA5cuXk2xjx46VlpbutETqY4Hez8/v8OHDvLfNzc3CwsJtbW0dv+f8h+T+/v4rV66kKKq1tdXExCQzM7Pr/DyBgYGbNm2qrKwkb8vLy2VlZUk3W7du3d69eymK4nK5WVlZDx8+nDZt2unTp8vLy/v3719RUUFR1Llz53x9fd+9e6eoqHjz5s2YmJhjx47xJmfaOX36NPnl5hUNAAwGQ11dPSAggBfoSRQgM7O2trZ0Or2+vp4k3r9/n8Vi9evXz8LCIicnBwBGjBgRExOzZs0aADh+/PiH9jn1gUDfrpUTExMNDAz09PR0dHRMTEx4saPrBu060H+oQTsGev6pmx436KJFi7Zt20ZRVF1dnaamZrtshw4dIt+U+fPnk4nKnn1hKYqaOHEiAJC5XF6gV1FR0dTUbGtre/v2rZiYGPktYbPZGRkZDx8+nDBhAgCQURfwTd1QFMVgMBwcHGRlZbW0tG7dukUSuVzu9OnTAWDFihUf2vlUHwb6vrsFQndYWVkBQP/+/Xl3dBs8eLCwsDAAmJmZMZlMYWFh3mwGubtWp+uZPHkyi8XatGlTXl7eqlWrvLy8eCvX0NAgx9RLliy5du0aOVVF5q9JKQCgo6PD4XA4HE55eXlYWBj5m7KRkdH79+87lqisrCwiIlJeXt4uffv27aamplVVVeQtyaCrqwsAAwYM4KUAgImJCQCQexvV1dW9fftWUlLy119/BQBnZ2dJSUkAeP78eU1NjZOTE+8/00OGDImKijpy5Mi5c+dMTU0TExONjY0B4OrVq4GBgSNHjrx165aYmFin+0dJSUlSUlJKSkpSUlJNTY2Uy6unlpZWp0t9lKmpaUxMjL+/P3kbExMzaNAgERGRdq3WcUGy20VFRQ0NDTu28oeKCw0NPXbsWGBgIJPJPHLkiJSUlI6ODrnNhoaGBpPJZLPZdnZ2LS0t8vLy5eXlFhYWAKCsrKyiokIKPXr0aHV1dWtrK5n9AIAPbbuGhgbwNRkhKSm5cePGgIAA3qwdr5VpNJqOjk5iYiI54AMAExMTOp0uISHR3NxMshUXFwcHBwOAs7MzmVl6+PChlJQU6ahd69jK8+bNq6ysrK6u5nA4MjIyCxcuJJOZvdqgbDa709nFnjVodXX1+PHjAUBKSop8R/h9//33Q4cODQgIiI+PJz9y0KMvbKdYLNbbt2+trKxERETk5eWlpaXLy8srKyuHDRtWU1MzZMgQMsNWUVGho6PTbllnZ+dHjx5VVVWpqqouXbrUzc0NAJYuXRoWFrZmzZrNmzd3pwK97d8V6Du6fv36iRMnpKWl9+zZc/LkSU1NzRcvXpw7d44cnC5evBgA5OTkrl69amJiMmLECLJUSUmJmprazJkzo6KiLl68SAJ9O3fv3l2/fr2WltbFixd5X+BVq1bNnDnz3r17ZmZmwsLCXl5eFEV5e3v369dPVFRURUXl1atX4uLi/N8cMTExe3v7+Pj4dus3NDScN28er0dOmDBhy5Yte/fu5XA4R48elZaWdnV1vXnzZrulREREJkyYcOfOHT8/PzJvTspavnx5dHR0c3Mzf8cVFRUNDAx89erVzz//vGTJEhUVlfj4+O+++05OTm7p0qXx8fESEhK2trbV1dVZWVnV1dUAEB8fr6+vb2lpSUZPhw4dSklJAQBfX18AeP/+fXZ2Nhmu9kBAQIC5ufmCBQs8PDwKCwt//fVXsvmGhoZ79uwZNmzYy5cvyUyrtLR0ZWXlrVu3yNbt2bNHSkqqvLw8ISHhxIkTNBqti/y8ayQKCgosLS1NTU137tzJYDDImIvf27dvy8vLDxw4QFHUjh07KIoCgNLS0vXr19vb2+/du9fV1XXgwIH6+voeHh6WlpZ0Ol1ZWRkAkpKSjIyM+E+6DBs2TEJCIj4+fs6cOfxFzJ49e+/evRkZGeT32MfHJzY2dv369TY2Nnfv3rWysuoYFwDAxsZGW1u7X79+S5YskZOTg78Dlqur69ChQ8ksMMFisR4/fkwuaMnJySHnWhISEjq2soaGRkZGxrFjx9ra2lgslqamZq826KFDh1gs1o0bN0gEl5OTS0tLe/DgAZme6lmDurq6BgUFsdnsFy9edJptypQpnp6eAQEBvOFOD76wnRIREfHw8Lh58+aJEyeqq6urq6t/+umnly9fFhYWent7f/fddxs2bAAA0oVkZGQKCgqio6MHDx7c2NhYWlrK4XBiY2MpiiKDtl27du3du9fW1nbMmDHksI/sli9ImIwpeg+Xy92zZw8ALFy4sF+/fh0zpKamjhgxQklJ6eXLlwYGBtra2gAQHx8/ZcqUzMxMKSmppqam+/fvL1682NPTU0REZPDgwadPn25ra5s0aZKysrKxsbGent6ZM2fi/h979x3XRNI/DnxC6F2kI70XBaQoqBBFRAGxiw3Figo+evY75Q7bg+1Ez36WQ+wnnh1QRIJUBQEVkC69mICg9JT9/THfyy8PICpCouHz/oNXMpmdmd3JfnZ2NuzGx8+bNw+XGRUVdfDgwcTERGlp6Z07d8rJyT1//hxPkbe0tJSUlLi5uVlaWoaFheXn50+ZMoXBYLi6uh47dmz9+vUXLlwQERE5evSotLS0q6trYWHhzZs3Hz58mJGR4e3tfenSpffv33f6PZaYmNjZs2e9vLzU1NRoNNrbt29dXFwsLCzs7e1fvHihpaU1Y8aMYcOGjR8/Pj8/PzY21tzc/M8//zQwMKiqqqqurnZ3d9fV1c3OzkYIzZs3b/bs2dLS0jExMQ8fPqRSqRISEnZ2drt377axsVm8eDF3vb6+vk+fPq2rq/vPf/6Dr/0mJSXV1NQoKyvjC9F5eXnTpk1LS0sLCgoikUg6OjqpqalVVVXu7u7jxo1TUVGJjo5ms9kHDhzAs/yXL1++e/fuuXPncLzr6vbt2y9fvrS0tJw2bVrXT8XFxRcuXJiRkYEvTO3du9fV1RUhpK2t3dLS8s8//5iYmBgaGjo4OCgpKcnIyFy4cKG+vr6lpcXNzS0uLi4vL+/o0aN48qGH/OPGjcPVHT58+NKlS6mpqSNGjFizZg2epcEH9aqqKnFxcUdHR1lZ2StXrnz48MHNzU1JSUlXVzcqKsrNze3KlSsjRozYunWrsLDwlClToqOjb9++/fjx49bWVmdn5+3bt1taWnLO8xBCoqKipaWlt2/fXrt2rbCwcEFBQWtr64wZM5SUlIyMjEpLS/X19RcsWDBixAgDA4PU1NS0tLTJkycfP35cSkoqJyeHIIh58+ZJSEgkJibq6+t7e3vPmjXr/fv3Dx8+jI6OplKp1tbWQkJCv//++6pVq5ycnDj1NjU1rVy5sra2VkdHp7y8nEqlLly4MDk5uWsvT5gwgUwmJyQkvH371tvbe/fu3RISEp/t0LNnz1ZWVk6cOHHkyJFf3qHW1tbPnz+Pi4vz8fGh0Wje3t5aWlpZWVk3b95UVVUtLi7uXYdaW1s3NzffvHlTV1d36NChI0eO7JTN0NBw//79YWFhIiIiCKFe7/rO55UAACAASURBVLBZWVlCQkILFiwQFRVNSEgwNDScOnWqp6entLT048ePq6ur/f39t27dqqurKykpmZeXl5ycLCUlpaOjM336dCUlJX19/erq6sePH2tra6empp46dSohIeHjx4++vr67d+8WExO7e/cumUwWERHBF+FJJJKDg0O32/+PP/5ob29ftGgRPsvsR/09N/TZOfoeXL16de3atf3Rqm71+ieYLBZr9uzZ+IJBf6DRaK6urtXV1f1UPsfq1au3bt3aQ4bP/ryyF/z8/G7dutWHBfbgW36CWV5eTqFQOHPTfe7Ro0eLFi1isVh9WOZnO/SzP6/shX7q0FevXq1evfqXX37hpPTrb6Z5Y4DO0XeirKyMpy94A18968WCQkJC169f7/P2cCgqKuJLpv3t+PHjPKilEyMjI+6xc78SFRW1tbXt3bJDhgyJjY3t2/Zwc3V1xePlPiRIHXrlypWPHz8GBwdzUnq9ww5A3/VmGjduHOe0jgfwLysAj61fv55ndSkoKJw9e5Zn1Q1M/dSh3CEegx32y31H/zAFAACgP0CgBwAAAQeBHgAABBwEegAAEHAQ6AEAQMBBoAcAAAEHgR4AAAQciSCIfq2AyWTq6Oi0tLRoampy7lABflAVFRV0Ol1RURHfSgX86AoLC5uamjQ1NfGdewGPlZWVCQkJxcTEDBs2rH9r6u9/vWUwGPiGggAAADqRlZUVhFsgkMnkkJCQ7+XBiWDA++uvv6qqqrZt28bvhgCAEEIkEgnfybF/ayH6eeoGgO/KsmXLcnJy8APwABggYNIcAAAEHAR6AAAQcBDoAQBAwEGgBwAAAQeBHgAABBwEegAAEHAQ6AEAQMBBoAcAAAEHgR4AAAQcBHoAABBwEOgBAEDAQaAHAAABB4EeAAAEHAR6AAAQcBDoAQBAwEGgBwAAAQcPHgEDQn5+vrGxcafEf/75Z9q0aXxpDwC8BIEeDBRWVlavXr3ifOGlpaXpdLqYmBh/WwUAD8DUDRgofHx8SCQSfi0sLOzt7Q1RHgwQEOjBQDF37lzOayaTyf0WAMEGUzdgAHFyckpKSmKxWEpKStXV1WQymd8tAoAXYEQPBpAFCxaw2WwymTxv3jyI8mDggBE9GEDev3+vrKzMZDKfPXtmb2/P7+YAwCM8DfTnz5+/ePEiz6oDoKvXr183NzePHDmS3w0BA5qTk9OOHTt4Vx/BQz4+PrxbMQAA+F5ZW1vzMvbCHD0AAAg4CPQAACDgINADAICAg0APAAACDgI9AAAIOAj0AAAg4CDQAwCAgINAD3hEUVGRIIjc3NxvLOfYsWMEQcyZM+fbmxQVFWVmZvbt5fCGgYFBTEwMv1sBfkgQ6EF/MTExIQgiJSXlG8u5du0aQRATJ07sk1ZxODk5MRiMnJwc/Hbw4MHt7e2HDx/uYZHRo0cnJCTg1yNHjvzaVdu+ffvu3bt7vXhhYWF9fb2rq+tXLQUAgkAPeIZOp5NIJBMTk28sJyAggEQiXbt27RvLWbJkyfXr1zlvFyxYEBER4e3tLSoq+iWLp6SkfMt9FHq3+PXr15cuXdrrSsHAxct/w4VbIAgACoWCe7OtrS0vL2/FihU4fcyYMVQqtaGhAY/ihwwZwt31VCqVM3UjJCT09u3b1tZWWVlZhNC8efMIgsBDaZyZyWRWVFQcOXJEWFj47Nmz3OVQKBTuqRsDA4M7d+7Q6fT6+vqIiAg8D4Mr4igvL58yZUrXFSktLdXX1+e8zczMdHBwuHfv3syZM3GKuLh4SEhIZWUlQRCFhYUIoaamJlxmWloaZ0geGBgYEhKCFxk8eHBdXZ2UlBQ+myEIgkaj/fHHHyQSydbWltOkgwcPco/of/nll4qKirq6ur/++ktaWhohFBQUdPbsWSqV+vHjx7t370pISOCc6urqNBqtr7sU8AGPb4EAgR70kpycXFxcHJvNNjQ0NDAwaG5urqioGDZsGCdDp6kb7jn6wMBAgiCWLFmCEIqIiCAIwsLCgrOgmJjYvn37CIJYtmwZ6jJ1wwn0oqKieXl57e3tw4cPt7CwaG5uLi0tlZSU5AR6d3d3KysrgiCKioo6NZ5MJrPZbHFxcfx2+PDhuGEzZsyIiIjAibt27aJSqbq6upylup260dLSqq6uFhYWRgitWbPm/Pnz3BUpKytHRUV5eXmhT0zdTJ48ubi42NTUVElJKTo6eu/evQihoKCgkpISCwsLOTm5mJgYvKEQQiQSiclkysjIfHVvge8M3OsGfNf09fWjoqLq6+sbGhqcnJzwbIynp6ekpOTly5dfvXr1JYWcP3+exWL5+PgoKyu7uromJydnZWWJi4ufOXOmurq6paVl8+bNCCFTU9MeCrGwsDAyMkpLS0tPT8/KykpISNDS0rKxscGflpeXR0REZGZmMhgMdXX1ntuzePHi0NBQhNC9e/dsbW01NDQQQp6enoGBgW/fvu152bKyspycHHd3d4SQr6/vX3/9hRCSkZG5fv16XV1dbW2tm5tbDysyfvz4s2fPvnnzhkaj7d69mzMFf+3ataysrMbGxkePHnGfeSCECLi1OPhKEOjB19m7d6+bm9uGDRvIZPLff/+NECKTyZxnsX6hysrKqKgoZ2fnTZs2CQsL//nnnwihpUuXLlu2LCIiQkJCYvXq1bjkzxbFiXqd2tDS0oJfsNnsrs1jsVjl5eU4oIuJic2bNy84OJggiPb2diUlpUWLFuECO4XUT0XY0NDQRYsW4QF4fHw8QmjNmjUEQZiampLJ5JCQEBERkU8tzt027hrb2to4TeVsB1VV1ffv3zc1NX1mowDwvyDQg6+DYxaJRDIyMuIMP+/fv9/S0jJ//nzuGZgPHz4ghBQUFLq9vHnmzBkSibRhw4YPHz7gAwYuGSEkJyfHPcuHy1FVVe1UQlZWVkFBgZ2dHZ66GTVqVFlZ2YsXL75wRWJjY/Hl0ClTpuTm5pL+5ezsvHjxYoTQvXv3du7cqa2tzVmksbFRVVVVUlKyU1E3b950cnLauHEjPi1ACElISLS3tzc1NdnY2CxYsICzuI6OTqejV3R09NKlS01MTJSUlH7++efHjx/30GZHR0f4hSXoDV7OE8EcvQAYOnToy5cvWSwWp1unTp2KEBozZkxcXFxjYyPBNS9/9uxZfAHz1KlTnX5HLywsXFVVRRDEiRMncIqMjMyDBw/a29s5JeMrtCNHjiwoKMA1qqqqdr0YW1dX9/79+04XYzkVtbW1cUbH3MaMGXPv3j2EUGRk5KpVqzjpJBKpuLjYyclJXFz8yJEjNTU1xL8XY4WEhG7dutXa2sp9MZazpiwWS0tLC79VV1dPTk5uampKSEi4dOnS9u3bEUJDhgx5+fIlk8nsejG2srKyvr6e+2JsUFAQ/nTjxo144h4h9Pfff0+YMOEbeg98L+BiLAA88mP9w5S+vv6TJ0/43QrQN3gc6IX5vb4A8E2f/xNWvyoqKho3bhy/WwF+SDBHDwAAAg4CPQAACDgI9AAAIOAg0AMAgICDQA8AAAIOAj0AAAg4CPQAACDgINADAICAg0APAAACDgI9AAAIOAj0AAAg4PhwrxsNDY2hQ4fyvl4AAOC7ioqKrKwsHlfKh0Dv4uJy4cIF3tcLAAB8d/bs2eXLl/O4Upi6AQAAAQeBHgAABBwEegAAEHAQ6AEAQMBBoAcAAAEHgR78YKysrGpqar5qkYaGBhMTk35qD3bq1CkSiXTt2rV+rQWA3oFAD74LVVVVYmJif/zxR7efhoeHBwQE4NeZmZmqqqpfUmZAQEB4eDhCSF5ePjc3t6+aCsAPBwI9+C6cO3dux44dFy9e5HdDABBAEOgB/7HZ7Nu3b69du9bCwiIpKQkhVFpaOmnSJGlpaRKJFBoaOmfOnOPHj5NIpMOHD+Opm6CgoN9//x0vvmXLlhMnTlCpVBKJRCaTzczMEhMTExISjh8/PmvWLBKJRKVS8dRNc3PzvHnz5OTktLS0zp8/jxBauXLlxo0bDQ0NBw8ejA8zdDpdWlq6UwvnzJlD+tepU6dCQkL09fUlJSWtrKyio6O5c6akpJBIpE2bNiGE9u7dSyKRoqKi+n8TAtATCPSA/x49euTi4iIhIbFmzZozZ84ghFasWDF69Oja2lqCIHx9fa9du+bv708QxLp16/Aiy5cvP3fuHEEQHR0d4eHhPj4+FAqFIAgGg3HhwoUNGzaMHj3a39//xo0bBEFYWVnhpX7//Xc2m11WVvbgwYPt27e/ffsWIVRaWpqamhoTExMYGIgQUlRUbGpq6rade/fu7ejoUFNTW79+/fTp02k0mqam5rRp02g0WqecZDK5n7YVAL3Ah1sgANDJn3/+eevWrQMHDiCEJCUlDx8+nJmZefPmTSkpqU8toqGhYWJi8uTJk9ra2gkTJsjIyKSnpy9fvjw7O7u9vf1TC2ZlZfn6+srJyQ0dOnTUqFF44n7u3Lny8vJWVlZMJrPndi5YsEBERCQ1NRUhdPDgwYMHD+L0zMzMbvOzWKwvWHsA+h2M6AGf1dTU5OTkEP9au3btpUuXrKysjhw50tzcjPNISEjQaDQ2m8294KpVq06fPn3q1KlVq1YhhE6dOuXp6Umj0RISEkgkEl6qtraWexELC4tLly41Nja+fv06MTERz+cICX3pXoDH6ba2tgihwMDAtrY23GZXV1dOHnl5eYRQXl5eY2Pjw4cPe7tVAOhLEOgBn/31119TpkzhvPX29j5z5sypU6fi4uKUlZXxHL2jo2NeXp6oqOjhw4c5OcePH//69Ws2mz1s2DCE0IIFCy5cuKCjo3P9+nU5OTmE0LRp04KDg0kkEmfEvX79ejabramp6e7uvmPHDl1d3a7t6XaOntvUqVMPHTp09epVfAmBRCJxT/WYmJgsWbLk4cOH8vLy8fHx37ZtAOgbJIIgeFbZwoULL168uHDhQrh7JQBgYMJ3r7S2tk5PT+dZpTCiBwAAAQeBHgAABBwEegAAEHAQ6AEAQMBBoAcAAAEHgR4AAAQcBHoAABBwEOgBAEDAQaAHAAABx4ebmuXl5Z04cYL39QIAAN/hG3HzGB8C/bNnz549e8b7egEAYGDiQ6BXUFDQ0dHhfb2g1/B927W0tOA26wKgvb29oqKCTCbDbsgXdDq9rKyMx5XyIdB7enrCTc1+IEwmU0dHhyCIJ0+eKCgo8Ls54Fvl5eU5OztLSEi8ePGC320ZiPBNzXhcKVyMBQAAAQeBHgAABBwEegAAEHAQ6AEAQMBBoAcAAAE34AL9tWvX1q1b13/l79+/X1paur6+vv+q6FspKSkkEunRo0f8bkgvrVy58vbt2/1Xvru7u4ODQ/+V3+d+3A5NS0ubOnVq/5W/detWWVlZ0r/Cw8P7r67vzXcU6B8/fjxx4sRvKSE8PDwgIKCv2tML7e3t+/fvnzdvnoKCAp1Ox9+niIgI3DYSiXTw4MH+qDc0NJTz9a2oqMCJ8vLyJBJJWFhYV1f3jz/+wIn79+/X0tISExPT0dEJCQlBCI0cOdLOzu63337rde2tra2bNm3S1taWl5efMGFCTk7Op3IGBAR81d71tfn7XFpaWmRk5Jo1axBC0KFdWVhY0On0Ly/5Czu0P/q9trZ23759Li4ubDYbb6ivEhQURCKRqFQqfjt69GgSiSQiIqKtrb17926EUGZmJu4vcXHx4cOHx8TE9G37v9F3FOgFwIMHD+rq6jqNSjZv3sxisfq1Xl9fX4IgZsyYwZ3Y0NBAEMS7d++UlJTWrl37+vXrvLy8LVu2GBkZ1dXVqaiorF+/vrKyEiE0derUlJSUgoKC3tX+n//8JycnJzY2trS0dOrUqS4uLu/fv++DtfoOhIWFkcnkyZMncydCh/6IampqEELa2tokEunbS0tISCAIorq6Wl5ePjAw8M2bN1ZWVgRBEASRkZFRUFDg7e1NEMS3V9RXvsdAX1NTY2FhsXTpUjk5OQqF8uHDB4SQiYnJr7/+qqysbGpqmpycjBCaM2cO5wCrqqqKU44fP04ikQ4fPswp7Y8//lBWViaRSIqKipzynZycZGVlOcN/fChWV1c/deoUQujatWuzZ892dHSUk5NbsWIFm81GCB07dkxbW1tWVnbu3LltbW10Ol1aWrpTy3HDhg8fzkkxMTHJy8s7d+4cd7aCggJ3d3d5eXlFRUVvb+/a2lq8CrgZZDLZ0tKyuLgYIRQSEqKvry8pKWllZRUdHd2LjSktLY2jEovFkpOTExcXRwg1NzcjhGRlZfEqWFtbo97egqO1tTUsLOzixYt6enpycnKrV68eOXLkjRs30L+dghBKSUmZOnVqQkLC8ePHZ82aRSKRYmJiLCwsFi5cKCcn5+LiwtkCn8qfmZmJP2Kz2YsWLZKWliaRSDNnzsSJCQkJhoaGgwcPvnjxIkKISqXizWhmZpaYmIgQWrly5bp16/T19ZWVlf/880+EUHt7u5+fn6KiorKycnBwMEIoPDzc09Oz09olJycbGBjIyMhwUrrt0IcPH9rY2EhKSg4ZMmTr1q0sFis3N5czJBcTE/Py8mIwGM3NzStXrlRTU5ORkXFzcysqKurFBudXh+bm5lIoFJxn7969hw8f3r17d3Z2tpKSkry8PN5ne9GhCKHw8HBNTU1NTU08iufOtmbNmn379uFsGzZsOHPmTK/3TSsrK4TQkSNH5OXludMPHTqEdzEzM7NLly4hhK5du4Y7btCgQZ6enrW1taGhoTt27EAIjR07lkQiNTU14WVxZJeRkeHEFk4H4YZ9P77HQI8QKigo8PHxqa6u1tDQwFEDISQqKlpSUvLf//536dKl3S517do1f39/giC4Z+GPHDkSGxtLEATnHDMjIyM0NLSoqOjx48d4Z8Md9vz585MnT+Lp9bS0tLCwsMLCwsLCwhs3bjx79uzSpUsJCQk1NTWqqqonT55UVFTk9DcHroL7m6Svr79ixYrffvuNO/Ps2bOTkpJevHhx79698PDwlStX4nRhYeG0tLSrV6++evXqzJkzd+7cWb9+/fTp02k0mqam5rRp02g02ldtRjabPX/+/PT09PXr11tZWamqqu7Zs+fJkyeqqqppaWn79++Xk5PjNLiuru6rCsfKy8sVFRW5/2PW1NS0tLS0a87Ro0f7+/vfuHGDIAhzc/O8vDwfH5+qqiobG5ugoKCe8+O9FCFUUVGRlJRUWVlJEATn7L60tDQ1NTUmJiYwMBAhRKFQCIJgMBgXLlzYsGEDzlNcXJyWlkalUnft2lVRUXHkyBEhIaGioqKsrKzIyMj09PSZM2fev3+/UxvodHqnuNC1Q6urq6dNmyYmJlZVVbVu3bp9+/YdO3YMf2RkZFRbW7ts2bJ79+49efJk+/btp0+fPn36dGFhYXZ29rx5875uW39nHbp9+3Zzc3MajdbQ0IAQ6l2HNjU1BQQE3LhxIycn5927d52y7dy588KFC0wms6mp6f79+z4+Pqi3+2ZGRgZCaO3atbi12J07dzZs2ODl5fXu3TsTE5NFixZlZGTMmTOHIAg2m/3w4cMHDx4EBwf7+vriqTAcSfBRxMLCQllZ+fXr1+vWrVNSUsIF0un08ePHM5nMs2fP9smpQ1/5TgO9sbExhUKRlJQcM2YMPudCCC1ZskRSUnLatGn19fUsFot7O/ZwlhQSErJu3brx48dzhvlubm56enpKSkpWVlY1NTXv37/39PSUlZXV1NR89eoVHkqPHz/ewMBASUlp5syZ2dnZGRkZz54909LSkpKSOnz4cFZWVrd1DR48GCHU6Tw3KCiopaXl0KFD+C2DwXj58qWpqam+vr6Dg4OSklJaWhr+SEdHx8bGxszMDBeSmpqKEDp48KC0tPT9+/ebm5u5x0FfAs91BgYG/v777wihhISEDRs2+Pn5tbS0zJ8/f9WqVbhA/NXHjf9ampqaNBqN++LzmzdvtLW1EUKcDup2dKOrq+vq6iolJeXr65udnf3Z/JiWltbSpUsnT548efLkyMhInDh37lx5eXkrKysmk4kQSk9Px+Nre3t7Tk/NmTNn0KBBZmZmDg4O+fn56enpp06dkpeXV1FRiY+Pxw3oavDgwV1nLTp1aHZ2dmtrq7Ozs7y8PD4n4HSok5MTPgdFXB06ZcoUVVXVysrK1NTU9vb2T61pt/jYody7Wx92aFlZmZ6e3siRI2VkZBYtWtTp00GDBrm6uv7zzz/nz5/38fHBpy+92ze7hXtk4sSJ0tLSEyZMYLPZ6enp9+/ft7CwkJSUHDFiBELoUzNgWVlZdDrdw8Nj165dDx8+RAg1NTW5u7uXlJTcvXt3+vTpX94MHvhOA72Q0P9vGCeIh4aGtra23r17V0FBgUwmq6ioxMXFtbW1XbhwAe8wEhISNBqt07fKy8srOjr6xo0bR48ezc3N7Vp4ZGQkm80uKioqLi42NjbGwSImJqa4uJhOp9+8edPc3NzS0nL06NElJSVsNpsgiE5n7hz4m4HHDhxKSkpbt259/fo1fisiIjJs2LA3b94UFxc/f/6cRqPZ2NjgjzrdMszW1hYhFBgY2NbWhs85XF1dExISSCTS1q1bP7sNg4KCTp48uXr16p07d+KUxsZGvMotLS24QJySnp6OEHJ0dPxsmV1JSEj4+Pj4+PgUFxc3NjaeOHEiJSVl1qxZCCEVFZUnT540NTWFhYVxMuOTeoTQ27dvY2JiWlpawsLCzM3NP5ufY+vWrU+fPt29e/eSJUtwCneHIoROnTrl6elJo9HwtsKJf//9d0NDw5s3b1JSUoyMjKysrNasWVNXV4e3Ax4qdjVixIiioqKPHz9yJ3bqUHNzc3Fx8adPnzY2NuLrtD13aFRUFIvFwmNGMTGx3bt3k0ikqKioz25q/naosrJyfn5+ZWVlVVXVnTt3OJk547DedaiWlhbeEZqamvDMW6dsP/3009GjR8+dO7d69Wqc0rt9s1u4Rx49etTU1PT48WMSiWRtbX3gwIE3b968ePHiwYMHCCE8UYaPMZ2uPAsJCeEvGD6DnD59+osXL8LCwr7xRyX9guAhvDstXLiw20+jo6Pd3NwIgqiurra0tMSJJ0+e3LVrF0EQxsbGgYGBioqKxsbGSUlJBEEUFBRYWFgoKCjs2LFDRUWFIIj6+npLS0symRwSEsIpVkpKCiEkIyPj6+vLYDCuXr26du1a/JG3t3d8fHxNTY2dnZ2UlJSbm9u4ceOSk5OvXr06a9YsBwcHWVnZ5cuX493yxIkTurq6OKacPHmSRqNJSUl1WoWWlhYFBYXly5cTBIGnWTw8PAiCaG1t1dTURAgdOHCAIIjc3Fw3NzdZWVkFBYWZM2dWV1cTBKGiomJsbEwQBI4gfn5+BEEcOnTIwMBAWPj/7j338ePHe/fuIYRCQ0O56+XMbmGjRo3irDjH1atXWSzWxo0b1dXVRURENDQ0tm3bhvcNOzs7BweHT/Uag8HQ0NBQV1fnhMVOmpubf/rpJ01NTVlZWVdX16ysLJx+584dFRUVLS2tbdu2TZkyhSCIxMREDQ0NhNDjx4/Nzc0XLFggKys7duzYmpqanvNnZGTgMvEQDCGkqqp6+PBhgiD8/Pxu3bqFP9XQ0CAIIi4uTltbW0FBYc2aNTjFz89v7dq1+DTu1KlTBEG0t7f7+/srKyvj0t68eXPjxg3cWdxSUlIQQpcvX+65Qx88eGBlZSUhIaGurr5x40Ymk/nmzRtOJx49ehRv/6amppUrV+KLMQghGxsbgiA2bNggKiqal5fHsw7Nzc1VUVHBN6r7qg4NDAyUkZGxsbFZtmwZ3sWOHj0qKysrJydXXV3duw7FK6uhoYEvb3Sbbfbs2WvWrMGZe71vcqZuCILAv7rBs0P79+/X0dERFxc3NjbGu9Xff//NubqAEMJBKScnx9DQUEhISEVFhTODKi4ubmhoGBwczP3N5MD7dVdnzpxBCFlbW39q+/eH7yjQ98zY2Pj9+/d93qRucR8Mvta+ffukpKTodHrfNokjICAA7wx9Bceyhw8ffirDZwN9L3Afy3mA+2DwtSZNmjRy5Mi+bQ83CwsL7nHJt/tsh3420PdC/3VoY2Ojra1tUVERfvst++Z3gi+Bng+3KRZsmzdv3rx5c/+Vj4eHfWjEiBHE9/Q7sO8Nno3pP5wpoL4iSB2alpbm4OCAz8b43ZYf2w8T6PH0Om/MmTNnzpw5PKtuAFJVVf3aC8vfAv9qFvSffupQW1tbBoPBnQL7Zu98pxdjAQAA9BUI9AAAIOAg0AMAgICDQA8AAAIOAj0AAAg4CPQAACDgINADAICA48Pv6MvLy+/evcv7ekHvcO4dFBUV1fXur+CHg+9Zz2azYTfki5cvX/K+Uj4E+oSEhN7dKRvwC/6nFc5NxMCPjsFgkEik2bNn87shAxFf/m+Zp4HezMzMzMys070GAeCljx8/slisTneZB4DHOHfk5w2SwNwWA4AvsWzZspycHDinBAMKDK4BAEDAQaAHAAABB4EeAAAEHAR6AAAQcBDoAQBAwEGgBwAAAQeBHgAABBwEegAAEHAQ6AEAQMBBoAcAAAEHgR4AAAQcBHoAABBwEOgBAEDAQaAHAAABB4EeAAAEHAR6AAAQcPDgETAg5OXlzZs3j81mV1RUtLe36+vrk0ikPXv2TJo0id9NA6DfQaAHAwJBEFpaWhUVFZwUYWHhd+/eDRo0iI+tAoA3YOoGDAgkEsnHx0dY+P8ekiwsLDxp0iSI8mCAgEAPBoq5c+cymUz8mslkzp8/n7/tAYBnYOoGDCCmpqZ5eXkEQYiLi9PpdCkpKX63CABegBE9GEB8fHyEhISEhYWnT58OUR4MHBDowQAyf/58NpsN8zZgoBHmZWVlZWWVlZW8rBGATkxMTCoqKmRkZJKTk/ndFjBwDRo0yMTEhGfV8XSOfvHixf/884+QEJxGAL5pb29ns9kSEhL8bggY0AwMDFJTU3lWHU9H9CwW68OHD7ysWgRzWwAAIABJREFUEYButbe387sJYEBjsVi8rA4G1wAAIOAg0AMAgICDQA8AAAIOAj0AAAg4CPQAACDgINADAICAg0APAAACDgI96DOjR48mCOL+/fu8r1pdXZ1Coejp6fWQh0QiGRkZ2draKioqfirP+fPnJ06ciBAyNzenUChOTk6WlpY8/u8qZ2dnEomEX+/YsWP58uW8rB0IJoKHfHx8+L26oB/xMdCvXLmSIIi9e/d+KoOpqemzZ89evHhBp9OZTObRo0e75hkyZMibN2/w6/Dw8IKCgri4uPz8/I8fP544cUJMTKy/Wv+/mEwm5775KioqBQUFnLgPBIa1tTUvYy+M6MG3IpPJlpaWFArF2tqak2hoaEj5l4ODA04UExOzsLAYNmyYuLg4ThEREeFkc3Z21tDQ4C5ZTU3N3t6eO1FNTY1Coejr6yOEBg0aRKFQzMzMVFRUjIyMEEJaWloUCkVHR6drI1VUVLy9vW1sbMzNzclkckBAQNc83t7e3EepI0eOODs7GxkZWVtbOzk54aOIvLy8lZWViIiIlZUVfm6JgYHB0KFDRURE8FI4g6ioqJWV1eDBg7nLV1VVtbGxkZaWxm8VFRXNzc3x60GDBg0bNgwhNHToUBKJ5OzsTKFQyGRybW1tTU3NqFGjPtMHAPSMl0cVGNELHnl5+bS0NCaTmZGRwWQyiX9H9MeOHcOdnp2dfePGDYTQ5MmTa2trKysrS0tL6+rqZs2ahRBSVFTE2Wg0WlFREZvN3rZtG0JIQkLin3/+wcUyGIwHDx7IyMgghJYtW0YQxIEDBxBC48ePJwji2rVrrq6u+fn5BEGUlZVRqVRfX99um6qmpubi4hIUFEQQRHh4eNcMN2/enDdvHn4dHh7OfTDw9PSsr69HCFEolDdv3qSnpyckJDg4ODx8+LC8vDw7OzsvL09XV5eTITMzMy0traGhwcvLC5ewY8eO+vp6fEqBH1Q7depUTjPGjx8fFRWFEAoODiYIIi4ujkql4imjkJCQLVu2fGs/ge8Mj0f0EOjBN9mxYwdBEL/++itC6NdffyX+N9CHhobibLKyso2NjXV1dTIyMpKSktXV1c3NzUpKSjjQM5lMLS0tERGRvLw8JpOpr6+PwzEO+j/99BPxb3DHgR4PrjmBHn3B1A1CyMPDIzExsbGx8cOHD6tWreqaITEx0dXVFb/uFOi1tbUJgpCVlaVQKE1NTZqamgghPz+/uLg4PJYPCQm5ePEiQohCobS2tuJzjnHjxpWXlyOETExM6HS6qqoqQmjKlCk4sdtAj/536gYh9PPPPx85cuSrOgV8/2DqBvxIbGxsEEKJiYkIoaSkpE6fxsTE4BcWFhaysrKvXr36+PFjS0vLixcvJCUlrays8Kfl5eVlZWUMBiM1NZVMJltZWTk6OiKEEhISEELx8fEIIZzyLR48eDBq1ChjY2OE0PHjx7tmaG1t/dRE/KBBg9hsdltbG0Lo1atXOFJbW1vfuXOHwWAghK5du8ZZndevXxcVFSGEnjx5Ii0traioaGVllZSUVFNTgxC6c+fO4MGDO83q9EBCQqKlpeVrVxYAbhDowTdpaGhACOHZanl5+U6f4iCIEKqrq+Nk47zAiQghOTk5fPNqXEJDQwN3fu7M+J5/eMCrpKTEqYj43N22OTPjNTU1NTU13V7ezM3NxSPxrubMmZOWltbR0YEQwn9xO/EgHSGkpqaGNwVCSFlZGZcvLS0tISHx8eNH7pwKCgoiIiIfP35sa2vjXKvgXhc2m83dPAMDg+zs7J7XDoCe8fQ2xUDwhIWFzZ8/f8uWLQwGo4ep5Ly8vKioqIkTJ65fv76jo8PBweHp06eZmZkKCgoIoUGDBu3Zs6egoMDV1bW4uDg+Pr6trW3WrFk///wzm83etGkTQRD4dzI5OTkIIXd39/j4eO7qqqurEUK2trZjx47Nzs5+9+5dpwacP38+JycnNTXV0dHR0NCw29AZERGxbNkyzjyJoaHh2LFjVVVVJ0yYMHPmTA8Pj075r1y5EhcXV1xcXFdXFxwcjCeXEEIqKirHjh2LjIxcunTpnTt32tvb4+LiVFRU9u3bFx8f7+/vHx4e3tHR8fr169GjRy9cuLC9vf2XX37hPJOnqqrK19e3oKAgPj6ezWY7ODj89NNPX9ElAHQBI3rwTR49ejRz5szKysqffvqpubk5Li7u9evXCCH820TugDt16tT169ePGjXKxcVl69atkyZNYrPZ+KPW1lYHBwcfH5+wsLCxY8d2dHQkJiba2dllZmauXLkyNzfXwcEhOjoaIfTs2bOVK1eWlJT89NNPDQ0NcXFxOPQ/ePAgODiYxWL99ttvFhYWXdvp6+vb2trq5+dnZGT0888/Ozk5dc0TFRVlbGyMf2WfnZ1taWkZGBjo7e1dXl4+bNiwp0+fIoQaGhoyMzNx/levXnl5eY0ZM2bu3Lm7du06ffo0Tn/27Fl6evqyZcsKCwuXLFmCV3DMmDEyMjIrV65MTk7GiZWVlUuWLJkxY4azs/OWLVtevXqFF1+xYoWHh0dQUJCoqKiLi8uzZ89qa2v7oq/AAMbLCwJwMRZ0gi/G5ubm8rsh/8fLy4vzw5veoVAoVCq1j5qDdu3aZWBg0Felge8Hjy/GwtQN4CcGgxEXF1dWVtaHZeJfsnOnZGZmcibQe3b37t1vrJ17yP/tAgMD+6ooMJBBoAf81NjYSKFQ+rZMHR2doKAg7pR169b1YfDtWWZm5rp163hTFwBfCAI9EDSZmZl9fvAA4IcGF2MBAEDAQaAHAAABB4EeAAAEHAR6AAAQcBDoAQBAwEGgBwAAAQeBHgAABBwEegAAEHAQ6AEAQMDx4T9jHRwc8N37wA+BzWbv2LEDIbRlyxZJSUl+Nwd8q9ra2j/++ENMTAw/FwzwWHx8fFhYGI8r5UOgNzQ0XLZsGe/rBb3DZDJ37txJEMSCBQvw7ePBDy0vL+/o0aNkMhl2Q37hfaCHqRsAABBwEOgBAEDAQaAHAAABB4EeAAAE3IAL9O/evSssLOR3K0Cfyc/Pp9Pp/Vd+SUlJfHx8/5Xf56qrq6lUKpPJ5HdDvtrHjx+zsrL43QrB9B0F+vfv33Oej9w7NBqtoKCg5zxPnjw5duzYt9TSs5UrV2pqajIYDAaDQaVSqVQqg8HAbaNSqeXl5f1RaU1NDfVf7e3tODEhIYFKpSYkJJSWlnJnLi4uTk5OLikpwW/LyspEREROnjz5LQ0gCOLt27eZmZltbW09ZCsoKKDRaF9e7JfkP3ToUEJCwpeX+VVYLJanpyf+wvwoHcpgMFxdXc+cOfMtDfjCDk1NTcVb4wv13KF5eXnbt2//bLbeIQjCyclJQkLC2dnZwMCARCKFh4d/+eIlJSVUKpXzQMqMjAwqlZqYmPj27Vuc0tTUhPsrJSWlX0cevcTLB9Tih4MvXLiw20+jo6Pd3Ny+pfwbN274+/v3nOfq1atr1679llp68O7dO1FR0W3bthEEwfmmHjlyBLcNIXTgwIH+qDcyMtLZ2VlRUREhVF5ejhM9PDycnZ2HDh2KEJo2bRo+9kyaNIlMJtvY2JBIJC8vLzabTRCEu7u7jo4Oi8XqtnAGg6GhoaGurl5XV9dthuLiYjs7Oy0tLSsrq8GDB1++fPlT7fT3979x48aXr9eX5Pfz87t169aXl/lVbt++jRCKjo4mBKhDc3NzVVRUdHR0PlX7l3eoubk5jUb78vXquUNTU1OnTJny2Wy9U1xcjBBaunQpQRAhISEIoa+q4rfffkMIxcbG4rcBAQHOzs7m5uYIIRcXl46OjoKCAmdnZ2dnZ01NTRERkeDg4E8VhY/BPH44+Hc0oufo6OhIS0tjMBgZGRnv37/Hic+fP2cwGDk5OZWVlTglJyeHc4BNSkrCKZWVlVQqtaKigrvAnJycuLi4xMRETsqHDx/S09M5YyUqlRoXF5efn4/f4umdhoaGjIyMjo4OzlJv377lLMVgMLqe0d+9e7ejo2PSpEnciTt37mxsbOyUs7W1NTMzMysri1N+UlISHhHEx8fX1NRwcpaXlz9//rznMcLEiROpVKqzszN34v3796lU6qtXrzw9PW/duvX8+fPs7OzIyEhvb++0tDQPD4+7d+/i8Yi7u3tJSUlaWloPVfTA19fXzc2tpKQkIyMjJiYmICAAb0ncKQihDx8+ZGVlNTY2VlZWZmdnU6nU+vr6tLS09vb2jIwMzsbpIX9TUxOnOgaDkZaWRqVSs7OzOYmVlZWvX7/GrxsaGvBmrK6uxil4eqe8vDwnJ4ezCJPJzMrKysnJIQgCIUSj0TglcISHh0tISHR6MGG3HVpfX//8+XPOrGBLSwtnSJ6cnMxpP5vNzsvLe/HiRXNzcw+b9Dvs0JaWFs5zd8vKyioqKkpLS5ubmxMTExMSEvA+27sORQgVFRUVFRXh19zZXrx4UVdXh9NramoKCwt7vW/GxMQghBoaGrqe/+FdjLPTvXv3DgeEly9ftra24qrxCVNmZiaVSmWxWEePHqVSqVlZWS4uLjExMTk5OQYGBri7CwoKZGVld+zYwWKxerf9+wUvjypfOKKvrq7W1tZ2dHS0s7MbPHhwUVERQRDGxsaTJk2ys7MbNGjQmTNnCILw9vbmHGBVVFQIghg6dKi6urqzszP3sXr+/PkGBgbOzs5eXl4EQVy9enXUqFEWFhbm5ubDhw9nMpkEQeBDsYGBwYIFC3AeBwcHExMTMzMzCwuLDx8+sFismTNn6unp2dnZ6evrV1RUNDQ0TJw4sdMqBAQEIITq6+uJfweAjo6OCgoKmzdv5h4A3rt3T0FBQU9PT01NbciQIc+ePcOrgBDS0NBQVVUVFRWNjY1ta2vz8vISFxe3tbUVFRXdvXt3z5t3xowZiGsAiJWXl2toaIiKipaWljY1Nenp6ZmYmFy7dk1bW9vCwqK9vZ0gCLwPnDp1qttiex7R19fXS0hIMBgMTsqyZctCQkI4nUIQRHJy8pQpU169eqWurm5mZubs7JyUlKStrW1nZ2dra6ukpJSWltZz/oKCAvxRS0uLkZHR8OHDnZ2df/31V4Ig/Pz8Jk6caGlpqaGh8Z///IcgiIyMDGdn5zFjxqipqZ0+fRrncXFxGTZsmIaGBv76VVdXW1hYWFlZmZqaurm5sVgsKpW6devWTmtnYWExbNgw/LqHDg0KChIREbG0tJSWlh45cmRdXd2bN2/w/mVmZiYpKammpkan04uKikxNTZWUlExNTRUUFCIjI/nSoT2P6D/VoW/evHF2dsYpwcHBISEhYWFhkpKSjo6OHh4eeJ/tRYcSBLF582YlJaXhw4dPmDChU7YDBw4EBATgbLNnz46MjOz1vmljY4P3Lw8PD86Ivq2tbfLkyaKiojY2NmQyefny5Ww2OyYmxtnZ2cnJSUNDQ0lJKTU1NTIyUltbGyFkaWnp7Ozc0tJCEMTz58///vtvVVVVS0tLnII9fvxYSEjI2Nj4U93KlxH9dxro5eXlcVjZvn07PlM2NjZ+8OABQRAlJSVqampEd4G+26kbCwuLyMjIpqYm/Pbq1asUCgWf1Y4ePfrly5cEQbS2tr548SI2NtbU1LSsrAx/mfAxYPny5ceOHbt79+6IESNiY2NjY2MDAgLw5ExX+NYOuNdxXPDw8Dh06JC4uPjBgwc5cUFFRWXIkCEdHR11dXViYmIjR47EiVJSUpwRx7p16/C8eUBAQGxsrLu7O4lEKiws7GHzdo0LdXV1ZmZmYmJi4eHhBEEwmcwNGzaIiYnZ29uLiYlt27YNn+njkdehQ4e6LbbnQF9YWKiqqsqdsmXLlu3btxNd9nOC65S8urpaWlq6pqaGIIjLly/PnDmz5/wc1dXVRkZG6enpnEjk5+cXGBhIEMTHjx/V1dVxIp1OT05Ovn//Pt7f/Pz8Nm3aRBBEe3u7ubl5VlbW+vXrV6xYgTt09OjReHKmKz09PXt7e/z6Ux2KY/rs2bMJgrh//z5CaOvWrThxzJgxBEHs3r0bIXT79m1vb2+E0NmzZ2NjYzU0NDQ1NbutlKOfOrTnQP+pDu0a6AmuqZted+i7d+/U1NQaGxsJgggJCemUraOjw9TUtKGhoaysDEfGXu+bGRkZCCE8bcsJ9HgXO3HiBEEQGzduRAhFRUURBFFbW5uSknLz5k2EkK+vL9Fl6oYgCF9fXwsLCxKJNH/+/NbWVpyYmpoqLS2tqamJzxS7xZdAz4dbIHwJbW1t/N/2GhoanFkLPDupra3NYrFYLBaZTMYnR0wms4ezpLt3754/f/7YsWNiYmJXrlxBCFlaWgoJCeHCP3z4UFBQQKFQ1NTUpKWlaTRaVVUVQsjU1JRMJuNK6XS6iIhIVVVVUFAQLrPT5AyHhoYGQqi6ulpPT4+T6O/vf+zYsX379uG3DAajrq5u+PDhIiIiCgoKsrKynBmGIUOGyMnJycnJIYRaW1txenx8PJ5ScHJyotPpioqKGRkZWlpa3FV0q6WlxdPTMz8//86dO+7u7gihe/fu/f7778HBwVu3bt2+ffuePXsoFMr48eNxRZqamj0X2C0dHZ2mpqY3b96YmpriFCqVun79eoQQ7iAymdztBT1lZWV8EjN06FD81e85P6aqqnru3Lnz589nZ2c7OTnhHhk+fDhCSFpamkQiIYT+/vvvNWvW6OnpiYmJ4d5E/355REVFjY2N6XR6dXV1VlZWXl4ep95uq9PQ0OBc5OTo1KF46+no6CCEdHV1OSkIITMzM4RQpw69ePEiQghfD2xvb6+pqXn79u2wYcM+e3sJ/nYo91Zqa2sTFxfvtGDvOrSurk5TU1NWVhYhNGzYMCqVyv2piIjIkiVLzp07V1NTs27dOpzYu32zW932XXBw8Pbt201NTQcNGoQQ4p5H5fbXX38hhPz9/U+cODF58mRvb+/8/Hx3d3dZWdmnT5/iMr8f32mg79bmzZsXLlwYHR09dOhQMplsbGx88uRJBoNx7949/BUcNGhQZmbmkydPjIyMhgwZgpeqqKhwcXGxt7cPCAgoKyvrWmx6erqJicnGjRtra2t/+eUXgiDQv4cHWVnZw4cPh4aGqqurh4SELF68WEtLi0QiGRkZMRiMlJSUMWPGcBc1duzYXbt2JScnc0dhUVHR4OBgPJpDCImIiHh4eDx48OD8+fM0Go1Go3G+wZ1Mnjw5ODhYS0vL399fTEwMIWRra5ucnDx27NgtW7bs3buXk5NGo2VnZ+MhZ3JysoGBgbW19Zw5c5KTk5cvXy4pKUmlUs3MzNTV1Ukk0qNHjwwNDWNjY4WEhNTU1PAiwsLCnWaEvxCZTN65c6enp+e2bdsGDx585coVNpuNh6LGxsa7d++2sbE5fPiwtLQ07qAnT54oKipqampWVlYGBgY6ODgcOXLExcWl5/y2trY45ePHj0wmc8aMGba2ttu2bePs3txiY2O9vb09PT3T09NfvHiBEw8fPiwjI1NdXZ2SknL+/HkvL6+qqqr//Oc/OLza29vTaLSamhp8PODu0J07d1ZWVuJDeLcdamtrO2TIkOvXrzs6OuL5nGnTpnW7rWbMmPH06VNHR8fx48cLCQnJyMiIiYldvHgxMDAwMjJy4sSJ33OHdnR05OXlXb58mUQiXbx4cc2aNbiDbt68aW5ubmBg0LsO1dfXp9Fo+/fvNzMz+/333/FBkTvbihUrxowZw2Kx9uzZg1vYu32zW5MnT/7vf/975MgRFot15swZWVlZFxcXX19fhNCvv/6akZGRkJCAA4K8vDxCKCYmRlRU1M7ODl/we//+/dOnT3Esqq+vd3Nzq6urO3LkSElJSUlJiaOjo6ioaC+6oD+Qu91V+smtW7devXplaWnZ7Z7w/v17Op3u6ura0dGRnZ3t5eWFEKqqqhIXF7e0tDx27Nj69esvXLggIiJy9OhRaWlpa2vr58+fx8XF+fj40Gg0b29vLS2trKysmzdvqqqq4sEUQmjlypWPHz/Ozs729/cfN27cu3fvWCyWvb09QignJ8fKymr06NG5ubkREREKCgoWFha2tra1tbUyMjItLS2PHz9es2aNp6engoIC3o3v3bsXGxurra2toaGxdu3aBQsWcK+Cjo7OtWvXampq5s6dy2AwkpOTbWxsxo8fb25uXlxcPGjQIBcXFwsLC09PT2lp6cePH1dXV/v7+2/dupVMJiclJenq6k6bNq25uTkzM9PR0XHGjBlubm55eXkRERFPnjyhUqlz58599uzZ7du39+zZgycNsbS0tKCgIBKJpKOjk5qaWlVV5e7uHhYWpqGhUVdXh68RmZqajh492sbGpqSk5OnTp0OGDDlw4ICDgwObzfbz83N1dV20aFG3vcZmsw8fPowQWr16tYSERNcMDg4Ourq6ERERKSkpNjY2p0+fxt/vESNGhIeH5+XlLV26tKOjY9y4cQYGBhEREffu3Rs5cuSzZ8/c3NyuXLkyYsQIvAV6yD9u3DgckUtKSjZu3BgXF1dTU3PgwAEtLa38/HxDQ0MtLS2EUHJy8uzZsy0tLaOiopKSkpydndvb22fPnn3//n03N7e4uDh8Py89PT0LCwtpaem///47IiKCSqW6ubkVFBTcunVr/Pjx3Kump6d3/PhxNTU1BweHT3Xo8OHDZ8yY0djY+PDhQ3Fx8eDg4MmTJ7e0tGRkZDg6Ojo4OFRWVtbU1Li7u8+ZM8fU1DQlJSUyMjI2Nra0tHTy5MmXLl2qrq7etWsX951B+7VD6+rqQkNDRUREPjXC6LZDRURETE1Nw8LCOjo6pk+frqysbGZmpqend/Hixfj4eC8vr6ioqF50KJlMdnNzu3HjRnZ29pIlS5hMZqdsampq6enpLi4uOHBnZWX1bt9samp69erV6NGj7e3tKyoq3r175+HhgQ+6+fn5sbGx5ubmf/75p4GBgZ2dHd7I5eXlOjo6w4cPd3V1NTIywr//Tk9P9/DwWLlyJb4wbm5uHhISYm9vX1ZWFh8fr62tnZOTgzto2rRp3e4v6enp9+7dU1NT8/Pz63b79wtezhP1PEffM2Nj4/fv3/d5k7r1LT/BvH///rhx4+h0et82iWP//v0HDx7swwKfP3/u7Oycm5v7qQyf/XllL1RXV1taWvZVaZ/1LT/B3L1796JFi/q0Of9j3rx5jx8/7sMCP9uhn/15ZS/0U4d++PDhzp07+vr6nH2/X38ezRswR98Te3t7YWEetVZZWdnAwKB3y3p4eHh4ePRte7ht2rSpbwu0s7PrNDHKA6Kiora2tjyrzsjICP8mvRe2bdvWt43p5PLly31boCB1aFVV1dGjR4ODg/HMCfq2fXMg+2ECPS/v4Dxu3Lhx48bxrLoBSEFB4ezZszyrDl8cBv2nnzrU2Ng4OjqaOwX2zd75Hv9hCgAAQB+CQA8AAAIOAj0AAAg4CPQAACDgINADAICAg0APAAACDgI9AAAIOD78jj46OnrChAm8rxf0DkEQ+KZUM2fO5Nn/rIH+09LS0t7ezmKxYDfki05Py+ANnu63oqKiSkpKbDb7Gx8ZCHhMREQEIcT91A7wQ8P3noTdkF/U1NR4fL8zEkEQPKussbHxw4cPPKsOgK42b96M71/G74aAAU1CQqLXt+XoBZ6O6Dk3WweAX6SkpERFRXt3r3YAflBwMRYAAAQcBHoAABBwEOgBAEDAQaAHAAABB4EeAAAEHAR6AAAQcBDoAQBAwEGgBwAAAQeBHgAABBwEegAAEHAQ6AEAQMBBoAcAAAEHgR4AAAQcBHoAABBwEOgBAEDAwZPhwIBQX1+fnp6OEKqqqmpsbHz8+DFCyMjISEtLi99NA6Df8fQJUwDwS319vaqqKoPB4E5MSUkZMWIEv5oEAM/A1A0YEBQUFCZMmMD9cHMtLS17e3s+NgkAnoFADwaK+fPnM5lM/FpYWHjRokUkEom/TQKAN2DqBgwULS0tioqKra2t+G1WVpa5uTl/mwQAb8CIHgwUkpKSU6ZMERYWJpFIFhYWEOXBwAGBHgwg8+bNw7M3CxYs4HdbAOAdmLoBAwiDwVBSUvrw4UNxcbGOjg6/mwMAj/An0J85c2bXrl2ioqK8rxoMcDQaraOjQ0NDg98NAQMOm8328PA4evQo76vmzz9MNTQ0lJeX86VqABBCRUVF/G4CGIgqKyv5Ui/M0QMAgICDQA8AAAIOAj0AAAg4CPQAACDgINADAICAg0APAAACDgI94CltbW0KhaKpqcnvhnTD2tqal//bISwsbGNjw7PqwEAGgR7wlI+PT2xsrLe3N4/rFRERsba2trS0lJSU7DaDvr7+kSNHOjo6EEKjRo2iUCijR482NjYmk8n91CQmk7lv3z5TU9N+Kh8ADgj0QPB5eXnl5OScOnXq2bNntbW13d7oZtOmTadPn8av79y5c+DAgb1790ZHR1dXV/v7+/dTw06ePLlly5Z+KhwADniUIOAFKSmpoUOHiouL6+rqcqeLiooaGhqKiIjk5eXhGwgbGhpy7k/Q2tqalZXV3NyM3yorK+vp6YmLiyOEUlJS2traui2hK3FxcUtLy5aWltmzZ1+/fn3NmjWXLl3izkAmk2fPnr1582ZOyuLFi7OyshBCLi4ud+/eraiouHPnDi7KxMSkubm5oKAA56RQKFQq1cjIiCAITiJCSENDQ1dXV1hYODc3t6amBiEkLy9vaGhYXl6O3yKEIiIizp49Kyoqis8kAOgvBD/s37+f3+sNeMfGxqa2tvbDhw85OTn4C7Bx40aE0MSJE6uqqoqLiwsLC+vq6mbMmIEQOnbsGM7z8uVLBoNRVVWlrq6OENq0aVN7e3tKSgqVSqVSqaqqqp8qoVumpqZubm7h4eFMJnPdunWdPh06dGh+fj7nLZ1Ot7Cw4Lw9ePDgP//8gxAaM2ZMcXFxSkpKUVFRREQEfl4VQRA3b95MS0uj0+k7duzAi2zZsqW2tjY+Pp5KpU6cOBEhFBAQUF6a9xctAAAgAElEQVRenpSUVFNTExgYyCk8IyMDHmc4cEybNo0vIRcCPeh3cXFxBEE4OTkhhGJiYgiC2Lhxo4yMzPv37+vq6saPH+/i4kKn01taWsTExHCgx7Mohw8fJghi1apVCKGysjI6nb569Wo7OzsRERGE0KdK6LYN27Zte/78OZPJLCoqwi3h5urqmpiYyHnbKdAvWrQIP1i8sLBwwYIFFAqFQqGkpaVNmzYNIUQQhKenJ0JIU1OzoaEBL5KZmWltbc0pQU9P7+3btxMmTKBQKO7u7g0NDYMHD8YfPXz4EJcDBgJ+BXqYugH9Dv+2JCkpCSGUnJw8btw4hJCFhYW8vHx9ff327dsRQnieREVFBS+SkJCAEMJTHHJycgihkpKSMWPGHD9+HCFUWVnp4uKioKDQbQllZWVd27Bnz549e/a4u7s/ePDg0qVLWlpa3J+2trZ+6giBEBo0aFBzc7OysrKWltayZctwYlNTk5DQ/13iioyMRAiVl5cLCwuLiYm1t7efP38+Ojr6+fPn9+/fP3funK2trZSU1C+//ILzZ2ZmysvL19XVIYQkJCRaWlp6tV0B+FIQ6EG/a2hokJKSkpeXp9Pp8vLyOBGHuXfv3lEolK6LMBiMTine3t5r1qxxdHS0trbW0NCYOXPmjRs3eiiBm5SUFJ7oz8zMRAgNHjyYRPqfG3Tn5uZ2unjAQSKRZs2alZCQ8OHDB9yM2traTnlYLBZ3foTQH3/8ERYW5uzsHBAQoKOjEx0dXVtbO3bsWKLLXcH19fWzs7N7bj8A3wgCPeh3YWFhP//888GDByMjI+fOnYsT8/PzHzx44OHhcfDgwYiICDab3d7enpyc/KlCNDU1Hz16FB0dPWfOnBUrVuTm5n5hCWQyOTk5+fTp02/fvl2xYgVC6MqVK50CLp1OLyoqGjZs2KtXr3CKnZ2dqqqqpqamr6+vqqrq77//3tbWFhoaeufOnYMHD9LpdITQixcvPn782G1rHR0dRUVFW1tbGxsbhYWF4+LiEEIXLly4du1aS0sLi8WKj49HCBkZGdXV1VVUVPRuwwLwhSDQg34XGBjY2Ng4duzYVatWvX79GiGEn0YwY8aM5cuXOzk5BQYGkkgkGo02a9asgoKCuLi4d+/eIYTKysri4uLwVExAQICWlhabza6rq1u0aNHNmzc/VUKn2lksloeHx7p16zw8POrr6xcvXnz58uWujTx+/PiiRYs2bNiAEEpMTFy0aBGTyayrq7t582ZoaCgezq9atWrFihVz587FM+x+fn55eXk4iGPx8fFsNhshtHHjRgUFhdbW1rS0tL1793Z0dDg5Oa1fv97f319KSqq1tXXSpEkIoYULF544caI/tjkA/4MvVwbgYiz43pDJ5L/++ouX/xmLa8QXlsEAARdjAegDOjo6nR4GS6VSv2RBFou1ePHi/mjS91MjGLAg0AOBQqFQfH19O6XwpykAfDcg0AOBEhoaGhoayu9WAPB9gXvdAACAgINADwAAAg4CPQAACDgI9AAAIOAg0AMAgICDQA8AAAIOAj0AAAg4CPQAACDgINADAICA4+d/xqqrq+/evZvz9AYAABBUNTU1hw4d4lft/Az0JBLJx8cHP3gTAAAEWF5eXkhICL9qh9E0AAAIOAj0AAAg4CDQAwCAgINADwAAAg4CPQAACDgI9IAXmpqa4uLi8IOzuyooKKDRaPj1smXL6uvrv6TM1NRUBoOBC1+4cGFfNfVTCIJwcnKSkJBwdnYuLCykUqmZmZn9XSkAfQICPeCFM2fOTJ8+/dGjR91+euTIkbi4OPz67NmzCgoKX1Lm4sWLGxsbEULS0tJhYWF91dRPKSkpiY+Pnz9/flxcnIGBwdixY9etW9fflQLQJ+A37IAXLl++fP369ZMnT06cOBGn0On0/Pz8jo4OU1PTysrK7OxsRUVFW1vb3NzcYcOGvXjxwt7enkwmI4Ryc3MVFRWbmppKSkokJCRMTU1lZWVLS0ubm5sTExMHDx48cuTI9PR0e3t7hFBDQ0NBQYGOjo6SkhJC6Pnz59bW1oWFhVJSUlpaWgghGo1WU1MzdOhQ7uaxWKysrKyGhgaCIExNTVVUVBBC5eXl1dXVWlpaqqqqTCYzJiYGl0+lUkVERDivNTU1xcXFCwoKcFFSUlImJiaVlZUNDQ1mZmaysrL5+flVVVVCQkLK/6+9Mw2L6sgacEEDsjQ0jewNgrI0sopsAup1RERlcVADaoQZNQSVKCYa4iQyYjDqo5iBUWECRBGj6ADquKDsF0FRGmxARFYBAVtomn1voL4f9aQfPrYoKhis91dX3VNV59a5dfrUubdvKyoymUwhISEOh1NaWqqtra2mplZTU1NVVaWvr6+oqDhl5sB8csDp4MSJEwAABoPB5/OnRQHMVJKZmfnFF19ACJctW8bhcCCEQUFBcnJyNjY2BEEkJSWpqqrq6+sTBFFeXm5iYsLhcDZt2nTz5k0I4eDgoK6ubkNDw/nz5wmCsLa2VlVVzc3NjY6OlpSUtLGxcXR0bGlpYTKZEMLbt2/Pnj3bwsJCTk4uIiICQshkMl1cXCwtLel0emxsLISQJMkDBw4MV6+jo0NHR0dVVXXp0qVIn97eXmdnZzExMTMzMwqF4uXl1d7ebmZmhi5agiBcXFwAADQajSCI0NDQ06dPAwBERUV1dXXRstLQ0KBSqYqKihwO59SpUwRBLF68WFpa2sTEpK2tra2tTU9PT0dHp7KyUk1NzdTUtKura+rtgplKSkpKlJSUXF1dp2V07OgxHxwPD49///vf6enp+/fvP3r0KI/HU1RUbGhoEAj4+PggLwwhRI7+/v37a9asgRDevn1706ZN6BBKnhw/fnzbtm0QQgMDAy6XCyEUOHojI6PMzEwIYWVl5ezZs4eGhphMZmpqKoQwJSVlvDWGUu3m5uZ+fn5xcXH9/f1hYWEAgNDQUAjh/v37AQD37t1js9kAAF9fX9QKAEAQBPqMHH1gYODQ0BCVSpWUlGxvbz9z5gwA4MqVK0ifrKwsf39/AEBUVBSEsLS0lEajSUpKKigoVFdXv98Jx3yETK+jx6kbzIeltbU1NTX15cuX8fHxAIDGxsZ169apqKhMnKlYsmTJV199VVNTExYW9t133wEAfH19r1+/rqGh0dvbKy8vP2YrLpdrbGwMAJg3bx4AoK+vDwCwcOFCAACDwWhvbx+zlZGR0a5du+Li4lD8sWfPHllZWQCApqYmAGDu3LkAAA6Hg/I5E6CtrS0kJCQlJUWlUqWlpaWkpAAAPT09q1evTk5OtrCw6OzsBAC8fv0adaurq8tisSwsLNTV1SfuGYN5R/DNWMyH5eLFix4eHuTv6OrqVldX9/X1HThwIDk5mSTJ3t5eOp2elpZGkiRyhYgvv/zy4MGDtbW1S5YsAQAkJSX5+/v/8MMPhoaGEEIAAJ1Oj4+Pz8rKEjRZsWLFjh077t69u3v3bn19fXFx8dH6cLncp0+fDq/p7e397LPPrl69GhERISQk1NLS4uzsLCIiEhIScvv27YiICBkZGTs7uxH90Gi06urq1NTUV69eTXD6AwMDaWlp8+bN+8c//oG+fpDye/bsYbPZhw8fzszMPHDgwNvOKgbzVmBHj/mwlJaWbtq0SVD08vIqKChISUnp7u4+ceJEQEBAa2srSoIfPnz49evX5ubmYmJiAAAPD49Xr14JnGB4eHhCQsLly5ednZ1R2B4YGJiQkHD8+HERERF0JzY0NHTu3LmnT58WFhaOjY0FAFhaWqK35klKSpqYmAAAiouLL1++PFzDpqamgICAgICA+Pj4r7/++tSpU+bm5hkZGSoqKmfPnrWysnr48KG6ujqVSiUIQltbG7WKiIgwNDQMDAzMzc1FiXu0R7GxsbGysgIAKCsrEwShpqYWFxfHZDJ//vnntrY2giDmzJnz+PHjkpKSM2fO/POf/wwKCmKxWAUFBR/cEphPGCEUX0wxJ0+e9PPzYzAY1dXV+O2VGAxmxlNaWkoQhI2NzbVr16Z+dBzRYzAYzAwHO3oMBoOZ4WBHj8FgMDMc7OgxGAxmhoMdPQaDwcxwsKPHYDCYGQ529BgMBjPDwY4eg8FgZjjY0WMwGMwMZzp/ldrb22tvby8kJDSNOmAwGMwU0N3djd6yNy1Mp6Pn8XgkSU6jAhgMBvMpMJ2OXllZ+csvvxQWxumjPw3Xrl0rLCw0NjZet27ddOuCeWvCw8P7+/s3bdo0e/bs6dblk4PH48XExEzX6NPp6CkUir+/P36p2Z+IFy9eFBYWLliw4NChQ9OtC+atiYqKGhwc9PHxYTKZ063LJ0dpael///vf6RodR9MYDAYzw8GOHoPBYGY42NFjMBjMDAc7egwGg5nhfNKOPicnZ2BgYLq1wLwf+vv7c3Nzp1sLDOZj5CN19Gw2u729/V16YLFYfD5/YhlPT8/h/0b9fqmpqREXFw8LCwMAlJeXkyRZXl4u0C0zM/MDjfvo0SP0N9ylpaWopq6uDtWw2ezu7m6BZFdXV15e3pMnTwSV3t7eGhoavb2976JAZ2dnXl5efX39BDJ8Pp/FYr15n28i39zc/MUXX7x5n2/LlStXhIWFi4uLwRQatLe3V/C/6g0NDcMP1dbW5ufnC4wVExNDoVCKioreccTGxsbc3NyWlpYJZMrLy7lc7pv3yeVyBXM1Jmpqam8iNjn8/f2FhISsrKzMzc2FhIS++uqrN2/b2tpKkmR1dTUqVlVVkSR5//79Z8+eDQ4OosqsrCySJLOysmpqat678u8NOB2cOHECAMBgMPh8/pgCtra22dnZ7zKEgYEBl8udWIbJZLa0tLzLKBOwd+9eCQmJ9vZ2CKGPjw863+7ubqSblJTUBxrX3d3d3NwcALB9+3ZUExsbSxDEkiVLaDQanU5PTk6GECYkJEhLS6urq6uqqtJotNTUVAhhTk4OAODcuXPjde7p6QkA8PT0HE8gKCiIRqOZmZkpKyuvWrWqqalpTDEul2tgYPDmJ/Um8hwOx8TE5M37fFtMTU1tbW3R5ykzKIfDEfwj+cWLF1FlX1+fq6srlUrV0dGRl5dPT09HlXQ6fQLTQAg1NTWVlJRKSkrGPNrT07NlyxY5OTlzc3MajbZv376hoaExJX18fGJjY9/8LGJjY318fCYQYDAYbyI2OebMmaOlpQUhZLPZAIC3GiI9PR0AcOjQIVSMjIwkCMLKyopCoWhoaLx48QJC6OjoSBCEkZERAMDV1XU8n1ZSUqKkpOTq6vqu5zMpPtKIXkBZWVlTU1N9ff3Tp09RTWNjY0VFRWtrK5vN7u/vBwB0d3fn5+ejoy9fvqyrq6upqenq6nrw4EFWVtbw3lpbW7Ozs0mSFMSbEMLnz5+/fPkSFaurq0mSfPz4sWA/kZOTw+fzi4uLh4eoKBaura1FRRaL1dHRMULzuLg4W1tbaWlpQU19ff3PP/88+hxra2tzcnJev36Niq9evRIEcXl5eYLAoaenp6CgYHgoMSZXrlw5f/788JoNGzagMCQ1NbWlpQV9y4aHh3d0dKSmpt68ebOtrS0qKgoAYGFhIS8vHxsbO0H/E5Cenh4cHJyfn5+bm1tbW6usrLxv3z50RoKYqLCwsLOzs7i4uKuriyTJoqIiZOLa2loULP+h/PAR6+rqMjMzSZLs6upCNXw+n81mCwLS/Px8kiTz8/PR9g6ld/r6+thsdltbm6AfLpfLYrEErUYbtLKyks1mr169enjlmAYdHBwsKSnJy8sTXELFxcXImhkZGWVlZQLJ5uZmFotVVVU1wZQqKyuTJOnr6zu8MjIy8vr165GRkcXFxZKSktu2bRscHBQTE7Ozs3uXP54+duxYY2Pjy5cvWSxWRUVFSkrKhQsXAAAPHz5EAu3t7UVFRW1tbfX19c+ePSNJsrOzc/QCKS4ubm1tRZ9RW3SUJMm6urrhIzY2NhYWFgquZ4EYi8WqrKxElb29vbm5uZM2XG5uLo/HAwAgbYcfam5uzsnJqaioQMX+/n5kppycnObmZjQ0cizILfB4vO3bt5Mk+ejRo4CAgJqamps3bwIAbt++TZJkYWGhk5PT9evXUbT00TEtXy9vHtF7e3uvWrXKxMSEwWDs2bMHQhgTE2Ntba2np6evr29oaNje3v78+XOCIFDDY8eO/etf/4qOjpaUlLSxsXF0dBT0mZ+fLy8vb2NjQxDEtWvXIIRMJtPFxcXS0pJOp6MI5fz58wRBWFtbq6qq5ubmIpnVq1dbWFjQ6fSIiAgIYVpaGoPBWLRokZqaWmBgIITw73//+4goqampCQCAFIa/B4BOTk7S0tINDQ2CALC3t9fZ2VlMTMzMzIxCoXh5eQ0NDaFsj7CwsKmpKQBg5cqVEMJbt27Nnj1bW1tbVVV1/vz51dXVE0wv+lIURPQC0K+cvL29IYShoaEAAH9//3379gkJCQmixSVLligrK4/X88QR/Z49e44cOSIo1tXV0Wg0CGFYWJggJnJwcGCz2bt375aUlCQI4ocffvD29razszM2NmYwGKjnieUF/f/yyy9KSkpLliwhCOLFixccDkdDQ8PGxsbCwmL27NmVlZUQQl9fX4IgTE1NDQwM2tvbkYyFhYW5ubmCggIy8alTp1RUVBYtWqSionLv3j04lkHj4uIAAOiygeMbtLKycv78+XJycnp6epKSkuiCcXd3BwBIS0vr6uoCAH766ScI4eHDh8XExExNTalUqouLS39//7jmhPD06dNgWES/YcMGAEBpaSmE0MnJCQCATtbf33/iFT1xRG9sbJyVlSUo/vbbb2vXroUQKikpoZrs7Oy1a9cWFhaqqqrq6+sTBFFeXj56gbi7u6NNhqCtkZGRqqoqQRDD9wHXrl2TlZW1sLBwcHBAl5xA7OTJk6ampkgsNDT0u+++m7Thtm/fTqFQpKSk0Ojg94g+ICBAVFTUxMSESqUuWrSIx+PxeDyCIAiC0NfXFxMT++WXX9AeEQCgoaFBEMTDhw8hhGVlZQkJCba2tnJyck+fPhUMVFtby2AwxMTEampqxpze6Y3o/wSO3t/fH0LY0dGhqqoKf3f0AwMDEEIvL68zZ86MdvRwrNRNbGysq6trRUWFoIbJZKKURUpKisAA1dXVmZmZx48f37ZtG5K5c+cOqldRUYEQLly4MDQ0ND09PTExUUlJqaenZ7T+aIvg5+eHisgvkCSpqqq6Y8cOgV9APj00NBRCuH//fgDAvXv3UOXBgwchhCtWrAAAtLa2KikpycrKJicnox/XeXh4TDC9Yzp61O2yZcs6OjoghDk5OTo6OvPmzdPQ0DAwMCgoKEBiK1eulJGRGa/niR39li1b/vOf/wiKPT09FAqlv79/tOMenorx9vb+9ttvIYR9fX0GBgZFRUUTywvw8fEJDAxsaGhARQ6HIysry+PxIIQHDx4MCQmBEA4NDT179iwjI2Pjxo3R0dEcDodKpb5+/RpCeOnSpQ0bNjQ3N8vLy9+5cyc9PT0yMlKQnBlBdHQ0ACAhIUEw9JgGRT69uLh4aGjI0tJSRESko6MDVaakpPD5fAkJiQULFjx//hwAsHjx4vT09O+//x4A8Ouvv44353CUo1+5ciUAoKqqCkKI3kXx5MkTCOHRo0ffxdGrqakNP3T37t3FixfDUY4e/v/UzegFMtrRj5mTMTQ0fPz4MYSQzWbLysqOEHN3d09JSRkaGjI2Nq6vr5+04SCENBoN5fQEqRs0/25ubhDC27dvAwAOHDgAIUS3l0iSVFdX19TUhKNSNxDC4OBgS0tLUVFRS0tLlLqBEPJ4PH19/VmzZsXFxY2nxvQ6+j/B6wcWLlwIAKBSqYL3XM6fP59CoQAAjIyMmpqaKBSKYPfX29srLi4+Zj/r16/n8/mBgYEVFRV+fn4uLi6CzhkMBtpo+/r6Xr9+Hd2QlJeXRw1R9k1DQ2NwcHBwcJDD4cTExKBX9Ojp6bW1tY0eUVFRUVRUlMPhDK+UkpL68ccfd+zYIcjnIAFNTU0AwNy5cwU1AAADAwMAAI1GAwC0t7fzeDwpKakjR44AAAiCkJKSAgAUFBS0tLQsXbr0D98XFB8f7+Pj85e//OXu3buzZs0CAHh5eTU0NHC53MHBQRqNtmvXLpTm4nA46urqE/c2HoaGhunp6d7e3qiYnp6uq6srKio6wkCjG6IZFhMTYzKZow063nDHjh2LjIz08fFpamoKDw+XlpbW0NCQk5MDADAYjKampoGBgUWLFvX29srJyXE4nAULFgAAFBUVlZSU0KARERFcLrevrw9FHgCA8c6dwWCAYdZBTGBQISEhDQ2NnJwctLcDABgYGIiIiEhKSvb09CCx2tragIAAAABBECizlJGRIS0tja7JCdDS0gIAcLlcTU3NxsZGYWHhERfP5EDmE7wdIT09HdkFmYNCoYxnixELRGC+gYGBCdKMTU1NhoaGAAADAwO0nIfz7bffHj58uK+vz8zMTFVV9fXr15Mz3JiMue7S09OdnJzk5OS0tLRaWlrGex7P19fX19c3NjbWzc3txIkTYWFh3d3dTk5OZWVl//vf/9asWfPmakwlfwJHP5qbN2+eO3dORkYmODg4KipKTU2ttLT00qVLKAWxe/duAACdTo+PjzcwMFi8eDFqVVdXp6Ki4unpmZCQcPXqVeToR5CUlOTv76+urn716lXBsvHz8/P09ExOTjYyMqJQKC4uLhDCv/71rxISEmJiYkpKSiwWS09Pb3g6ftasWdbW1tnZ2SP637p1a0hIyNOnT5GndnZ2Pnr0aEhIyODgYEREhIyMjJ2d3Z07d0a0EhUVdXZ2TkxM3LJlC7ovhy7rffv2paam9vT0DP+mYbFYKJHN4XBIkjQxMSkpKfn888/pdPrXX3+dnZ0tKSlpaWnJYDCePn0aGRnZ39/P5/PRYw9tbW3FxcUoXJ0EO3bsMDY23rlzp6OjY01NzZEjR9A2gslkBgcHW1lZlZWV5eXlAQBkZGQaGhru3r2LTiQ4OFhaWprD4Tx69OjcuXNCQkITyCPvAACorq42NTU1NDQMCgoiSdLZ2XmEPjwej8PhnD17FkJ48uRJCCEAoL6+3t/f39raOiQkxM7OTktLS1tb29HR0dTUVERERFFREc3hCINaWVlJSkpmZ2dv27ZtAoO6urrev3/f39/fwsIiKSlp4cKFGhoaoyfKwsJizpw5EhISvr6+dDod/O4r7ezszM3NHz16JJDk8/kPHjxAz6I8f/6cJEmCIHbu3BkREXHixAlnZ+fHjx97enrKysoCALKzs42NjSdnOwBAQEDA6tWrW1tbjYyMHjx4cP78efS4KpPJPHLkiJmZWXBwMJVKBQDQ6fS0tDR5eXl023/EAmEymWFhYXw+/9atW8jR0+n0/Pz8tLQ0XV1ddKUBAJYvX75z586NGzfeuHEDmWa4mJmZWVdX1/fff3/p0iUkPznDjYm5ubmamtrVq1dtbGxQPsfV1TUrK6u7u3v//v3q6uosFguphCYWhfmWlpbPnj3r6urq6+u7cuUK+D0a27hxY3Z2tpeXl6SkJEmS+vr6SJmPCgqKKaaYhw8fJicny8jI7N27d8xolM1mL168WEFBoaysTEdHZ86cOQCA7OxsNze3oqIiaWnp7u7ulJSU3bt3Ozk5iYqKzp8/Pzo6ur+/f926dYqKivr6+vPmzbt48WJmZubmzZtRn/fu3QsKCnrw4AGVSv3xxx9pNFpOTg5KkXd3d1dXVzs4OJiYmERHR5eVla1du5bP59vb2585c+abb765cOGCqKjo6dOnqVSqvb19RUVFfHx8YmIim812d3c/ePCgiYmJYAeAmDVrVmRkpIuLi4qKSnl5eU9Pz/r16xUUFHR1dWtqarS0tLZs2aKqqrpixYqysrL09HQDA4Pw8HBtbe1Xr15xOJw1a9bMnTv32bNnAIDNmze7ublRqdTU1NTExESSJCUkJCwsLNDy27p16/BxDx48SJKkpqYmn89HV2dVVRUKiNCN6NLSUldX15UrV1IolKysrKqqKnd39yNHjkhISFy6dOnmzZu//vrreFfqjRs3CgoKTExMXF1dRx8VFxf39PRks9l37tzp7Ow8fvy4vb09AEBDQ6O7u/vatWt6eno6OjrW1tYKCgrS0tIXLlxobm7u7u52cHDIyMgoLS09ffo0yiZNIL98+XI0XHBw8G+//cZisaysrHbv3o2yNOj7+9WrV+Li4jY2NjIyMpcvX25vb3dwcFBQUJg7d+69e/ccHBwuX75sZWV14MABERGRtWvXJicn37hxIyUlpaenhyCI0QZFudcbN274+vqKiIiMZ1ArKyttbW0Wi5Wbm+vs7Hz27FkpKani4mII4ebNmyUkJB48eKClpeXu7v7ZZ5+1tLQkJiYmJyeTJGlqaiosLHzq1KmdO3cuXbpUMG5nZ+eOHTsaGho0NTVra2tJkvT09ERPNBUWFj558mTr1q0//fQThUKprKw8cODAoUOHLCwsxlt3ISEhAwMDW7duHXGtItTU1BwdHZOTk1NSUmg0WlRUFFp3VlZWcXFxpaWl27dv7+/vX758uba2dkJCwq1bt5YvX3758uURC8TU1DQnJycjI8PDw4PL5bq7u8+ZM6eoqCg+Pl5ZWVlfXx8Nt2LFisePH6elpW3atKmtrc3NzW2EmIiISE1Nzd69e9E8TM5wAICsrCxdXV0XF5fOzs7CwkJbW9ulS5euX7++ra0tMTFRXFz82LFjzs7OCxYs6OjoyMvLKygoYDAY8+bN8/DwUFZWFhISqqqqSk1NdXBwOHny5I0bNx49eiQrK+vn54ce542OjmYwGOil6yRJzp8/H+0SRsDj8aKiotTV1VEqb6qZloTRH+boJyAmJsbX1/dDaDUmk34Ec3Bw0M3NDd0w+BBwuVx7e3sOh/Me+9y1axdKVo7HHz5eOQm8vb2vX7/+HjucgHd5BLO2tnbZsmWC7PN7J2z49vUAAAGBSURBVCkp6W9/+9vg4ODkmoeHh7u4uPT19U0gM3GOfnJ8oGeUU1NTCYJISkpCxQ/97OwUgHP0b4eioiJKX0wN6JbaJBoKCwtfvXr1vesjQF5ePikp6f32efbs2ffb4Zugq6s7ZoD5IRATE0PZhkmgpqaGbs19IOzt7dEGaHJ4eXl5eXm9R33ekEkvkIkJCgpaunSpYELexXAY8GfM0S9fvlyweZ8C0OMWmA/HN998M2VjycnJRUZGTtlwnwIfaIEkJCQML2LDvSMf+w+mMBgMBvOOYEePwWAwMxzs6DEYDGaGgx09BoPBzHCwo8dgMJgZDnb0GAwGM8PBjh6DwWBmONP5HH1/f7+np6fgVWWYjx/09p7MzMzPP/98unXBvDXd3d0DAwP79++XkZGZbl0+Odrb2//wP+8+HNPp6LlcbkxMzDQqgJkcVVVVE/9dBuZjBr2YF/NJMT2O3tbWdsRbADEYDGbGs2rVqmkZVwhCOC0DYzAYDGZqwDdjMRgMZobzf1TF7UgicY8KAAAAAElFTkSuQmCC", | |
| "text/plain": [ | |
| "<IPython.core.display.Image object>" | |
| ] | |
| }, | |
| "execution_count": 105, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "from keras.utils import plot_model\n", | |
| "\n", | |
| "plot_model(model, to_file='/tmp/model.png', dpi=50,\n", | |
| " #expand_nested=False, show_shapes=False, show_dtype=False, show_layer_names=False)\n", | |
| " expand_nested=True, show_shapes=True, show_dtype=True, show_layer_names=True, show_layer_activations=True)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Show Image in Jupyter Notebook" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 106, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from IPython.display import Image\n", | |
| "#Image('/tmp/model.png')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Layer properties" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 107, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "conv2d_2\n", | |
| "Conv2D\n", | |
| "(None, 26, 26, 32)\n", | |
| "(None, 24, 24, 64)\n", | |
| "(3, 3)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "layer = model.layers[2]\n", | |
| "print(layer.name)\n", | |
| "print(layer.__class__.__name__)\n", | |
| "print(layer.input.shape)\n", | |
| "print(layer.output.shape)\n", | |
| "print(layer.kernel_size)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 108, | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<Variable path=conv2d_2/kernel, shape=(3, 3, 32, 64), dtype=float32, value=[[[[ 0.03440282 -0.00176015 -0.07818552 ... -0.01664207 -0.07828955\n", | |
| " -0.03948399]\n", | |
| " [ 0.075496 -0.00142183 -0.08165282 ... 0.02101805 0.02270661\n", | |
| " 0.06905431]\n", | |
| " [ 0.05698492 -0.04679537 -0.02225199 ... -0.03914533 0.04927637\n", | |
| " 0.01817616]\n", | |
| " ...\n", | |
| " [-0.03007923 0.02942479 -0.07249898 ... -0.07964496 -0.04852408\n", | |
| " -0.01335011]\n", | |
| " [ 0.06461442 0.07721319 0.06172196 ... 0.07559059 -0.02930897\n", | |
| " 0.04826457]\n", | |
| " [ 0.04985023 -0.00199733 -0.07380027 ... 0.00823375 -0.04768056\n", | |
| " -0.06501482]]\n", | |
| "\n", | |
| " [[-0.02105616 0.0572919 -0.02564325 ... -0.0302398 0.00607773\n", | |
| " 0.00332514]\n", | |
| " [ 0.04216137 -0.07315218 -0.02890204 ... -0.00487739 -0.08070996\n", | |
| " -0.06125238]\n", | |
| " [-0.01282743 0.05030038 0.04343165 ... -0.02591767 0.00028703\n", | |
| " -0.0439713 ]\n", | |
| " ...\n", | |
| " [-0.07120904 -0.00455263 0.02881122 ... -0.05930086 -0.02426791\n", | |
| " 0.060964 ]\n", | |
| " [-0.0786141 0.05738617 0.06603295 ... 0.03359719 0.02365464\n", | |
| " -0.00346293]\n", | |
| " [-0.02836531 -0.02265024 -0.03662553 ... -0.03269383 -0.03030479\n", | |
| " -0.03802856]]\n", | |
| "\n", | |
| " [[ 0.03778392 -0.0569375 -0.06301316 ... 0.06565867 -0.04449111\n", | |
| " -0.07161433]\n", | |
| " [ 0.01822349 0.01759154 0.03085587 ... 0.02283641 0.06116513\n", | |
| " 0.05034957]\n", | |
| " [ 0.0114462 0.04698903 0.04385624 ... -0.00136705 0.03995355\n", | |
| " 0.0745047 ]\n", | |
| " ...\n", | |
| " [ 0.07865862 -0.02502891 0.00478331 ... 0.03121499 -0.00387323\n", | |
| " -0.06286363]\n", | |
| " [-0.06796728 0.03747344 -0.0050357 ... 0.07652301 -0.04746687\n", | |
| " -0.00176267]\n", | |
| " [-0.06267764 -0.01978129 -0.05559705 ... -0.02445366 0.01747373\n", | |
| " 0.07541499]]]\n", | |
| "\n", | |
| "\n", | |
| " [[[-0.06340294 -0.01595404 -0.02243223 ... -0.00198217 -0.06777644\n", | |
| " 0.02485933]\n", | |
| " [-0.0707614 0.03481362 -0.05366421 ... 0.03768595 -0.05798445\n", | |
| " -0.07491323]\n", | |
| " [-0.05073625 0.00408187 -0.03776952 ... 0.04713572 -0.00734743\n", | |
| " -0.00533619]\n", | |
| " ...\n", | |
| " [-0.05412275 -0.03145454 -0.03662837 ... 0.07074895 -0.08043444\n", | |
| " 0.02274563]\n", | |
| " [ 0.07194314 -0.05876396 -0.01235507 ... 0.02834785 -0.05243073\n", | |
| " -0.03136262]\n", | |
| " [-0.03248274 -0.02028529 0.05821017 ... 0.0525417 -0.05555093\n", | |
| " 0.07117239]]\n", | |
| "\n", | |
| " [[-0.05332094 0.01675352 -0.06677645 ... 0.03726401 0.03991046\n", | |
| " -0.06622338]\n", | |
| " [ 0.07184502 -0.01309141 0.03686013 ... 0.05153432 0.03988113\n", | |
| " 0.06042048]\n", | |
| " [-0.07675099 -0.00292625 -0.05172684 ... -0.08050434 -0.08167219\n", | |
| " 0.06197662]\n", | |
| " ...\n", | |
| " [ 0.08078078 0.03573108 -0.06949183 ... -0.0604018 0.07725068\n", | |
| " -0.06828231]\n", | |
| " [-0.03310412 -0.03548928 0.07387962 ... -0.05686885 0.0005666\n", | |
| " -0.0206481 ]\n", | |
| " [-0.06829929 -0.03852103 -0.04588411 ... 0.01457635 0.05313351\n", | |
| " 0.01247635]]\n", | |
| "\n", | |
| " [[ 0.00034106 0.05574212 0.07376368 ... 0.08284929 -0.00412601\n", | |
| " 0.06890985]\n", | |
| " [ 0.01409954 0.01843065 0.06897309 ... -0.00247163 0.01509879\n", | |
| " -0.0332317 ]\n", | |
| " [ 0.03840502 -0.03488867 0.05145691 ... -0.00911488 -0.0364243\n", | |
| " 0.07687692]\n", | |
| " ...\n", | |
| " [-0.05200851 0.00831181 0.02273228 ... -0.07840248 -0.00458535\n", | |
| " 0.04347158]\n", | |
| " [-0.06204206 -0.0292813 0.05286328 ... -0.04731542 0.01246116\n", | |
| " -0.00287517]\n", | |
| " [ 0.00233229 -0.0251027 -0.05082991 ... 0.01251765 -0.00884996\n", | |
| " 0.03986373]]]\n", | |
| "\n", | |
| "\n", | |
| " [[[ 0.00724147 -0.01087654 -0.07481851 ... -0.05570233 0.07029554\n", | |
| " -0.02601417]\n", | |
| " [-0.03659012 0.02939377 -0.07892591 ... -0.07765114 0.04854376\n", | |
| " 0.02888123]\n", | |
| " [ 0.03412426 -0.05098508 0.04696501 ... 0.00880124 0.07820014\n", | |
| " -0.06088579]\n", | |
| " ...\n", | |
| " [ 0.00686244 -0.01171609 0.06585457 ... 0.01540148 -0.00481877\n", | |
| " 0.02059563]\n", | |
| " [ 0.02708753 -0.00750196 0.0074841 ... -0.06940073 0.0551931\n", | |
| " -0.02131268]\n", | |
| " [-0.01223614 -0.03775595 0.05998208 ... -0.008814 -0.01885742\n", | |
| " -0.05709972]]\n", | |
| "\n", | |
| " [[ 0.06367517 -0.06966279 -0.07372197 ... -0.0321547 -0.04803979\n", | |
| " 0.07314426]\n", | |
| " [ 0.0584671 -0.01935825 -0.00561881 ... -0.08256429 0.06678941\n", | |
| " 0.0812806 ]\n", | |
| " [-0.0824258 0.02051204 -0.06814389 ... 0.00935598 -0.0057089\n", | |
| " 0.02000233]\n", | |
| " ...\n", | |
| " [-0.0173013 0.04066596 -0.0785988 ... -0.0453378 -0.02799306\n", | |
| " 0.05372801]\n", | |
| " [ 0.02269711 0.01104412 0.07593591 ... -0.04514911 -0.04072084\n", | |
| " -0.01642481]\n", | |
| " [-0.04769991 0.03051827 -0.00344616 ... 0.06455965 -0.01706624\n", | |
| " -0.05574594]]\n", | |
| "\n", | |
| " [[-0.02433026 0.00793219 -0.0084214 ... -0.03408206 -0.06045115\n", | |
| " 0.01816165]\n", | |
| " [-0.02427081 -0.02285944 0.07714925 ... -0.06572586 0.03900927\n", | |
| " 0.00862592]\n", | |
| " [-0.00245699 -0.05214681 -0.01053294 ... 0.05302969 -0.07305664\n", | |
| " 0.06348028]\n", | |
| " ...\n", | |
| " [-0.00727127 0.07075379 0.00926721 ... -0.04156522 0.0662593\n", | |
| " 0.01811711]\n", | |
| " [-0.06543182 -0.04015915 -0.07905178 ... -0.06430396 0.06570569\n", | |
| " -0.04891424]\n", | |
| " [-0.04466017 0.02645779 -0.07221298 ... 0.06090764 0.07160272\n", | |
| " -0.04879294]]]]>" | |
| ] | |
| }, | |
| "execution_count": 108, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "layer.kernel" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 109, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<Variable path=conv2d_2/bias, shape=(64,), dtype=float32, value=[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.\n", | |
| " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]>" | |
| ] | |
| }, | |
| "execution_count": 109, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "layer.bias" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "get weight values as numpy arrays" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 110, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[(3, 3, 32, 64), (64,)]\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[array([[[[ 0.03440282, -0.00176015, -0.07818552, ..., -0.01664207,\n", | |
| " -0.07828955, -0.03948399],\n", | |
| " [ 0.075496 , -0.00142183, -0.08165282, ..., 0.02101805,\n", | |
| " 0.02270661, 0.06905431],\n", | |
| " [ 0.05698492, -0.04679537, -0.02225199, ..., -0.03914533,\n", | |
| " 0.04927637, 0.01817616],\n", | |
| " ...,\n", | |
| " [-0.03007923, 0.02942479, -0.07249898, ..., -0.07964496,\n", | |
| " -0.04852408, -0.01335011],\n", | |
| " [ 0.06461442, 0.07721319, 0.06172196, ..., 0.07559059,\n", | |
| " -0.02930897, 0.04826457],\n", | |
| " [ 0.04985023, -0.00199733, -0.07380027, ..., 0.00823375,\n", | |
| " -0.04768056, -0.06501482]],\n", | |
| " \n", | |
| " [[-0.02105616, 0.0572919 , -0.02564325, ..., -0.0302398 ,\n", | |
| " 0.00607773, 0.00332514],\n", | |
| " [ 0.04216137, -0.07315218, -0.02890204, ..., -0.00487739,\n", | |
| " -0.08070996, -0.06125238],\n", | |
| " [-0.01282743, 0.05030038, 0.04343165, ..., -0.02591767,\n", | |
| " 0.00028703, -0.0439713 ],\n", | |
| " ...,\n", | |
| " [-0.07120904, -0.00455263, 0.02881122, ..., -0.05930086,\n", | |
| " -0.02426791, 0.060964 ],\n", | |
| " [-0.0786141 , 0.05738617, 0.06603295, ..., 0.03359719,\n", | |
| " 0.02365464, -0.00346293],\n", | |
| " [-0.02836531, -0.02265024, -0.03662553, ..., -0.03269383,\n", | |
| " -0.03030479, -0.03802856]],\n", | |
| " \n", | |
| " [[ 0.03778392, -0.0569375 , -0.06301316, ..., 0.06565867,\n", | |
| " -0.04449111, -0.07161433],\n", | |
| " [ 0.01822349, 0.01759154, 0.03085587, ..., 0.02283641,\n", | |
| " 0.06116513, 0.05034957],\n", | |
| " [ 0.0114462 , 0.04698903, 0.04385624, ..., -0.00136705,\n", | |
| " 0.03995355, 0.0745047 ],\n", | |
| " ...,\n", | |
| " [ 0.07865862, -0.02502891, 0.00478331, ..., 0.03121499,\n", | |
| " -0.00387323, -0.06286363],\n", | |
| " [-0.06796728, 0.03747344, -0.0050357 , ..., 0.07652301,\n", | |
| " -0.04746687, -0.00176267],\n", | |
| " [-0.06267764, -0.01978129, -0.05559705, ..., -0.02445366,\n", | |
| " 0.01747373, 0.07541499]]],\n", | |
| " \n", | |
| " \n", | |
| " [[[-0.06340294, -0.01595404, -0.02243223, ..., -0.00198217,\n", | |
| " -0.06777644, 0.02485933],\n", | |
| " [-0.0707614 , 0.03481362, -0.05366421, ..., 0.03768595,\n", | |
| " -0.05798445, -0.07491323],\n", | |
| " [-0.05073625, 0.00408187, -0.03776952, ..., 0.04713572,\n", | |
| " -0.00734743, -0.00533619],\n", | |
| " ...,\n", | |
| " [-0.05412275, -0.03145454, -0.03662837, ..., 0.07074895,\n", | |
| " -0.08043444, 0.02274563],\n", | |
| " [ 0.07194314, -0.05876396, -0.01235507, ..., 0.02834785,\n", | |
| " -0.05243073, -0.03136262],\n", | |
| " [-0.03248274, -0.02028529, 0.05821017, ..., 0.0525417 ,\n", | |
| " -0.05555093, 0.07117239]],\n", | |
| " \n", | |
| " [[-0.05332094, 0.01675352, -0.06677645, ..., 0.03726401,\n", | |
| " 0.03991046, -0.06622338],\n", | |
| " [ 0.07184502, -0.01309141, 0.03686013, ..., 0.05153432,\n", | |
| " 0.03988113, 0.06042048],\n", | |
| " [-0.07675099, -0.00292625, -0.05172684, ..., -0.08050434,\n", | |
| " -0.08167219, 0.06197662],\n", | |
| " ...,\n", | |
| " [ 0.08078078, 0.03573108, -0.06949183, ..., -0.0604018 ,\n", | |
| " 0.07725068, -0.06828231],\n", | |
| " [-0.03310412, -0.03548928, 0.07387962, ..., -0.05686885,\n", | |
| " 0.0005666 , -0.0206481 ],\n", | |
| " [-0.06829929, -0.03852103, -0.04588411, ..., 0.01457635,\n", | |
| " 0.05313351, 0.01247635]],\n", | |
| " \n", | |
| " [[ 0.00034106, 0.05574212, 0.07376368, ..., 0.08284929,\n", | |
| " -0.00412601, 0.06890985],\n", | |
| " [ 0.01409954, 0.01843065, 0.06897309, ..., -0.00247163,\n", | |
| " 0.01509879, -0.0332317 ],\n", | |
| " [ 0.03840502, -0.03488867, 0.05145691, ..., -0.00911488,\n", | |
| " -0.0364243 , 0.07687692],\n", | |
| " ...,\n", | |
| " [-0.05200851, 0.00831181, 0.02273228, ..., -0.07840248,\n", | |
| " -0.00458535, 0.04347158],\n", | |
| " [-0.06204206, -0.0292813 , 0.05286328, ..., -0.04731542,\n", | |
| " 0.01246116, -0.00287517],\n", | |
| " [ 0.00233229, -0.0251027 , -0.05082991, ..., 0.01251765,\n", | |
| " -0.00884996, 0.03986373]]],\n", | |
| " \n", | |
| " \n", | |
| " [[[ 0.00724147, -0.01087654, -0.07481851, ..., -0.05570233,\n", | |
| " 0.07029554, -0.02601417],\n", | |
| " [-0.03659012, 0.02939377, -0.07892591, ..., -0.07765114,\n", | |
| " 0.04854376, 0.02888123],\n", | |
| " [ 0.03412426, -0.05098508, 0.04696501, ..., 0.00880124,\n", | |
| " 0.07820014, -0.06088579],\n", | |
| " ...,\n", | |
| " [ 0.00686244, -0.01171609, 0.06585457, ..., 0.01540148,\n", | |
| " -0.00481877, 0.02059563],\n", | |
| " [ 0.02708753, -0.00750196, 0.0074841 , ..., -0.06940073,\n", | |
| " 0.0551931 , -0.02131268],\n", | |
| " [-0.01223614, -0.03775595, 0.05998208, ..., -0.008814 ,\n", | |
| " -0.01885742, -0.05709972]],\n", | |
| " \n", | |
| " [[ 0.06367517, -0.06966279, -0.07372197, ..., -0.0321547 ,\n", | |
| " -0.04803979, 0.07314426],\n", | |
| " [ 0.0584671 , -0.01935825, -0.00561881, ..., -0.08256429,\n", | |
| " 0.06678941, 0.0812806 ],\n", | |
| " [-0.0824258 , 0.02051204, -0.06814389, ..., 0.00935598,\n", | |
| " -0.0057089 , 0.02000233],\n", | |
| " ...,\n", | |
| " [-0.0173013 , 0.04066596, -0.0785988 , ..., -0.0453378 ,\n", | |
| " -0.02799306, 0.05372801],\n", | |
| " [ 0.02269711, 0.01104412, 0.07593591, ..., -0.04514911,\n", | |
| " -0.04072084, -0.01642481],\n", | |
| " [-0.04769991, 0.03051827, -0.00344616, ..., 0.06455965,\n", | |
| " -0.01706624, -0.05574594]],\n", | |
| " \n", | |
| " [[-0.02433026, 0.00793219, -0.0084214 , ..., -0.03408206,\n", | |
| " -0.06045115, 0.01816165],\n", | |
| " [-0.02427081, -0.02285944, 0.07714925, ..., -0.06572586,\n", | |
| " 0.03900927, 0.00862592],\n", | |
| " [-0.00245699, -0.05214681, -0.01053294, ..., 0.05302969,\n", | |
| " -0.07305664, 0.06348028],\n", | |
| " ...,\n", | |
| " [-0.00727127, 0.07075379, 0.00926721, ..., -0.04156522,\n", | |
| " 0.0662593 , 0.01811711],\n", | |
| " [-0.06543182, -0.04015915, -0.07905178, ..., -0.06430396,\n", | |
| " 0.06570569, -0.04891424],\n", | |
| " [-0.04466017, 0.02645779, -0.07221298, ..., 0.06090764,\n", | |
| " 0.07160272, -0.04879294]]]],\n", | |
| " shape=(3, 3, 32, 64), dtype=float32),\n", | |
| " array([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.,\n", | |
| " 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.], dtype=float32)]" | |
| ] | |
| }, | |
| "execution_count": 110, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "weights = layer.get_weights()\n", | |
| "print([w.shape for w in weights])\n", | |
| "weights" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Save and Load Weights" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 111, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "model.save_weights('/tmp/000.weights.h5')\n", | |
| "\n", | |
| "model.load_weights('/tmp/000.weights.h5')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Classical API\n", | |
| "\n", | |
| "- The classical API for training, evaluation, prediction is inspired by scikit-learn" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Training" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 112, | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Epoch 1/10\n", | |
| "\u001b[1m 28/469\u001b[0m \u001b[32m━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.4848 - loss: 1.5845" | |
| ] | |
| }, | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "I0000 00:00:1777791519.946525 887016 device_compiler.h:196] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n" | |
| ] | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "\u001b[1m469/469\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 23ms/step - accuracy: 0.9272 - loss: 0.2414 - val_accuracy: 0.9823 - val_loss: 0.0523\n", | |
| "Epoch 2/10\n", | |
| "\u001b[1m469/469\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 7ms/step - accuracy: 0.9757 - loss: 0.0849 - val_accuracy: 0.9866 - val_loss: 0.0395\n", | |
| "Epoch 3/10\n", | |
| "\u001b[1m469/469\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 7ms/step - accuracy: 0.9813 - loss: 0.0638 - val_accuracy: 0.9889 - val_loss: 0.0350\n", | |
| "Epoch 4/10\n", | |
| "\u001b[1m469/469\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - accuracy: 0.9847 - loss: 0.0507 - val_accuracy: 0.9893 - val_loss: 0.0328\n", | |
| "Epoch 5/10\n", | |
| "\u001b[1m469/469\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - accuracy: 0.9866 - loss: 0.0443 - val_accuracy: 0.9894 - val_loss: 0.0306\n", | |
| "Epoch 6/10\n", | |
| "\u001b[1m469/469\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 8ms/step - accuracy: 0.9874 - loss: 0.0390 - val_accuracy: 0.9896 - val_loss: 0.0317\n", | |
| "Epoch 7/10\n", | |
| "\u001b[1m469/469\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 7ms/step - accuracy: 0.9898 - loss: 0.0339 - val_accuracy: 0.9914 - val_loss: 0.0271\n", | |
| "Epoch 8/10\n", | |
| "\u001b[1m469/469\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - accuracy: 0.9905 - loss: 0.0305 - val_accuracy: 0.9921 - val_loss: 0.0276\n", | |
| "Epoch 9/10\n", | |
| "\u001b[1m469/469\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 7ms/step - accuracy: 0.9912 - loss: 0.0283 - val_accuracy: 0.9922 - val_loss: 0.0279\n", | |
| "Epoch 10/10\n", | |
| "\u001b[1m469/469\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 7ms/step - accuracy: 0.9915 - loss: 0.0262 - val_accuracy: 0.9914 - val_loss: 0.0324\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "from tensorflow.keras.optimizers import SGD, Adam\n", | |
| "from keras.callbacks import ModelCheckpoint\n", | |
| "from keras.losses import categorical_crossentropy\n", | |
| "\n", | |
| "optimizer = Adam(learning_rate=0.001)\n", | |
| "\n", | |
| "callbacks = [\n", | |
| " ModelCheckpoint('/tmp/weights_{epoch:03d}.keras')\n", | |
| "]\n", | |
| "\n", | |
| "model.compile(loss=categorical_crossentropy, optimizer=optimizer, metrics=['accuracy'])\n", | |
| "\n", | |
| "history = model.fit(x_train, y_train, batch_size=128, epochs=10, verbose=1,\n", | |
| " validation_data=(x_test, y_test), callbacks=callbacks)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 113, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:58 /tmp/weights_001.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:58 /tmp/weights_002.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:58 /tmp/weights_003.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:59 /tmp/weights_004.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:59 /tmp/weights_005.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:59 /tmp/weights_006.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:59 /tmp/weights_007.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:59 /tmp/weights_008.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:59 /tmp/weights_009.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:59 /tmp/weights_010.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:39 /tmp/weights-01.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14441176 Mai 3 08:37 /tmp/weights-01.weights.h5\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:39 /tmp/weights-02.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14441176 Mai 3 08:37 /tmp/weights-02.weights.h5\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:39 /tmp/weights-03.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14441176 Mai 3 08:37 /tmp/weights-03.weights.h5\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:39 /tmp/weights-04.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14441176 Mai 3 08:37 /tmp/weights-04.weights.h5\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:40 /tmp/weights-05.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14441176 Mai 3 08:37 /tmp/weights-05.weights.h5\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:40 /tmp/weights-06.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14441176 Mai 3 08:37 /tmp/weights-06.weights.h5\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:40 /tmp/weights-07.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14441176 Mai 3 08:37 /tmp/weights-07.weights.h5\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:40 /tmp/weights-08.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14441176 Mai 3 08:37 /tmp/weights-08.weights.h5\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:40 /tmp/weights-09.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14441176 Mai 3 08:37 /tmp/weights-09.weights.h5\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14444310 Mai 3 08:40 /tmp/weights-10.keras\n", | |
| "-rw-rw-r-- 1 mvoe mvoe 14441176 Mai 3 08:37 /tmp/weights-10.weights.h5\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "!ls -l /tmp/weights*" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Plot Training History" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 114, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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AACYqmPHjpo/f/5ZjbXZbFq0aFGj1gMAAIDG1ZD5H5oeoWMAiwkL1oUd4yVJy7dyiDUAAAAAAACaB0LHADe26irWhI4AAAAAAACBweVyye12m11GoyJ0DHBje3lCxzW7j6m4vNLkagAAODevvvqqWrduXWviddVVV+n222/Xrl27NHnyZHXv3l0xMTG68MIL9dlnn/nt83/44QeNHTtW4eHhSkhI0F133aWioiLv65mZmRo6dKgiIyMVGxurkSNHat++fZKk7777TmPGjFF0dLRiYmI0ePBgffPNN36rDQAAwIrOZv531VVXKSUlRVFRUec9/3v++efVr18/RUZGql27dvrv//5vn/meJK1cuVKXXnqpIiIiFBcXp/T0dB0/flyS5Ha79Yc//EEXXHCBwsPD1b59ez355JOSPHNFm82m/Px87742btwom82mvXv3SpLeeustxcbG6uOPP1bv3r0VGhqq/fv3a926dbrsssuUmJioVq1aafTo0dqwYYNPXfn5+frlL3+plJQUhYWFqW/fvvr3v/+t4uJixcTE6MMPP/QZv2jRIkVGRqqwsPCcf17+QOgY4DonRqpDQoQqXG59tfOo2eUAAJobw5Aqis25GcZZl3ndddcpLy9PK1as8G47duyYli5dqptuuklFRUWaOHGiFi1apPXr1+vyyy/XpEmTtH///vP+ERUXFys9PV1xcXFat26d/v73v+uzzz7TtGnTJEmVlZWaPHmyRo8ere+//16rV6/WXXfdJZvNJkm66aab1LZtW61bt07r16/XjBkzFBwcfN51AQAAnBMLzf+uuOIKZWRk6Ntvvz3v+Z/dbteLL76oTZs26e2339by5cv14IMPel/fuHGjxo0bp969e2v16tX66quvNGnSJLlcLknSzJkz9fTTT+uBBx7Qjz/+qIULFyolJaVBNZSUlOjpp5/W66+/rk2bNik5OVmFhYWaOnWqvvrqK3399dfq1q2brrjiCm9g6Ha7NXHiRK1cuVJ//etftXnzZs2bN08Oh0ORkZG64YYb9Oabb/p8zptvvqlrr71W0dHR5/Sz8pcgUz8d581ms2lsz2S9uXKvlm/JUXqfVLNLAgA0J84S6anW5nz2w4elkMizGhoXF6eJEydq4cKFGjdunCTpww8/VGJiosaMGSO73a5+/fqpoKBAMTExevzxx/XRRx/p448/9oaD52rhwoUqKyvTO++8o8hIT70vvfSSJk2apKefflrBwcE6ceKErrzySnXp0kWS1KtXL+/79+/frwceeEA9e/aUJHXr1u286gEAADgvZs7/Zhw866FnM/8bMGCAd/z5zv/uvfde7+OOHTvqiSee0K9+9Sv98Y9/lCQ988wzGjJkiPe5JPXp00eSVFhYqBdeeEEvvviifvaznykmJkbdunXTqFGjGlSD0+nUH//4R5++xo4d6zPm1VdfVWxsrD7//HNdeeWV+uyzz7R27Vpt2bJF3bt3lyR17tzZO/6OO+7QiBEjdOTIEaWlpSknJ0dLlizx61FB54qVjhZQfV7HFdty5Haf/bcKAAA0JzfddJP+8Y9/qLy8XJL07rvv6oYbbpDdbldRUZEeeOABDRs2TPHx8YqKitKWLVv8stJxy5YtGjBggDdwlKSRI0fK7XZr27Ztio+P16233qr09HRNmjRJL7zwgo4cOeIdO336dN1xxx0aP3685s2bp127dp13TQAAAC3BmeZ/999/v3r16qXY2Njznv999tlnGjdunNq0aaPo6GjdfPPNysvLU0lJiaSTKx3rsmXLFpWXl9f7+tkKCQlR//79fbZlZ2frzjvvVLdu3dSqVSvFxMSoqKjI2+fGjRvVtm1bb+B4qqFDh6pPnz56++23JUl//etf1aFDB11yySXnVas/sNLRAoZ2ildEiEM5heXadLhA/dq2MrskAEBzERzhWXFo1mc3wKRJk2QYhhYvXqwLL7xQX375pf7nf/5HknT//fdr2bJlmjNnjvdcPNdee60qKioao/Ja3nzzTf32t7/V0qVL9cEHH+iRRx7RsmXLdNFFF+mxxx7TjTfeqMWLF+s///mPZs+erffff18//elPm6Q2AAAAH2bO/xxhUtnZn0fwbOZ/zz77rLp27arw8PBznv/t3btXV155pX7961/rySefVHx8vL766iv94he/UEVFhSIiIhQeHl7v+0/3muQ5dFuSjBqHlzudzjr3U32KnmpTp05VXl6eXnjhBXXo0EGhoaEaPny4t88zfbbkWe348ssva8aMGXrzzTd122231focM7DS0QJCgxy6uFuiJK5iDQA4hc3mOcTZjFsDJzphYWG6+uqr9e677+q9995Tjx49dMEFF0jynNR76tSpuvLKK9WvXz+lpqZ6T8p9vnr16qXvvvtOxcXF3m0rV66U3W5Xjx49vNsGDRqkmTNnatWqVerbt68WLlzofa179+6677779Omnn+rqq6+udV4dAACAJmOh+d+tt96qn/70p+c9/1u/fr3cbreee+45XXTRRerevbsOH/YNZvv376+MjIw639+tWzeFh4fX+3pSUpIk+RwNs3HjxrOqbeXKlfrtb3+rK664Qn369FFoaKiOHj15zY7+/fvr4MGD2r59e737+PnPf659+/bpxRdf1ObNmzV16tSz+uzGRuhoEdWHWC/fmm1yJQAAnLubbrpJixcv1htvvKGbbrrJu71bt2766KOP9MMPP+i7777TjTfeWOtKh+fzmWFhYZo6dap+/PFHrVixQr/5zW908803KyUlRXv27NHMmTO1evVq7du3T59++ql27NihXr16qbS0VNOmTVNmZqb27dunlStXat26dT7nfAQAAED9Tjf/+7//+z9t3LjxvOd/Xbt2ldPp1P/+7/9q9+7d+stf/qIFCxb4jJk5c6bWrVun//7v/9b333+vrVu36pVXXtHRo0cVFhamhx56SDNmzND777+vXbt26euvv9af//xn7/7btWunxx57TDt27NDixYv13HPPnVVt3bp101/+8hdt2bJFa9as0U033eSzunH06NG65JJLdM0112jZsmXas2eP/vOf/2jp0qXeMXFxcbr66qv1wAMPaMKECWrbtu05/Zz8jdDRIsb08ISO3x08odzCcpOrAQDg3IwdO1bx8fHatm2bbrzxRu/2559/XnFxcUpPT9dVV12l9PR077fg5ysiIkKffPKJjh07pgsvvFDXXnutxo0bp5deesn7+tatW3XNNdeoe/fuuuuuu3T33Xfrl7/8pRwOh/Ly8nTLLbeoe/fu+tnPfqaJEydqzpw5fqkNAADA6s40/xsxYoQmTZp0XvO/AQMG6Pnnn9fTTz+tvn376t1339XcuXN9xnTv3l2ffvqpvvvuOw0dOlTDhw/XP//5TwUFec5M+Oijj2r69Ol66qmn1KdPH11//fXKyfEcbRocHKz33ntPW7duVf/+/fX000/riSeeOKva/vznP+v48eO64IILdPPNN+u3v/2tkpOTfcb84x//0IUXXqgpU6aod+/eevDBB71X1a5Wfaj47bfffk4/o8bAOR0tIjkmTP3atNIPh04oc1uOrhvSzuySAABoMLvdXutQF8lzhcHP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W26VhyTt2bNHWVlZPv9/2qpVKw0bNkyrV682sTKg5bDyfFRiThqorDwflVrWnJT5aGBqSXNSf85Hg/xdHHCu3G637r33Xo0cOVJ9+/Y1uxy/+eGHHzR8+HCVlZUpKipKH330kXr37m12WX7z/vvva8OGDQF7LoszGTZsmN566y316NFDR44c0Zw5c3TxxRfrxx9/VHR0tNnlnbfdu3frlVde0fTp0/Xwww9r3bp1+u1vf6uQkBBNnTrV7PL8btGiRcrPz9ett95qdil+M2PGDBUUFKhnz55yOBxyuVx68sknddNNN5ldml9ER0dr+PDhevzxx9WrVy+lpKTovffe0+rVq9W1a1ezy/O7rKwsSVJKSorP9pSUFO9rABqPVeejEnPSQGb1+ajUsuakzEcDU0uak/pzPkroiGbj7rvv1o8//mi5bwl69OihjRs36sSJE/rwww81depUff7555aY5B04cED33HOPli1bVusbH6uo+e1c//79NWzYMHXo0EF/+9vf9Itf/MLEyvzD7XZryJAheuqppyRJgwYN0o8//qgFCxZYboInSX/+8581ceJEtW7d2uxS/OZvf/ub3n33XS1cuFB9+vTRxo0bde+996p169aW+R3+5S9/0e233642bdrI4XDoggsu0JQpU7R+/XqzSwNgMVadj0rMSQOZ1eejUsuakzIfDVzMSRuOw6vRLEybNk3//ve/tWLFCrVt29bscvwqJCREXbt21eDBgzV37lwNGDBAL7zwgtll+cX69euVk5OjCy64QEFBQQoKCtLnn3+uF198UUFBQXK5XGaX6HexsbHq3r27du7caXYpfpGWllbrHxu9evWy3CE7krRv3z599tlnuuOOO8wuxa8eeOABzZgxQzfccIP69eunm2++Wffdd5/mzp1rdml+06VLF33++ecqKirSgQMHtHbtWjmdTnXu3Nns0vwuNTVVkpSdne2zPTs72/sagMZh5fmoxJzUSqw2H5VazpyU+WhgaylzUn/ORwkdYSrDMDRt2jR99NFHWr58uTp16mR2SY3O7XarvLzc7DL8Yty4cfrhhx+0ceNG723IkCG66aabtHHjRjkcDrNL9LuioiLt2rVLaWlpZpfiFyNHjtS2bdt8tm3fvl0dOnQwqaLG8+abbyo5OVk/+clPzC7Fr0pKSmS3+/7n3OFwyO12m1RR44mMjFRaWpqOHz+uTz75RFdddZXZJfldp06dlJqaqoyMDO+2goICrVmzxnLnXgOai5Y4H5WYkwYyq81HpZYzJ2U+ag1Wn5P6cz7K4dXNXFFRkc83WHv27NHGjRsVHx+v9u3bm1iZf9x9991auHCh/vnPfyo6Otp7foBWrVopPDzc5OrO38yZMzVx4kS1b99ehYWFWrhwoTIzM/XJJ5+YXZpfREdH1zrfUWRkpBISEixzHqT7779fkyZNUocOHXT48GHNnj1bDodDU6ZMMbs0v7jvvvs0YsQIPfXUU/rZz36mtWvX6tVXX9Wrr75qdml+5Xa79eabb2rq1KkKCrLWf/omTZqkJ598Uu3bt1efPn307bff6vnnn9ftt99udml+88knn8gwDPXo0UM7d+7UAw88oJ49e+q2224zu7Rzcqb/tt9777164okn1K1bN3Xq1EmPPvqoWrdurcmTJ5tXNFo05qOBjzlpYLP6fFRqGXNS5qOBz0pz0iabj/rj8tpoPCtWrDAk1bpNnTrV7NL8oq7eJBlvvvmm2aX5xe2332506NDBCAkJMZKSkoxx48YZn376qdllNarRo0cb99xzj9ll+M31119vpKWlGSEhIUabNm2M66+/3ti5c6fZZfnVv/71L6Nv375GaGio0bNnT+PVV181uyS/++STTwxJxrZt28wuxe8KCgqMe+65x2jfvr0RFhZmdO7c2fjd735nlJeXm12a33zwwQdG586djZCQECM1NdW4++67jfz8fLPLOmdn+m+72+02Hn30USMlJcUIDQ01xo0bZ8k/uwgczEcDH3PSwNYS5qOGYf05KfPRwGelOWlTzUdthmEYDYspAQAAAAAAAKB+nNMRAAAAAAAAgF8ROgIAAAAAAADwK0JHAAAAAAAAAH5F6AgAAAAAAADArwgdAQAAAAAAAPgVoSMAAAAAAAAAvyJ0BAAAAAAAAOBXhI4AAAAAAAAA/IrQEQAAAAAAAIBfEToCAAAAAAAA8CtCRwAAAAAAAAB+RegIAAAAAAAAwK/+P/6xv/jL35wFAAAAAElFTkSuQmCC", | |
| "text/plain": [ | |
| "<Figure size 1600x400 with 2 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "n = len(history.history['loss'])\n", | |
| "x = list(range(1, n+1))\n", | |
| "\n", | |
| "plt.figure(figsize=(16, 4))\n", | |
| "plt.subplot(121)\n", | |
| "plt.plot(x, history.history['loss'], label='loss')\n", | |
| "plt.plot(x, history.history['val_loss'], label='val_loss')\n", | |
| "plt.xlim(0, n); plt.ylim(0, None); plt.xticks(x); plt.grid(); plt.legend()\n", | |
| "plt.subplot(122)\n", | |
| "plt.plot(x, history.history['accuracy'], label='accuracy')\n", | |
| "plt.plot(x, history.history['val_accuracy'], label='val_accuracy')\n", | |
| "plt.xlim(0, n); plt.ylim(0, 1); plt.xticks(x); plt.grid(); plt.legend()\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Evaluate" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 115, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Test loss: 0.032394688576459885\n", | |
| "Test accuracy: 0.9914000034332275\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "score = model.evaluate(x_test, y_test, verbose=0)\n", | |
| "\n", | |
| "print('Test loss:', score[0])\n", | |
| "print('Test accuracy:', score[1])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Prediction" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 116, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 819ms/step\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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bd10002aMWOGbrnlFp99Pvfcc4qLi9OwYcOUn5+vsWPHql+/flq2bJkk6cUXX9Q777yjWbNmacKECapZs6YuueSSkBxfcXGxvv32W919992259q2bavPP/9chw8fVkJCglatWiVJuvzyy33WtW7dWnFxcVq1apX+53/+J+Ac7rnnHk2ePFndunXT73//e50+fVqLFy/W0qVLba91xqZNmzR79mz17t1bWVlZ2rNnj15//XV17NhRP/zwg9LT0yVJb7zxhgYPHqycnBw9+OCDKiws1Lfffqtly5aVDLTuu+8+zZgxQwMHDlSzZs104MABLVmyRGvWrNFll13m93GcOnVKH374odq3b6/MzMyA3wdEHuqf+g+EMUZ79uxR8+bNA34fEJnoAfQAuBf1T/2XZtWqVbrwwguVmJhoe98k6euvv1aDBg0Cfj8QWegB9ICzKSoq0qBBg/T73/9eF198ccDHXqryn+xWce644w4TFxdnli9fbnuuuLjYGGPMQw89ZCT5/Eb98OHDJisry2RmZpqioiJjzK+/KW7atKnPz3deeuklI8nnOjcjRozw+/TL3wr09Mt9+/YZSWbUqFG258aPH28kmbVr1xpjjMnNzTWVKlVy3E9KSorp27dvQLkaY8yXX35pJJnBgwfbnjvz/hpjP/2ysLCw5H09Y/Pmzcbr9focy80333zO0yGTkpJMbm5uwLn/pzlz5hhJ5rXXXiv3vhAZqH/qPxBTpkwxksybb74ZlP0h/OgB9AB/8DPM2ET9U/+lad68ubn22mtt8e+//95IMhMnTgx4n4g89AB6wNm8+uqrJikpyezdu9cYY9z3M8zi4mLNnj1bPXr0cJxsejweSdJnn32mtm3bqkOHDiXP1axZUwMGDNCWLVv0ww8/+Gx31113+fx856qrrpKkUu86EUrHjx+X9MvPCf5T1apVfdYcP37c9rOj3649sy4QM2fOlMfjKTnd9LfOvL9OvF6v4uJ++SgVFRXpwIEDqlmzpi666CKf0yZr1aqln376ScuXLy91X7Vq1dKyZcu0c+fOgPP/rffff19VqlTRbbfdVq79IDJQ/9R/INauXavc3FxlZ2erf//+5doXIgM9gB4A96L+qf+zOX78uF/vG6IXPYAecDYHDhzQk08+qeHDhyslJSWgbc8laoZl+/btU0FBwTlvAbp161ZddNFFtnjT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", | |
| "text/plain": [ | |
| "<Figure size 1600x200 with 5 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "x, y = x_test[:5], y_test[:5]\n", | |
| "\n", | |
| "y_pred = model.predict(x)\n", | |
| "\n", | |
| "c_pred = np.argmax(y_pred, axis=-1)\n", | |
| "\n", | |
| "plt.figure(figsize=(16, 2))\n", | |
| "for i, c in enumerate(c_pred):\n", | |
| " plt.subplot(151+i)\n", | |
| " plt.imshow(x[i,:,:,0], cmap='gray')\n", | |
| " plt.title('conf %.2f, class %i' % (y_pred[i,c], c), y=-0.4)\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Advanced Training Loop" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 117, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from keras.layers import Input, Dense, Conv2D, MaxPooling2D, Dropout, BatchNormalization, Flatten, Activation\n", | |
| "from keras.models import Model\n", | |
| "\n", | |
| "x = x_in = Input(input_shape)\n", | |
| "x = Conv2D(32, kernel_size=(3, 3))(x)\n", | |
| "x = Activation('relu')(x)\n", | |
| "x = Conv2D(64, (3, 3))(x)\n", | |
| "x = Activation('relu')(x)\n", | |
| "x = MaxPooling2D(pool_size=(2, 2))(x)\n", | |
| "x = Dropout(0.25)(x)\n", | |
| "x = Flatten()(x)\n", | |
| "x = Dense(128)(x)\n", | |
| "x = Activation('relu')(x)\n", | |
| "x = Dropout(0.5)(x)\n", | |
| "x = Dense(num_classes)(x)\n", | |
| "x = Activation('softmax')(x)\n", | |
| "\n", | |
| "model = Model(x_in, x)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "TensorFlow 2.x Eager API\n", | |
| "- TensorFlow 1.x was the compiler approach. The model has to be defined and compiled as computation graph before training. This was not always intuitive and often difficult to debug.\n", | |
| "- Eager Execution is the just-in-time compiler approach, as in PyTorch. Variables intuitively evaluate to their values, as they do in NumPy.\n", | |
| "- Graph execution is often faster and more optimized." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 118, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "ebb13f1e27d6499e8cea850649afdfbe", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "total: 0%| | 0/10 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "\n", | |
| "epoch 1/10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "4248e3440e594cb1ac5674b1a9375553", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "training: 0%| | 0/468 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "1fd40614b4fe413bb387ff95ab003875", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "validation: 0%| | 0/78 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loss 0.41534 accuracy 0.92516 val_loss 0.10293 val_accuracy 0.98077 \n", | |
| "0.5 minutes/epoch 14.86 iter/sec\n", | |
| "\n", | |
| "epoch 2/10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "fb1dfd1d33684869a6296ee5e294fee0", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "training: 0%| | 0/468 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "35f980fa54124bdcb8f1036b5270cfcd", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "validation: 0%| | 0/78 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loss 0.15367 accuracy 0.97416 val_loss 0.07810 val_accuracy 0.98678 \n", | |
| "0.5 minutes/epoch 17.05 iter/sec\n", | |
| "\n", | |
| "epoch 3/10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "101c99b7f956492c84dbaa0056dffb58", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "training: 0%| | 0/468 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "0b983f36358c431eb5c7488f9eb764c5", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "validation: 0%| | 0/78 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loss 0.11512 accuracy 0.98084 val_loss 0.06195 val_accuracy 0.98858 \n", | |
| "0.5 minutes/epoch 17.07 iter/sec\n", | |
| "\n", | |
| "epoch 4/10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "d82f7135ce4440878e440aea4fba1ae6", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "training: 0%| | 0/468 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "db8963a936284d5590962cd875df5da0", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "validation: 0%| | 0/78 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loss 0.09472 accuracy 0.98386 val_loss 0.06460 val_accuracy 0.98878 \n", | |
| "0.5 minutes/epoch 17.39 iter/sec\n", | |
| "\n", | |
| "epoch 5/10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "1502c4c21dec457281a5a055a2dd855e", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "training: 0%| | 0/468 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "250bc3f9abcf4c61b09c306a7dc4aec8", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "validation: 0%| | 0/78 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loss 0.08191 accuracy 0.98626 val_loss 0.05326 val_accuracy 0.99109 \n", | |
| "0.5 minutes/epoch 17.16 iter/sec\n", | |
| "\n", | |
| "epoch 6/10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "02929c90ff0f4f87b9a86ff9b05245d1", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "training: 0%| | 0/468 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "02d94cd841334208b1f2e77231df2566", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "validation: 0%| | 0/78 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loss 0.07154 accuracy 0.98798 val_loss 0.05916 val_accuracy 0.98998 \n", | |
| "0.5 minutes/epoch 17.11 iter/sec\n", | |
| "\n", | |
| "epoch 7/10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "adc3018d69b94e4b9c4798bc2a8a4f7e", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "training: 0%| | 0/468 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "49652db99dc34d4e8304a98d42a85d88", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "validation: 0%| | 0/78 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loss 0.06631 accuracy 0.98863 val_loss 0.05566 val_accuracy 0.99199 \n", | |
| "0.5 minutes/epoch 17.44 iter/sec\n", | |
| "\n", | |
| "epoch 8/10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "721e194715a646ddace22bfe5ac809dc", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "training: 0%| | 0/468 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "ba52f6c86ab5403e88d9bf47c716f4cb", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "validation: 0%| | 0/78 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loss 0.05517 accuracy 0.99018 val_loss 0.05751 val_accuracy 0.99099 \n", | |
| "0.5 minutes/epoch 17.20 iter/sec\n", | |
| "\n", | |
| "epoch 9/10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "1b68699557294696b2a50d3c6dea420a", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "training: 0%| | 0/468 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "e29ab215c9544c78b4b123ca1824eb19", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "validation: 0%| | 0/78 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loss 0.05203 accuracy 0.99150 val_loss 0.05132 val_accuracy 0.99229 \n", | |
| "0.5 minutes/epoch 16.88 iter/sec\n", | |
| "\n", | |
| "epoch 10/10\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "b6813516b08a4801a4b8eb2313abbb39", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "training: 0%| | 0/468 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "df3b8e8a986e45f589ac09c433023f37", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "validation: 0%| | 0/78 [00:00<?, ?it/s]" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loss 0.04787 accuracy 0.99115 val_loss 0.06106 val_accuracy 0.99119 \n", | |
| "0.5 minutes/epoch 17.15 iter/sec\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "from tensorflow.keras.optimizers import SGD, Adam\n", | |
| "from keras.metrics import Mean\n", | |
| "from tensorflow.keras import backend as K\n", | |
| "\n", | |
| "\n", | |
| "def generator(x, y, batch_size):\n", | |
| " # loads the data batchwise\n", | |
| " num_batches = x.shape[0] // batch_size\n", | |
| " num_samples = num_batches * batch_size\n", | |
| " \n", | |
| " indices = np.arange(num_samples)\n", | |
| " \n", | |
| " while True:\n", | |
| " for i in range(num_batches):\n", | |
| " idxs = indices[i*batch_size:(i+1)*batch_size]\n", | |
| " batch = tf.convert_to_tensor(x[idxs], dtype='float32'), tf.convert_to_tensor(y[idxs], dtype='float32')\n", | |
| " yield batch\n", | |
| " np.random.shuffle(indices) # randomize sample order\n", | |
| "\n", | |
| "\n", | |
| "@tf.function # indicates TensorFlow to compile the function as graph\n", | |
| "def calc_metrics(y_true, y_pred):\n", | |
| " # shape y: (batch_size, num_classes)\n", | |
| " \n", | |
| " eps = K.epsilon()\n", | |
| " input_shape = K.shape(y_true)\n", | |
| " num_samples = input_shape[0]\n", | |
| " \n", | |
| " # categorical crossentropy loss for classification\n", | |
| " y_pred = K.clip(y_pred, eps, 1-eps)\n", | |
| " loss = - y_true*K.log(y_pred) - (1-y_true)*K.log(1-y_pred)\n", | |
| " loss = K.sum(loss, axis=-1)\n", | |
| " # equivalent to\n", | |
| " #loss = categorical_crossentropy(y_true, y_pred)\n", | |
| " \n", | |
| " loss = tf.reduce_mean(loss)\n", | |
| " \n", | |
| " # true and predicted class\n", | |
| " c_true = tf.reshape(tf.argmax(y_true, axis=-1), shape=(-1,))\n", | |
| " c_pred = tf.reshape(tf.argmax(y_pred, axis=-1), shape=(-1,))\n", | |
| " \n", | |
| " # count correct classifications\n", | |
| " TP = tf.reduce_sum(tf.cast(tf.equal(c_true, c_pred), 'float32'))\n", | |
| " \n", | |
| " accuracy = TP / tf.cast(num_samples, 'float32')\n", | |
| " \n", | |
| " return eval('{'+' '.join(['\"'+n+'\": '+n+',' for n in metric_names])+'}')\n", | |
| "\n", | |
| "\n", | |
| "batch_size = 128\n", | |
| "epochs = 10\n", | |
| "\n", | |
| "optimizer = Adam(learning_rate=0.001)\n", | |
| "\n", | |
| "steps_per_epoch = x_train.shape[0] // batch_size\n", | |
| "validation_steps = x_test.shape[0] // batch_size\n", | |
| "\n", | |
| "iterator = generator(x_train, y_train, batch_size)\n", | |
| "iterator_val = generator(x_test, y_test, batch_size)\n", | |
| "\n", | |
| "t0 = time.time()\n", | |
| "iteration = 0\n", | |
| "metric_names = ['loss', 'accuracy',]\n", | |
| "history = {n: [] for n in metric_names}\n", | |
| "history.update({'val_'+n: [] for n in metric_names})\n", | |
| "\n", | |
| "# taining loop\n", | |
| "for epoch in tqdm(range(1, epochs+1), 'total', leave=False):\n", | |
| " print('\\nepoch %i/%i' % (epoch, epochs))\n", | |
| " \n", | |
| " t1 = time.time()\n", | |
| " metrics = {n: Mean() for n in metric_names}\n", | |
| " \n", | |
| " for i in tqdm(range(steps_per_epoch), 'training', leave=False):\n", | |
| " iteration += 1\n", | |
| " \n", | |
| " # training step\n", | |
| " x, y_true = next(iterator)\n", | |
| " #s = slice(i*batch_size, (i+1)*batch_size)\n", | |
| " #x, y_true = x_train[s], y_train[s]\n", | |
| " \n", | |
| " with tf.GradientTape() as tape:\n", | |
| " y_pred = model(x, training=True)\n", | |
| " metric_values = calc_metrics(y_true, y_pred)\n", | |
| " loss = metric_values['loss']\n", | |
| "\n", | |
| " gradients = tape.gradient(loss, model.trainable_variables)\n", | |
| " optimizer.apply_gradients(zip(gradients, model.trainable_variables))\n", | |
| " \n", | |
| " for n, v in metric_values.items():\n", | |
| " metrics[n].update_state(v)\n", | |
| " \n", | |
| " for n, m in metrics.items(): \n", | |
| " history[n].append(float(m.result()))\n", | |
| " \n", | |
| " t2 = time.time()\n", | |
| " metrics = {n: Mean() for n in metric_names}\n", | |
| " \n", | |
| " for i in tqdm(range(validation_steps), 'validation', leave=False):\n", | |
| " # validation step\n", | |
| " x, y_true = next(iterator_val)\n", | |
| " #s = slice(i*batch_size, (i+1)*batch_size)\n", | |
| " #x, y_true = x_test[s], y_test[s]\n", | |
| " \n", | |
| " y_pred = model(x, training=False)\n", | |
| " metric_values = calc_metrics(y_true, y_pred)\n", | |
| " \n", | |
| " for n, v in metric_values.items():\n", | |
| " metrics[n].update_state(v)\n", | |
| " \n", | |
| " for n, m in metrics.items():\n", | |
| " history['val_'+n].append(float(m.result()))\n", | |
| " \n", | |
| " t3 = time.time()\n", | |
| " for n, v in history.items():\n", | |
| " print('%s %5.5f ' % (n, v[-1]), end='')\n", | |
| " print('\\n%.1f minutes/epoch %.2f iter/sec' % ((t3-t1)/60, steps_per_epoch/(t2-t1)))\n", | |
| " \n", | |
| " #model.save_weights('weights_%03i.h5' % (epoch,))\n", | |
| " #pd.DataFrame.from_dict(history).to_csv('history.csv', index=False)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 119, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAABR0AAAFlCAYAAABmwk9VAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAiSxJREFUeJzs3Xl4U2XaP/DvOUmaNN33BQotpeyUKktlE5BChZEBlxlABpBRHJfOiH1HpS4gihZQ+eHCyIiDu8KM7wzjK1golapgBQQrW9nKUpY23fc2SZPz+yNt2tACbUmb5vT7ua5zJXnOc07uuyl6cvc8zyNIkiSBiIiIiIiIiIiIyE5ERwdARERERERERERE8sKiIxEREREREREREdkVi45ERERERERERERkVyw6EhERERERERERkV2x6EhERERERERERER2xaIjERERERERERER2RWLjkRERERERERERGRXLDoSERERERERERGRXbHoSERERERERERERHbFoiMRERERERERERHZFYuORERERCQ733//PWbMmIHQ0FAIgoCtW7fe8Jj09HTceuutUKvV6Nu3Lz788MMOj5OIiIhIrlh0JCIiIiLZqaqqwrBhw7B+/fpW9T937hx+85vfYNKkScjMzMSSJUvw0EMPYceOHR0cKREREZE8CZIkSY4OgoiIiIioowiCgP/85z+YNWvWNfs888wz2LZtG44ePWptmzNnDkpLS5GSktIJURIRERHJi9LRAdiD2WzGlStX4OHhAUEQHB0OERERUZtJkoSKigqEhoZCFDkYpbNlZGQgLi7Opi0+Ph5Lliy55jF6vR56vd762mw2o7i4GH5+frwmJSIiIqdj7+tRWRQdr1y5grCwMEeHQURERHTTLl68iJ49ezo6jG4nLy8PQUFBNm1BQUEoLy9HTU0NXF1dmx2TnJyMFStWdFaIRERERJ3CXtejsig6enh4ALD8UDw9PR0cTccwGo3YuXMnpk6dCpVK5ehw7E7u+QHyz5H5OT+558j8nJ/ccywuLkZERIT1uoa6vqSkJCQmJlpfl5WVoVevXjh37pwsP0ej0Yjdu3dj0qRJsvw3CMg/R+bn5CQzjPpapH/3HSZOnASVixqQ2V3VDvsMJbNlM5sAyVT/KNm2SeYmjw3tTR4lEwTrcU32wQSYLfvrjHU4cjgTQ6OHQalU1n9+guVR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e/di0qRJ6Nev33Xv0uwO2nTF7uLiguHDhyMtLc3aZjabkZaWhtGjRzfrP2DAABw5cgSZmZnW7be//S0mTZqEzMxMhIWFISIiAsHBwTbnLC8vx759+1o8JwGjInzhoVGiqMqAzIuljg6HiIiIiIiIiIhgmWtSkiScPHkSQ4cOdXQ4DtXm4dWJiYlYuHAhRowYgVGjRmHdunWoqqqyrma9YMEC9OjRA8nJydBoNBgyxHb4r7e3NwDYtC9ZsgQrV65EVFQUIiIi8MILLyA0NBSzZs1qf2YyplKImNAvAF8fzsWuLB2G9/ZxdEhERERERERERERWbS46zp49GwUFBVi2bBny8vIQExODlJQU60IwOTk5bR7y9PTTT6OqqgoPP/wwSktLMW7cOKSkpMhuLip7mjIoCF8fzkValg7P3DnA0eEQERERERERERFZtWshmYSEBCQkJLS4Lz09/brHfvjhh83aBEHASy+9hJdeeqk94XRLE/sFQiEKOKWrxIWiKvT2c3N0SERERERERERERADaOKcjdR1eWhVGhluGVe/KyndwNERERERERERERI1YdHRicQMtQ9rTsnQ36ElERERERERERNR5WHR0YlMGWYqO+84Vo6za6OBoiIiIiIiIiIiILFh0dGK9/dzQN9AdJrOE9FMcYk1ERN1beHg41q1b16q+giBg69atHRoPEREREXWstlz/Uedj0dHJNQ6xZtGRiIiIiIiIiIi6BhYdndyUQYEAgN0n82E0mR0cDRERERERERER3YjJZILZLO86DouOTi4mzAe+bi6oqK3DgXPFjg6HiIioXd577z2EhoY2u/CaOXMm/vjHPyI7OxuzZs1Cv3794OnpiZEjR2LXrl12e/8jR47gjjvugKurK/z8/PDwww+jsrLSuj89PR2jRo2Cm5sbvL29MXbsWFy4cAEA8Ouvv2LSpEnw8PCAp6cnhg8fjp9//tlusRERERHJUWuu/2bOnImgoCC4u7vf9PXf2rVrMXToULi5uSEsLAyPPfaYzfUeAOzduxcTJ06EVquFj48P4uPjUVJSAgAwm8147bXXcOutt8LV1RW9evXCK6+8AsByrSgIAkpLS63nyszMhCAIOH/+PADgww8/hLe3N7766isMGjQIarUaOTk5OHDgAKZMmQJ/f394eXlhwoQJOHTokE1cpaWl+NOf/oSgoCBoNBoMGTIEX3/9NaqqquDp6Ykvv/zSpv/WrVvh5uaGioqKdv+87IFFRyenEAXcMcByt+MuDrEmIqKrSRJgqHLMJkmtDvN3v/sdioqKsHv3bmtbcXExUlJSMG/ePFRWVmLatGnYunUrDh48iDvvvBMzZsxATk7OTf+IqqqqEB8fDx8fHxw4cAD/+te/sGvXLiQkJAAA6urqMGvWLEyYMAGHDx9GRkYGHn74YQiCAACYN28eevbsiQMHDuDgwYNYunQpVCrVTcdFRERE1C4yuv6bPn060tLS8Msvv9z09Z8oinjrrbdw7NgxfPTRR/j222/x9NNPW/dnZmZi8uTJGDRoEDIyMrBnzx7MmDEDJpMJAJCUlITVq1fjqaeewtGjR/H5558jKCioTTFUV1dj9erVeP/993Hs2DEEBgaioqICCxcuxJ49e/DTTz8hKioK06dPtxYMzWYzpk2bhr179+LTTz/F8ePHsWrVKigUCri5uWHOnDn44IMPbN7ngw8+wH333QcPD492/azsRenQdye7iBsYhC8PXsKuLB1euGug9UsQERERjNXAq6GOee9nrwAubq3q6uPjg2nTpuHzzz/H5MmTAQBffvkl/P39MWnSJIiiiKFDh6K8vByenp54+eWX8Z///AdfffWVtTjYXp9//jlqa2vx8ccfw83NEu8777yDGTNmYPXq1VCpVCgrK8Ndd92FyMhIAMDAgQOtx+fk5OCpp57CgAEDAABRUVE3FQ8RERHRTXHk9d/SS63u2prrv2HDhln73+z135IlS6zPw8PDsXLlSjzyyCP429/+BgBYs2YNRowYYX0NAIMHDwYAVFRU4M0338Rbb72F3//+9/D09ERUVBTGjRvXphiMRiP+9re/2eR1xx132PR577334O3tje+++w533XUXdu3ahf379yMrKwv9+vUDAPTp08fa/6GHHsKYMWOQm5uLkJAQ5OfnY/v27XYdFdRevNNRBsZH+cNFISKnuBpn8itvfAAREVEXNG/ePPzv//4v9Ho9AOCzzz7DnDlzIIoiKisr8dRTTyE2Nha+vr5wd3dHVlaWXe50zMrKwrBhw6wFRwAYO3YszGYzTp48CV9fXzzwwAOIj4/HjBkz8OabbyI3N9faNzExEQ899BDi4uKwatUqZGdn33RMRERERN3Bja7//vrXv2LgwIHw9va+6eu/Xbt2YfLkyejRowc8PDwwf/58FBUVobq6GkDjnY4tycrKgl6vv+b+1nJxcUF0dLRNm06nw+LFixEVFQUvLy94enqisrLSmmdmZiZ69uxpLThebdSoURg8eDA++ugjAMCnn36K3r174/bbb7+pWO2BdzrKgJtaiTF9/ZB+sgCpWTpEBTn29lkiIupCVFrLHYeOeu82mDFjBiRJwrZt2zBy5Ej88MMP+H//7/8BAP76178iNTUVK1assM7Fc99998FgMHRE5M188MEH+Mtf/oKUlBRs2bIFzz//PFJTU3HbbbfhxRdfxP33349t27bhm2++wfLly7F582bcfffdnRIbERERkQ1HXv8pNEBt6+cRbM313+uvv46+ffvC1dW13dd/58+fx1133YVHH30Ur7zyCnx9fbFnzx48+OCDMBgM0Gq1cHV1vebx19sHWIZuA4DUZHi50Whs8TxXj05duHAhioqK8Oabb6J3795Qq9UYPXq0Nc8bvTdgudtx/fr1WLp0KT744AMsWrSoS4yC5Z2OMhE30DKPwK7jOgdHQkREXYogWIY4O2Jr44WORqPBPffcg88++wxffPEF+vfvj1tvvRWAZVLvhQsX4q677sLQoUMRHBxsnZT7Zg0cOBC//vorqqqqrG179+6FKIro37+/te2WW25BUlISfvzxRwwZMgSff/65dV+/fv3w5JNPYufOnbjnnnuazatDRERE1GlkdP33wAMP4O67777p67+DBw/CbDbjjTfewG233YZ+/frhyhXbwmx0dDTS0tJaPD4qKgqurq7X3B8QEAAANqNhMjMzWxXb3r178Ze//AXTp0/H4MGDoVarUVhYaBPXpUuXcOrUqWue4w9/+AMuXLiAt956C8ePH8fChQtb9d4djUVHmZg80LKYzC8XS1FYqXdwNERERO0zb948bNu2DZs2bcK8efOs7VFRUfjPf/6DI0eO4Ndff8X999/fbKXDm3lPjUaDhQsX4ujRo9i9ezf+/Oc/Y/78+QgKCsK5c+eQlJSEjIwMXLhwATt37sTp06cxcOBA1NTUICEhAenp6bhw4QL27t2LAwcO2Mz5SERERETXdr3rv3//+9/IzMy86eu/vn37wmg04u2338bZs2fxySefYMOGDTZ9kpKScODAATz22GM4fPgwTpw4gXfffReFhYXQaDR45plnsHTpUmzevBnZ2dn46aef8I9//MN6/rCwMLz44os4ffo0tm3bhjfeeKNVsUVFReGTTz5BVlYW9u3bh3nz5tnc3ThhwgTcfvvtuPfee5Gamopz587hm2++QUpKirWPj48P7rnnHjz11FOYOnUqevbs2a6fk72x6CgTIV6uGNLDE5IEfHuCq1gTEZFzuuOOO+Dr64uTJ0/i/vvvt7avXbsWPj4+iI+Px8yZMxEfH2/9K/jN0mq12LFjB4qLizFy5Ejcd999mDx5Mt555x3r/hMnTuDee+9Fv3798PDDD+Pxxx/Hn/70JygUChQVFWHBggXo168ffv/732PatGlYsWKFXWIjIiIikrsbXf+NGTMGM2bMuKnrv2HDhmHt2rVYvXo1hgwZgs8++wzJyck2ffr164edO3fi119/xahRozB69Gj897//hVJpmZnwhRdeQGJiIl599VUMHjwYs2fPRn6+pf6iUqnwxRdf4MSJE4iOjsbq1auxcuXKVsX2j3/8AyUlJbj11lsxf/58/OUvf0FgYKBNn//93//FyJEjMXfuXAwaNAhPP/20dVXtBg1Dxf/4xz+262fUETino4xMHhCEo5fLseu4Dr8fEebocIiIiNpMFMVmQ10AywqDu3btsq5eLYoiHn/8cZs+bRlu03S+HQAYOnQovv322xb7BgUF4T//+U+L+1xcXPDFF1+0+n2JiIiIyNb1rv+uvj67meu/J598Ek8++aRN2/z5821eT5gwAXv37r1mnM8++ywSEhKs16NNjR07FocPH7Zpa3rN+cADD+CBBx5odt5bbrkFBw4csGm77777bF77+vpi06ZNLSdW7/Lly/Dz88PMmTOv268z8U5HGZkyyDKv4w+nC1FrNN2gNxERERERERERObPq6mpkZ2dj1apV+NOf/gQXFxdHh2TFoqOMDA71RLCnBjVGEzKyixwdDhERkUN89tlncHd3b3EbPHiwo8MjIiIiIjvrztd/a9aswYABAxAcHIykpCRHh2ODw6tlRBAETB4YiM/25SA1S4dJAwJvfBAREZHM/Pa3v0VsbGyL+1QqVSdHQ0REREQdrTtf/7344ot48cUXHR1Gi1h0lJm4QUH4bF8O0rJ0kGYNgdDG5eqJiIicnYeHBzw8PBwdBhERERF1El7/dU0cXi0zo/v4QeuigK5cj6OXyx0dDhERERERERERdUMsOsqMRqXA+Ch/AEBqls7B0RARUWdr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jNQ2nhoVYvv4Yu+ZIqRl6fDQ+D6ODomIiIioQ7VnSqAXXngB8+fPx0MPPQTAMs94VVUVHn74YTz33HM217cNuuvoG7nnB8g/R+bn/OSeI/NzfnLPUa752Tundi0kk5CQcM3h1Onp6TavV65ciZUrV17zXK6urtixY0d7wqBWmjwgCHvPFCH1OIuOREREJH/tmRKourq6WWFRoVAAACRJ6tB4iYiIiOSo+Z9sSXbiBlruQv35QglKqw0OjoaIiIio4yUmJmLjxo346KOPkJWVhUcffbTZlEBNF5qZMWMG3n33XWzevBnnzp1DamoqXnjhBcyYMcNafCQiIiKi1mvXnY7kXHr5adE/yAMndRVIP1mAWbf0cHRIRERERB2qrVMCPf/88xAEAc8//zwuX76MgIAAzJgxA6+88oqjUiAiIiJyaiw6dhOTBwbipK4Cu7J0LDoSERFRt9CWKYGUSiWWL1+O5cuXd0JkRERERPLH4dXdRNwgy1/1vztZAEOd2cHREBERERERERGRnLHo2E3E9PSGv7sLKvR12H+u2NHhEBERERERERGRjLHo2E2IooA7BgQCAHZl6RwcDRERERERERERyRmLjt1IwyrWu7J0kCTJwdEQEREREREREZFcsejYjYyL8odaKeJSSQ1O6iocHQ4REREREREREckUi47diNZFibF9/QEAaVn5Do6GiIiIiIiIiIjkikXHbqZhiHXqcc7rSEREREREREREHYNFx25m8kDLYjKZF0uRX1Hr4GiIiIiIiIiIiEiOWHTsZoI8NYju6QUA2H2CQ6yJiIiIiIiIiMj+WHTshhqHWLPoSERERERERERE9seiYzfUUHTcc6YAtUaTg6MhIiIiIiIiIiK5YdGxGxoY4oFQLw1qjWbsPVPo6HCIiIiIiIiIiEhmWHTshgRBQNwgy92Ou7K4ijUREREREREREdkXi47dVMMQ611Z+TCbJQdHQ0REREREREREcsKiYzcV28cXbi4KFFToceRymaPDISIiIiIiIiIiGWHRsZtSKxWY0D8AAIdYExERERERERGRfbHo2I01HWJNRERERERERERkLyw6dmOT+gdCFICs3HJcKql2dDhERERERERERCQTLDp2Yz5uLhjR2xcAkMa7HYmIiIiIiIiIyE5YdOzmJg8MBMB5HYmIiIiIiIiIyH5YdOzm4gZZ5nX86WwRKmqNDo6GiIiIiIiIiIjkgEXHbi4ywB19/N1gNEn4/lSho8MhIiIiIiIiIiIZaFfRcf369QgPD4dGo0FsbCz2799/zb7//ve/MWLECHh7e8PNzQ0xMTH45JNPbPpIkoRly5YhJCQErq6uiIuLw+nTp9sTGrVDwxDrNA6xJiIiIiIiIiIiO2hz0XHLli1ITEzE8uXLcejQIQwbNgzx8fHIz295IRJfX18899xzyMjIwOHDh7Fo0SIsWrQIO3bssPZZs2YN3nrrLWzYsAH79u2Dm5sb4uPjUVtb2/7MqNXiBlqGWH97Mh91JrODoyEiIiIiIiIiImfX5qLj2rVrsXjxYixatAiDBg3Chg0boNVqsWnTphb7T5w4EXfffTcGDhyIyMhIPPHEE4iOjsaePXsAWO5yXLduHZ5//nnMnDkT0dHR+Pjjj3HlyhVs3br1ppKj1hne2wfeWhVKq404eKHE0eEQEREREREREZGTU7als8FgwMGDB5GUlGRtE0URcXFxyMjIuOHxkiTh22+/xcmTJ7F69WoAwLlz55CXl4e4uDhrPy8vL8TGxiIjIwNz5sxpdh69Xg+9Xm99XV5eDgAwGo0wGuW5GEpDXh2V34Qof/z311zsPJaLW8M8O+Q9rqej8+sK5J4j83N+cs+R+Tk/ueco17yIiIiIqHtqU9GxsLAQJpMJQUFBNu1BQUE4ceLENY8rKytDjx49oNfroVAo8Le//Q1TpkwBAOTl5VnPcfU5G/ZdLTk5GStWrGjWvnPnTmi12rak5HRSU1M75Lw+NQIABf7v4HlEm7M75D1ao6Py60rkniPzc35yz5H5OT+55lhdXe3oEIiIiIiI7KZNRcf28vDwQGZmJiorK5GWlobExET06dMHEydObNf5kpKSkJiYaH1dXl6OsLAwTJ06FZ6enX+XXmcwGo1ITU3FlClToFKp7H7+8bV1+GzVbuTXAgNGTkCfADe7v8f1dHR+XYHcc2R+zk/uOTI/5yf3HIuKihwdAhERERGR3bSp6Ojv7w+FQgGdznaVY51Oh+Dg4GseJ4oi+vbtCwCIiYlBVlYWkpOTMXHiROtxOp0OISEhNueMiYlp8XxqtRpqtbpZu0qlkuWXkKY6KkdflQq39fHDD6cL8d2ZIvQP9bb7e7QGP0Pnx/ycn9xzZH7OT645yjEnIiIiIuq+2rSQjIuLC4YPH460tDRrm9lsRlpaGkaPHt3q85jNZuucjBEREQgODrY5Z3l5Ofbt29emc9LNa1jFetfxllciJyIiIiIiIiIiao02D69OTEzEwoULMWLECIwaNQrr1q1DVVUVFi1aBABYsGABevTogeTkZACW+RdHjBiByMhI6PV6bN++HZ988gneffddAIAgCFiyZAlWrlyJqKgoRERE4IUXXkBoaChmzZplv0zphiYPDMTyr47h5wvFKKkywMfNxdEhERERERERERGRE2pz0XH27NkoKCjAsmXLkJeXh5iYGKSkpFgXgsnJyYEoNt5AWVVVhcceewyXLl2Cq6srBgwYgE8//RSzZ8+29nn66adRVVWFhx9+GKWlpRg3bhxSUlKg0WjskCK1Vk8fLQYEe+BEXgV2n8zHPbf2dHRIRERERERERETkhNq1kExCQgISEhJa3Jeenm7zeuXKlVi5cuV1zycIAl566SW89NJL7QmH7GjKoCCcyKvAriwdi45ERERERERERNQubZrTkeSvYV7H708VQl9ncnA0RERERERERETkjFh0JBtDe3ghwEONSn0d9p0tdnQ4RERERERERETkhFh0JBuiKCBuYCAAYFeWzsHREBERERERERGRM2LRkZppGGKdlpUPSZIcHA0RERERERERETkbFh2pmbF9/aFRibhcWoOs3ApHh0NERERERERERE6GRUdqRqNSYFzfAAAcYk1ERERERERERG3HoiO1qGFexzQWHYmIiIiIiIiIqI1YdKQW3VFfdPz1Uhl05bUOjoaIiIiIiIiIiJwJi47UokAPDWLCvAFYFpQhIiIiIiIiIiJqLRYd6Zo4xJqIiIiIiIiIiNqDRUe6prhBQQCAPWcKUW2oc3A0RERERERERETkLFh0pGvqH+SBnj6u0NeZsed0oaPDISIiIiIiIiIiJ8GiI12TIAiIG2i525HzOhIRERERERERUWux6EjXZS06nsiH2Sw5OBoiIiIiIiIiInIGLDrSdY2K8IWHWonCSj1+vVTq6HCIiIiIiIiIiMgJsOhI1+WiFHF7/wAAwC6uYk1ERERERERERK3AoiPd0JT6Ida7jnNeRyIiIiIiIiIiujEWHemGJvYPgEIUcFJXgYvF1Y4Oh4iIiKhV1q9fj/DwcGg0GsTGxmL//v3X7V9aWorHH38cISEhUKvV6NevH7Zv395J0RIRERHJC4uO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55GWloaZM2eib9++iI+Pt1OaZG+TB1rm9dx1XHeDnkRERERERERE1N20ueg4e/ZsvP7661i2bBliYmKQmZmJlJQU6+IyOTk5yM3NtfZ/9913YTAYcN999yEkJMS6vf766wAAhUKBw4cP47e//S369euHBx98EMOHD8cPP/zQ4t2M1DVMqS86fn+6ALVGk4OjISIiIiIiIiKirqRdC8kkJCRcczh1enq6zevz589f91yurq7YsWNHe8IgBxrSwxNBnmroyvX46WwRJvYPdHRIRERERERERETURbT5TkciABAEoXGIdRaHWBMRERERERERUSMWHandGoZYp2XlQ5IkB0dDRERERERERERdBYuO1G6jI/3gqlIgt6wWx66UOzocIiIiIiIiIiLqIlh0pHbTqBQYH+UPgEOsiYiIiIiIiIioEYuOdFPiBnFeRyIiIiIiIiIissWiI92UOwYEQhCAo5fLkVtW4+hwiIiIiIiIiIioC2DRkW6Kv7sat4R5A7AsKENERERERERERMSiI900DrEmIiIiIiIiIqKmWHSkmzZloKXo+GN2Ear0dQ6OhoiIiIiIiIiIHI1FR7ppfQPd0ctXC0OdGT+cLnR0OERERERERERE5GAsOtJNEwQBcfV3O6ZxiDURERERERERUbfHoiPZRdzAQADAtyfyYTJLDo6GiIiIiIiIiIgciUVHsouREb7w0ChRVGVA5sUSR4dDREREREREREQOxKIj2YVKIWJSf8vdjruy8h0cDRERERERERERORKLjmQ3k+uHWO86znkdiYiIiIiIiIi6MxYdyW4m9guEUhRwOr8SF4qqHB0OERERERERERE5CIuOZDdeWhVGRfgC4BBrIiIiIiIiIqLujEVHsqvJA4MAcIg1EREREREREVF3xqIj2VVc/byO+88Xo6za6OBoiIiIiIiIiIjIEVh0JLvq7eeGfkHuMJklpJ/iEGsiIiIiIiIiou6IRUeyO+sQa87rSERERERERETULbHoSHYXV190TD+ZD6PJ7OBoiIiIiIiIiIios7HoSHYXE+YNf3cXVNTW4cC5YkeHQ0REREREREREnYxFR7I7hShgUn/LgjKpWVzFmoiIiIiIiIiou2HRkTpE3KCGeR11kCTJwdEQEREREREREVFnalfRcf369QgPD4dGo0FsbCz2799/zb4bN27E+PHj4ePjAx8f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", | |
| "text/plain": [ | |
| "<Figure size 1600x400 with 2 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "n = len(history['loss'])\n", | |
| "x = list(range(1, n+1))\n", | |
| "\n", | |
| "plt.figure(figsize=(16, 4))\n", | |
| "plt.subplot(121)\n", | |
| "plt.plot(x, history['loss'], label='loss')\n", | |
| "plt.plot(x, history['val_loss'], label='val_loss')\n", | |
| "plt.xlim(0, n); plt.ylim(0, None); plt.xticks(x); plt.grid(); plt.legend()\n", | |
| "plt.subplot(122)\n", | |
| "plt.plot(x, history['accuracy'], label='accuracy')\n", | |
| "plt.plot(x, history['val_accuracy'], label='val_accuracy')\n", | |
| "plt.xlim(0, n); plt.ylim(0, 1); plt.xticks(x); plt.grid(); plt.legend()\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.12.3" | |
| }, | |
| "toc": { | |
| "base_numbering": 1, | |
| "nav_menu": {}, | |
| "number_sections": true, | |
| "sideBar": true, | |
| "skip_h1_title": false, | |
| "title_cell": "Table of Contents", | |
| "title_sidebar": "Contents", | |
| "toc_cell": false, | |
| "toc_position": { | |
| "height": "calc(100% - 180px)", | |
| "left": "10px", | |
| "top": "150px", | |
| "width": "336px" | |
| }, | |
| "toc_section_display": true, | |
| "toc_window_display": true | |
| }, | |
| "varInspector": { | |
| "cols": { | |
| "lenName": 16, | |
| "lenType": 16, | |
| "lenVar": 40 | |
| }, | |
| "kernels_config": { | |
| "python": { | |
| "delete_cmd_postfix": "", | |
| "delete_cmd_prefix": "del ", | |
| "library": "var_list.py", | |
| "varRefreshCmd": "print(var_dic_list())" | |
| }, | |
| "r": { | |
| "delete_cmd_postfix": ") ", | |
| "delete_cmd_prefix": "rm(", | |
| "library": "var_list.r", | |
| "varRefreshCmd": "cat(var_dic_list()) " | |
| } | |
| }, | |
| "types_to_exclude": [ | |
| "module", | |
| "function", | |
| "builtin_function_or_method", | |
| "instance", | |
| "_Feature" | |
| ], | |
| "window_display": false | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment