From 9b103ed80b632480ccc6b5dbebc959bcbe7810c6 Mon Sep 17 00:00:00 2001 From: Pascal Date: Mon, 26 Feb 2024 15:53:55 +0100 Subject: [PATCH] added -log(py|x)) --- notebooks/05_cnn_edge_lover.ipynb | 2 +- notebooks/05_cnn_edge_lover_sol.ipynb | 2 +- notebooks/testnb.ipynb | 124 ++++++++++++++++++++++++++ 3 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 notebooks/testnb.ipynb diff --git a/notebooks/05_cnn_edge_lover.ipynb b/notebooks/05_cnn_edge_lover.ipynb index 964e125..6e6e6ef 100644 --- a/notebooks/05_cnn_edge_lover.ipynb +++ b/notebooks/05_cnn_edge_lover.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{"id":"4K8Ug6ICkRtQ"},"source":["# A simple CNN for the edge lover task\n","\n","In this notebook you train a very simple CNN with only 1 kernel to distinguish between images containing vertical and images containing horizontal stripes. To check what pattern is recognized by the learned kernel you will visualize the weights of the kernel as an image. You will see that the CNN learns a useful kernel (either a vertical or horiziontal bar). You can experiment with the code to check the influence of the kernel size, the activation function and the pooling method on the result. \n","\n","\n","**Dataset:** You work with an artficially generated dataset of greyscale images (50x50 pixel) with 10 vertical or horizontal bars. We want to classify them into whether an art lover, who only loves vertical strips, will like the image (y = 0) or not like the image (y = 1). \n","\n","The idea of the notebook is that you try to understand the provided code by running it, checking the output and playing with it by slightly changing the code and rerunning it. \n","\n","**Content:**\n","* definig and generating the dataset X_train and X_val\n","* visualize samples of the generated images\n","* use keras to train a CNN with only one kernel (5x5 pixel)\n","* visualize the weights of the learned kernel and interpret if it is useful\n","* repeat the last two steps to check if the learned kernel is always the same\n","\n"]},{"cell_type":"markdown","metadata":{"id":"eiB8bJNYn8oP"},"source":["### Imports\n","\n","In the next cell, we load all the required libraries."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"2PDLAWRQ7iUB"},"outputs":[],"source":["# load required libraries:\n","import numpy as np\n","import matplotlib.pyplot as plt\n","%matplotlib inline\n","plt.style.use('default')\n","\n","import tensorflow.keras\n","from tensorflow.keras.models import Sequential\n","from tensorflow.keras.layers import Dense, Convolution2D, MaxPooling2D, Flatten , Activation\n","from tensorflow.keras.utils import to_categorical"]},{"cell_type":"markdown","metadata":{"id":"Oq0FNqcBpj23"},"source":["### Defining functions to generate images\n","\n","Here we define the function to genere images with vertical and horizontal bars, the arguments of the functions are the size of the image and the number of bars you want to have. The bars are at random positions in the image with a random length. The image is black and white, meaning we have only two values for the pixels, 0 for black and 255 for white."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"nqVBlR8yAO9c"},"outputs":[],"source":["#define function to generate image with shape (size, size, 1) with stripes\n","def generate_image_with_bars(size, bar_nr, vertical = True):\n"," img = np.zeros((size,size,1), dtype=\"uint8\")\n"," for i in range(0,bar_nr):\n"," x,y = np.random.randint(0,size,2)\n"," l = int(np.random.randint(y,size,1)[0])\n"," if (vertical):\n"," img[y:l,x,0]=255\n"," else:\n"," img[x,y:l,0]=255\n"," return img"]},{"cell_type":"markdown","metadata":{"id":"bUmdGzQLdqzB"},"source":["Let's have a look at the generated images. We choose a size of 50x50 pixels and set the number of bars in the image to 10."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"EccLz0FlXGuU"},"outputs":[],"source":["# have a look on two generated images\n","plt.figure(figsize=(8,8))\n","plt.subplot(1,2,1)\n","img=generate_image_with_bars(50,10, vertical=True)\n","plt.imshow(img[:,:,0],cmap='gray')\n","plt.subplot(1,2,2)\n","img=generate_image_with_bars(50,10, vertical=False)\n","plt.imshow(img[:,:,0],cmap='gray')\n","plt.show()"]},{"cell_type":"markdown","metadata":{"id":"Y8gSwmyaevTk"},"source":["### Make a train and validation dataset of images with vertical and horizontal images\n","Now, let's make a train dataset *X_train* with 1000 images (500 images with vertical and 500 images with horizontal bars). We normalize the images values to be between 0 and 1 by dividing all values with 255. We create a secont dataste *X_val* with exactly the same properties to validate the training of the CNN."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"63omuptEILKu"},"outputs":[],"source":["pixel=50 # define height and width of images\n","num_images_train = 1000 #Number of training examples (divisible by 2)\n","num_images_val = 1000 #Number of training examples (divisible by 2)\n","\n","# generate training data with vertical edges\n","X_train =np.zeros((num_images_train,pixel,pixel,1))\n","for i in range(0, num_images_train//2):\n"," X_train[i]=generate_image_with_bars(pixel,10)\n","# ... with horizontal\n","for i in range(num_images_train//2, num_images_train):\n"," X_train[i]=generate_image_with_bars(pixel,10, vertical=False)\n","\n","# generate validation data with vertical edges\n","X_val =np.zeros((num_images_train,pixel,pixel,1))\n","for i in range(0, num_images_train//2):\n"," X_val[i]=generate_image_with_bars(pixel,10)\n","# ... with horizontal\n","for i in range(num_images_train//2, num_images_train):\n"," X_val[i]=generate_image_with_bars(pixel,10, vertical=False)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"oBQjP6pZxMfa"},"outputs":[],"source":["# normalize the data to be between 0 and 1\n","X_train=X_train/255\n","X_val=X_val/255\n","\n","print(X_train.shape)\n","print(X_val.shape)"]},{"cell_type":"markdown","metadata":{"id":"ajNnUoYyi7IQ"},"source":["Here we make the labels for the art lover, 0 means he likes the image (vertical bars) and 1 means that he doesn't like it (horizontal stripes). We one hot encode the labels because we want to use two outputs in our network."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"41-L5hM8S_ZP"},"outputs":[],"source":["# create class labels\n","y = np.array([[0],[1]])\n","Y_train = np.repeat(y, num_images_train //2)\n","Y_val = np.repeat(y, num_images_train //2)\n","\n","# one-hot-encoding\n","Y_train = to_categorical(Y_train,2)\n","Y_val = to_categorical(Y_val,2)"]},{"cell_type":"markdown","metadata":{"id":"uZpr0h-VvatF"},"source":["## Defining the CNN\n","\n","Here we define the CNN:\n","\n","- we use only one kernel with a size of 5x5 pixels \n","- then we apply a linar activation function \n","- the maxpooling layer takes the maximum of the whole activation map to predict the probability (output layer with softmax) if the art lover will like the image\n","\n","As loss we use the categorical_crossentropy and we train the model with a batchsize of 64 images per update.\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"1Dfg1h2rUifd"},"outputs":[],"source":["model = Sequential()\n","\n","model.add(Convolution2D(1,(5,5),padding='same',input_shape=(pixel,pixel,1)))\n","model.add(Activation('linear'))\n","\n","# take the max over all values in the activation map\n","model.add(MaxPooling2D(pool_size=(pixel,pixel)))\n","model.add(Flatten())\n","model.add(Dense(2))\n","model.add(Activation('softmax'))\n","\n","# compile model and initialize weights\n","model.compile(loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy'])\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"r6eqV0TRU0_n"},"outputs":[],"source":["# let's summarize the CNN architectures along with the number of model weights\n","model.summary()\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Sc-BYd8kVCx0","scrolled":false},"outputs":[],"source":["# train the model\n","history=model.fit(X_train, Y_train,\n"," validation_data=(X_val,Y_val),\n"," batch_size=64,\n"," epochs=150,\n"," verbose=1)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"fK_AAAoiQtlc"},"outputs":[],"source":["# plot the development of the accuracy and loss during training\n","plt.figure(figsize=(12,4))\n","plt.subplot(1,2,(1))\n","plt.plot(history.history['accuracy'],linestyle='-.')\n","plt.plot(history.history['val_accuracy'])\n","plt.title('model accuracy')\n","plt.ylabel('accuracy')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='lower right')\n","plt.subplot(1,2,(2))\n","plt.plot(history.history['loss'],linestyle='-.')\n","plt.plot(history.history['val_loss'])\n","plt.title('model loss')\n","plt.ylabel('loss')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='upper right');"]},{"cell_type":"markdown","metadata":{"id":"uOwR3Esbw8eN"},"source":["### Visualize the learned kernel and experiment with the code\n","\n","You see that the CNN performs very good at this task (100% accuracy). We can check which pattern is recognized by the **learned kernel** and see if you think that this is helpful to distinguish between images with horizontal and vertical edges.\n","\n","Below you can see the original image, the image after the convolution operation with the learned kernel and the maximum value from the maxpooling operation. Note that the maxpooling has the same size as the convolved image so there is just one value as output.\n","\n","Move the sliders to inspect different pictures from the validation set and their predictions\n","\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"pl1yuAddVRnE"},"outputs":[],"source":["## Do not worry about this cell, just move the sliders.\n","import scipy.signal\n","from skimage.measure import block_reduce # For max pooling\n","import ipywidgets as widgets\n","\n","# Kernel from model\n","plt.figure(figsize=(10, 3))\n","plt.subplot(1, 2, 1)\n","plt.imshow(np.random.rand(25).reshape(5, 5),\"gray\") ,plt.title('Randomly initalized weights')\n","plt.subplot(1, 2, 2)\n","conv_filter=np.squeeze(model.get_weights()[0], axis=2)\n","plt.imshow(conv_filter[:,:,0],\"gray\"),plt.title('Learned Kernel (weights) , by model'),plt.show();\n","print(\"\\n---------Move the sliders to inspect different vertical and horizontal images from the valset and their predictions:------------------\\n\")\n","\n","def scale_convolution_map(conv_map, min_val=-3, max_val=3):\n"," clipped_conv_map = np.clip(conv_map, min_val, max_val)\n"," scaled_conv_map = (clipped_conv_map - min_val) / (max_val - min_val)\n"," return scaled_conv_map\n","\n","def plot_conv(img):\n"," convolved_image = scipy.signal.convolve2d(img.squeeze(), conv_filter.squeeze(), mode='same')\n"," scaled_conv_image = scale_convolution_map(convolved_image+model.get_weights()[1])\n"," max_pooled_image = block_reduce(convolved_image+model.get_weights()[1], block_size=(50, 50), func=np.max)\n"," scaled_max_pooled_image = scale_convolution_map(max_pooled_image)\n"," plt.figure(figsize=(10, 3))\n"," plt.subplot(1, 4, 1), plt.imshow(img,\"gray\", vmin=0, vmax=1),plt.title(f'Original Image')\n"," plt.subplot(1, 4, 2),plt.imshow(scaled_conv_image,\"gray\", vmin=0, vmax=1),plt.title('Convolved Image')\n"," plt.subplot(1, 4, 3)\n"," plt.imshow(scaled_max_pooled_image, \"gray\",vmin=0, vmax=1),plt.title(f'Max Pooled (just 1 value here) = {max_pooled_image[0][0]:.2f} ',fontsize=8)\n"," plt.xticks([]),plt.yticks([])\n"," plt.subplot(1, 4, 4)\n"," pred=model.predict(img.reshape(1, 50, 50, 1),verbose=0)\n"," plt.text(0.5, 0.6, f'P(y=vertical|x): {pred[0][0]:.4f}')\n"," plt.text(0.5, 0.4, f'P(y=horizontal|x): {pred[0][1]:.4f}')\n"," plt.axis('off'),plt.show();\n","\n","def inspect_preds(horizontal,vertical):\n"," plot_conv(X_val[horizontal,:,:,0])\n"," plot_conv(X_val[vertical,:,:,0])\n","\n","horizontal_slider = widgets.IntSlider(min=0, max=num_images_val//2-1, step=1, value=0, description='vertical ')\n","vertical_slider = widgets.IntSlider(min=num_images_val//2, max=num_images_val-1, step=1, value=0, description='horizontal')\n","widgets.interact(inspect_preds, horizontal=horizontal_slider, vertical=vertical_slider);"]},{"cell_type":"markdown","metadata":{"id":"U4gnnlAPp_Q2"},"source":["### Repeat the training and experiment with the kernelsize and activation function.\n","\n","**Exercise**:\n","- Repeat the compiling and training, beginning from the cell:\n","\n","```\n","model = Sequential()\n"," \n"," ...\n"," \n","model.compile(loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy'])\n","```\n","\n","for several times and check if the CNN always learns the same kernel. \n","\n","- You can experiment with the code and check what happens if you use another kernel size, activation function (relu instead of linear ) or pooling method AveragePooling instead of MaxPooling. Try to make a prediction on the performance before doing the experiment.\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"fRlCUwpVoy69"},"outputs":[],"source":[]}],"metadata":{"accelerator":"GPU","colab":{"provenance":[]},"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.7.11"}},"nbformat":4,"nbformat_minor":0} +{"cells":[{"cell_type":"markdown","metadata":{"id":"4K8Ug6ICkRtQ"},"source":["# A simple CNN for the edge lover task\n","\n","In this notebook you train a very simple CNN with only 1 kernel to distinguish between images containing vertical and images containing horizontal stripes. To check what pattern is recognized by the learned kernel you will visualize the weights of the kernel as an image. You will see that the CNN learns a useful kernel (either a vertical or horiziontal bar). You can experiment with the code to check the influence of the kernel size, the activation function and the pooling method on the result. \n","\n","\n","**Dataset:** You work with an artficially generated dataset of greyscale images (50x50 pixel) with 10 vertical or horizontal bars. We want to classify them into whether an art lover, who only loves vertical strips, will like the image (y = 0) or not like the image (y = 1). \n","\n","The idea of the notebook is that you try to understand the provided code by running it, checking the output and playing with it by slightly changing the code and rerunning it. \n","\n","**Content:**\n","* definig and generating the dataset X_train and X_val\n","* visualize samples of the generated images\n","* use keras to train a CNN with only one kernel (5x5 pixel)\n","* visualize the weights of the learned kernel and interpret if it is useful\n","* repeat the last two steps to check if the learned kernel is always the same\n","\n"]},{"cell_type":"markdown","metadata":{"id":"eiB8bJNYn8oP"},"source":["### Imports\n","\n","In the next cell, we load all the required libraries."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"2PDLAWRQ7iUB"},"outputs":[],"source":["# load required libraries:\n","import numpy as np\n","import matplotlib.pyplot as plt\n","%matplotlib inline\n","plt.style.use('default')\n","\n","import tensorflow.keras\n","from tensorflow.keras.models import Sequential\n","from tensorflow.keras.layers import Dense, Convolution2D, MaxPooling2D, Flatten , Activation\n","from tensorflow.keras.utils import to_categorical"]},{"cell_type":"markdown","metadata":{"id":"Oq0FNqcBpj23"},"source":["### Defining functions to generate images\n","\n","Here we define the function to genere images with vertical and horizontal bars, the arguments of the functions are the size of the image and the number of bars you want to have. The bars are at random positions in the image with a random length. The image is black and white, meaning we have only two values for the pixels, 0 for black and 255 for white."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"nqVBlR8yAO9c"},"outputs":[],"source":["#define function to generate image with shape (size, size, 1) with stripes\n","def generate_image_with_bars(size, bar_nr, vertical = True):\n"," img = np.zeros((size,size,1), dtype=\"uint8\")\n"," for i in range(0,bar_nr):\n"," x,y = np.random.randint(0,size,2)\n"," l = int(np.random.randint(y,size,1)[0])\n"," if (vertical):\n"," img[y:l,x,0]=255\n"," else:\n"," img[x,y:l,0]=255\n"," return img"]},{"cell_type":"markdown","metadata":{"id":"bUmdGzQLdqzB"},"source":["Let's have a look at the generated images. We choose a size of 50x50 pixels and set the number of bars in the image to 10."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"EccLz0FlXGuU"},"outputs":[],"source":["# have a look on two generated images\n","plt.figure(figsize=(8,8))\n","plt.subplot(1,2,1)\n","img=generate_image_with_bars(50,10, vertical=True)\n","plt.imshow(img[:,:,0],cmap='gray')\n","plt.subplot(1,2,2)\n","img=generate_image_with_bars(50,10, vertical=False)\n","plt.imshow(img[:,:,0],cmap='gray')\n","plt.show()"]},{"cell_type":"markdown","metadata":{"id":"Y8gSwmyaevTk"},"source":["### Make a train and validation dataset of images with vertical and horizontal images\n","Now, let's make a train dataset *X_train* with 1000 images (500 images with vertical and 500 images with horizontal bars). We normalize the images values to be between 0 and 1 by dividing all values with 255. We create a secont dataste *X_val* with exactly the same properties to validate the training of the CNN."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"63omuptEILKu"},"outputs":[],"source":["pixel=50 # define height and width of images\n","num_images_train = 1000 #Number of training examples (divisible by 2)\n","num_images_val = 1000 #Number of training examples (divisible by 2)\n","\n","# generate training data with vertical edges\n","X_train =np.zeros((num_images_train,pixel,pixel,1))\n","for i in range(0, num_images_train//2):\n"," X_train[i]=generate_image_with_bars(pixel,10)\n","# ... with horizontal\n","for i in range(num_images_train//2, num_images_train):\n"," X_train[i]=generate_image_with_bars(pixel,10, vertical=False)\n","\n","# generate validation data with vertical edges\n","X_val =np.zeros((num_images_train,pixel,pixel,1))\n","for i in range(0, num_images_train//2):\n"," X_val[i]=generate_image_with_bars(pixel,10)\n","# ... with horizontal\n","for i in range(num_images_train//2, num_images_train):\n"," X_val[i]=generate_image_with_bars(pixel,10, vertical=False)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"oBQjP6pZxMfa"},"outputs":[],"source":["# normalize the data to be between 0 and 1\n","X_train=X_train/255\n","X_val=X_val/255\n","\n","print(X_train.shape)\n","print(X_val.shape)"]},{"cell_type":"markdown","metadata":{"id":"ajNnUoYyi7IQ"},"source":["Here we make the labels for the art lover, 0 means he likes the image (vertical bars) and 1 means that he doesn't like it (horizontal stripes). We one hot encode the labels because we want to use two outputs in our network."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"41-L5hM8S_ZP"},"outputs":[],"source":["# create class labels\n","y = np.array([[0],[1]])\n","Y_train = np.repeat(y, num_images_train //2)\n","Y_val = np.repeat(y, num_images_train //2)\n","\n","# one-hot-encoding\n","Y_train = to_categorical(Y_train,2)\n","Y_val = to_categorical(Y_val,2)"]},{"cell_type":"markdown","metadata":{"id":"uZpr0h-VvatF"},"source":["## Defining the CNN\n","\n","Here we define the CNN:\n","\n","- we use only one kernel with a size of 5x5 pixels \n","- then we apply a linar activation function \n","- the maxpooling layer takes the maximum of the whole activation map to predict the probability (output layer with softmax) if the art lover will like the image\n","\n","As loss we use the categorical_crossentropy and we train the model with a batchsize of 64 images per update.\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"1Dfg1h2rUifd"},"outputs":[],"source":["model = Sequential()\n","\n","model.add(Convolution2D(1,(5,5),padding='same',input_shape=(pixel,pixel,1)))\n","model.add(Activation('linear'))\n","\n","# take the max over all values in the activation map\n","model.add(MaxPooling2D(pool_size=(pixel,pixel)))\n","model.add(Flatten())\n","model.add(Dense(2))\n","model.add(Activation('softmax'))\n","\n","# compile model and initialize weights\n","model.compile(loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy'])\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"r6eqV0TRU0_n"},"outputs":[],"source":["# let's summarize the CNN architectures along with the number of model weights\n","model.summary()\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Sc-BYd8kVCx0","scrolled":false},"outputs":[],"source":["# train the model\n","history=model.fit(X_train, Y_train,\n"," validation_data=(X_val,Y_val),\n"," batch_size=64,\n"," epochs=150,\n"," verbose=1)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"fK_AAAoiQtlc"},"outputs":[],"source":["# plot the development of the accuracy and loss during training\n","plt.figure(figsize=(12,4))\n","plt.subplot(1,2,(1))\n","plt.plot(history.history['accuracy'],linestyle='-.')\n","plt.plot(history.history['val_accuracy'])\n","plt.title('model accuracy')\n","plt.ylabel('accuracy')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='lower right')\n","plt.subplot(1,2,(2))\n","plt.plot(history.history['loss'],linestyle='-.')\n","plt.plot(history.history['val_loss'])\n","plt.title('model loss')\n","plt.ylabel('loss')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='upper right');"]},{"cell_type":"markdown","metadata":{"id":"uOwR3Esbw8eN"},"source":["### Visualize the learned kernel and experiment with the code\n","\n","You see that the CNN performs very good at this task (100% accuracy). We can check which pattern is recognized by the **learned kernel** and see if you think that this is helpful to distinguish between images with horizontal and vertical edges.\n","\n","Below you can see the original image, the image after the convolution operation with the learned kernel and the maximum value from the maxpooling operation. Note that the maxpooling has the same size as the convolved image so there is just one value as output.\n","\n","Move the sliders to inspect different pictures from the validation set and their predictions\n","\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"pl1yuAddVRnE"},"outputs":[],"source":["## Do not worry about this cell, just move the sliders.\n","import scipy.signal\n","from skimage.measure import block_reduce # For max pooling\n","import ipywidgets as widgets\n","\n","# Kernel from model\n","plt.figure(figsize=(10, 3))\n","plt.subplot(1, 2, 1)\n","plt.imshow(np.random.rand(25).reshape(5, 5),\"gray\") ,plt.title('Randomly initalized weights')\n","plt.subplot(1, 2, 2)\n","conv_filter=np.squeeze(model.get_weights()[0], axis=2)\n","plt.imshow(conv_filter[:,:,0],\"gray\"),plt.title('Learned Kernel (weights) , by model'),plt.show();\n","print(\"\\n---------Move the sliders to inspect different vertical and horizontal images from the valset and their predictions:------------------\\n\")\n","\n","def scale_convolution_map(conv_map, min_val=-3, max_val=3):\n"," clipped_conv_map = np.clip(conv_map, min_val, max_val)\n"," scaled_conv_map = (clipped_conv_map - min_val) / (max_val - min_val)\n"," return scaled_conv_map\n","\n","def plot_conv(img):\n"," convolved_image = scipy.signal.convolve2d(img.squeeze(), conv_filter.squeeze(), mode='same')\n"," scaled_conv_image = scale_convolution_map(convolved_image + model.get_weights()[1])\n"," max_pooled_image = block_reduce(convolved_image + model.get_weights()[1], block_size=(50, 50), func=np.max)\n"," scaled_max_pooled_image = scale_convolution_map(max_pooled_image)\n"," \n"," plt.figure(figsize=(20, 5)) # Adjust the figure size as needed\n"," plt.subplot(1, 6, 1)\n"," plt.imshow(img, \"gray\", vmin=0, vmax=1),plt.title('Original Image')\n"," plt.subplot(1, 6, 2)\n"," plt.imshow(scaled_conv_image, \"gray\", vmin=0, vmax=1),plt.title('Convolved Image')\n"," plt.subplot(1, 6, 3),plt.imshow(scaled_max_pooled_image, \"gray\", vmin=0, vmax=1)\n"," plt.title(f'Max Pooled = {max_pooled_image[0][0]:.2f}'),plt.xticks([]), plt.yticks([])\n"," plt.subplot(1, 6, 4),plt.axis('off')\n"," pred = model.predict(img.reshape(1, 50, 50, 1), verbose=0)\n"," text_info = f'''\n"," P(y=vertical|x): {pred[0][0]:.4f}\n"," P(y=horizontal|x): {pred[0][1]:.4f}\n"," \n"," \n"," -log(P(y=vertical|x)): {-np.log(pred[0][0]):.4f}\n"," -log(P(y=horizontal|x)): {-np.log(pred[0][1]):.4f}\n"," '''\n"," plt.text(0, 0.5, text_info, ha='left', va='center')\n"," plt.subplot(1, 6, 5)\n"," x_values = np.linspace(0.001, 1.1, 500)\n"," plt.plot(x_values, -np.log(x_values), label='-log(P(y|x))')\n"," plt.ylim(-0.5, 6),plt.xlim(-0.1, 1.1),plt.xlabel('P(y|x)')\n"," plt.plot(pred[0][0], -np.log(pred[0][0]), 'bo', label='-log(P(y=vertical|x))')\n"," plt.plot(pred[0][1], -np.log(pred[0][1]), 'ro', label='-log(P(y=horizontal|x))')\n"," plt.legend(),plt.grid(True), plt.tight_layout(),plt.show();\n","\n","def inspect_preds(horizontal,vertical):\n"," plot_conv(X_val[horizontal,:,:,0])\n"," plot_conv(X_val[vertical,:,:,0])\n","\n","horizontal_slider = widgets.IntSlider(min=0, max=num_images_val//2-1, step=1, value=0, description='vertical ')\n","vertical_slider = widgets.IntSlider(min=num_images_val//2, max=num_images_val-1, step=1, value=0, description='horizontal')\n","widgets.interact(inspect_preds, horizontal=horizontal_slider, vertical=vertical_slider);"]},{"cell_type":"markdown","metadata":{"id":"U4gnnlAPp_Q2"},"source":["### Repeat the training and experiment with the kernelsize and activation function.\n","\n","**Exercise**:\n","- Repeat the compiling and training, beginning from the cell:\n","\n","```\n","model = Sequential()\n"," \n"," ...\n"," \n","model.compile(loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy'])\n","```\n","\n","for several times and check if the CNN always learns the same kernel. \n","\n","- You can experiment with the code and check what happens if you use another kernel size, activation function (relu instead of linear ) or pooling method AveragePooling instead of MaxPooling. Try to make a prediction on the performance before doing the experiment.\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"fRlCUwpVoy69"},"outputs":[],"source":[]}],"metadata":{"accelerator":"GPU","colab":{"provenance":[]},"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.7.11"}},"nbformat":4,"nbformat_minor":0} diff --git a/notebooks/05_cnn_edge_lover_sol.ipynb b/notebooks/05_cnn_edge_lover_sol.ipynb index 544ea88..7bafb6e 100644 --- a/notebooks/05_cnn_edge_lover_sol.ipynb +++ b/notebooks/05_cnn_edge_lover_sol.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{"id":"4K8Ug6ICkRtQ"},"source":["# A simple CNN for the edge lover task\n","\n","In this notebook you train a very simple CNN with only 1 kernel to distinguish between images containing vertical and images containing horizontal stripes. To check what pattern is recognized by the learned kernel you will visualize the weights of the kernel as an image. You will see that the CNN learns a useful kernel (either a vertical or horiziontal bar). You can experiment with the code to check the influence of the kernel size, the activation function and the pooling method on the result. \n","\n","\n","**Dataset:** You work with an artficially generatet dataset of greyscale images (50x50 pixel) with 10 vertical or horizontal bars. We want to classify them into whether an art lover, who only loves vertical strips, will like the image (y = 0) or not like the image (y = 1). \n","\n","The idea of the notebook is that you try to understand the provided code by running it, checking the output and playing with it by slightly changing the code and rerunning it. \n","\n","**Content:**\n","* definig and generating the dataset X_train and X_val\n","* visualize samples of the generated images\n","* use keras to train a CNN with only one kernel (5x5 pixel)\n","* visualize the weights of the learned kernel and interpret if it is useful\n","* repeat the last two steps to check if the learned kernel is always the same\n","\n"]},{"cell_type":"markdown","metadata":{"id":"eiB8bJNYn8oP"},"source":["### Imports\n","\n","In the next cell, we load all the required libraries."]},{"cell_type":"code","execution_count":1,"metadata":{"executionInfo":{"elapsed":262,"status":"ok","timestamp":1708798970232,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"2PDLAWRQ7iUB"},"outputs":[{"name":"stderr","output_type":"stream","text":["2024-02-26 14:06:38.909869: I tensorflow/core/util/port.cc:113] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n","2024-02-26 14:06:38.929955: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n","2024-02-26 14:06:38.929971: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n","2024-02-26 14:06:38.930681: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n","2024-02-26 14:06:38.934250: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n","To enable the following instructions: AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n","2024-02-26 14:06:39.286274: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n"]}],"source":["# load required libraries:\n","import numpy as np\n","import matplotlib.pyplot as plt\n","%matplotlib inline\n","plt.style.use('default')\n","\n","import tensorflow.keras\n","from tensorflow.keras.models import Sequential\n","from tensorflow.keras.layers import Dense, Convolution2D, MaxPooling2D, Flatten , Activation\n","from tensorflow.keras.utils import to_categorical"]},{"cell_type":"markdown","metadata":{"id":"Oq0FNqcBpj23"},"source":["### Defining functions to generate images\n","\n","Here we define the function to genere images with vertical and horizontal bars, the arguments of the functions are the size of the image and the number of bars you want to have. The bars are at random positions in the image with a random length. The image is black and white, meaning we have only two values for the pixels, 0 for black and 255 for white."]},{"cell_type":"code","execution_count":2,"metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1708798970491,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"nqVBlR8yAO9c"},"outputs":[],"source":["#define function to generate image with shape (size, size, 1) with stripes\n","def generate_image_with_bars(size, bar_nr, vertical = True):\n"," img = np.zeros((size,size,1), dtype=\"uint8\")\n"," for i in range(0,bar_nr):\n"," x,y = np.random.randint(0,size,2)\n"," l = int(np.random.randint(y,size,1)[0])\n"," if (vertical):\n"," img[y:l,x,0]=255\n"," else:\n"," img[x,y:l,0]=255\n"," return img"]},{"cell_type":"markdown","metadata":{"id":"bUmdGzQLdqzB"},"source":["Let's have a look at the generated images. We choose a size of 50x50 pixels and set the number of bars in the image to 10."]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":345},"executionInfo":{"elapsed":301,"status":"ok","timestamp":1708798970791,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"EccLz0FlXGuU","outputId":"5cccc101-ab1f-4c8f-8125-1225918ed827"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAApsAAAFICAYAAAAf0DV4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAZwklEQVR4nO3dX2id9f0H8M+pbY5/2pzaOhNLm98KikWkHatWD14INrMMEf/0wovBipMNNYrVm9kL9WaQoqBT8R/I3M1mRwd1KLitazUyiF2NFv+uOJAZaJNOWE6yatPSfH8XbmeLplvSnm/Pv9cLPtA85znP+Xyb5MM7zznPOYWUUgoAAMhgXr0bAACgdQmbAABkI2wCAJCNsAkAQDbCJgAA2QibAABkI2wCAJCNsAkAQDbCJgAA2QibAABkMz/XgZ966ql45JFHYmRkJNasWRNPPvlkrFu37n/eb2pqKg4cOBCLFi2KQqGQqz2gjaWUYmJiIpYtWxbz5jXu39wnO0cjzFIgrznN0ZTBtm3bUkdHR/rZz36WPvjgg/TDH/4wLV68OI2Ojv7P+w4PD6eIUEqp7DU8PJxjBNbEqczRlMxSpdTpqdnM0Sxhc926damvr6/69fHjx9OyZctSf3///7zv2NhY3f/jlFLtUWNjYzlGYE2cyhxNySxVSp2ems0crfnzR0ePHo2hoaHo7e2tbps3b1709vbG4ODg1/afnJyM8fHxak1MTNS6JYAZNerTy3OdoxFmKVAfs5mjNQ+bn332WRw/fjy6urqmbe/q6oqRkZGv7d/f3x+lUqlaK1asqHVLAE1lrnM0wiwFGlfdXxm/ZcuWqFQq1RoeHq53SwBNxywFGlXNr0Y/77zz4owzzojR0dFp20dHR6O7u/tr+xeLxSgWi7VuA6BpzXWORpilQOOq+ZnNjo6OWLt2bezatau6bWpqKnbt2hXlcrnWDwfQcsxRoJVkeZ/N++67LzZt2hSXXXZZrFu3Ln7605/G4cOH49Zbb83xcAAtxxwFWkWWsHnLLbfE3/72t3jwwQdjZGQkvvWtb8Vvf/vbr73YHYCZmaNAqyiklFK9m/hP4+PjUSqV6t0G0AYqlUp0dnbWu40szFLgdJjNHK371egAALQuYRMAgGyETQAAshE2AQDIRtgEACAbYRMAgGyETQAAssnypu4AtJ8Ge9tmyKJQKNS7habjzCYAANkImwAAZCNsAgCQjbAJAEA2wiYAANm4Gh0AV5LPkiuRYe6c2QQAIBthEwCAbIRNAACyETYBAMjGBUIAuPAFyMaZTQAAshE2AQDIRtgEACAbYRMAgGyETQAAsnE1OgDwX9Xi40y940H7cmYTAIBshE0AALIRNgEAyEbYBAAgGxcIAQD/lYt7OBXObAIAkI2wCQBANsImAADZCJsAAGQjbAIAkI2wCQBANsImAADZCJsAAGQjbAIAkI2wCQBANsImAADZCJsAAGQjbAIAkI2wCQBANsImAADZzDlsvvHGG3H99dfHsmXLolAoxEsvvTTt9pRSPPjgg3HBBRfEWWedFb29vfHxxx/Xql+ApmeOAu1kzmHz8OHDsWbNmnjqqadmvP3hhx+OJ554Ip599tnYs2dPnHPOObFhw4Y4cuTIKTcL0ArMUaCtpFMQEWnHjh3Vr6emplJ3d3d65JFHqtvGxsZSsVhML7744qyOWalUUkQopVT2qlQqpzICayKi9nM0JbNUKXV6ajZztKav2fzkk09iZGQkent7q9tKpVJcccUVMTg4WMuHAmhJ5ijQaubX8mAjIyMREdHV1TVte1dXV/W2r5qcnIzJycnq1+Pj47VsCaCpnMwcjTBLgcZV96vR+/v7o1QqVWvFihX1bgmg6ZilQKOqadjs7u6OiIjR0dFp20dHR6u3fdWWLVuiUqlUa3h4uJYtATSVk5mjEWYp0LhqGjZXrlwZ3d3dsWvXruq28fHx2LNnT5TL5RnvUywWo7Ozc1oBtKuTmaMRZinUW0qp6ep0mfNrNv/xj3/EX/7yl+rXn3zySezbty+WLFkSPT09sXnz5vjJT34SF110UaxcuTIeeOCBWLZsWdx444217BugaZmjQFuZ9fto/NNrr70246XvmzZtSil9+bYdDzzwQOrq6krFYjGtX78+7d+/f9bH93YdSqnTVfV666PcczQls1Sp013NqBbrns0cLfzzwRrG+Ph4lEqlercBtIFKpdKyTzebpXB6NVicmpVCoXDKx5jNHK371egAALQuYRMAgGxq+qbuAADtqBZPSbcqZzYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhmfr0bAOorpTTj9kKhcJo7AaAVObMJAEA2wiYAANkImwAAZCNsAgCQjbAJAEA2wiYAANkImwAAZCNsAgCQjbAJAEA2cwqb/f39cfnll8eiRYvi/PPPjxtvvDH2798/bZ8jR45EX19fLF26NBYuXBgbN26M0dHRmjYN0KzMUaDdzClsDgwMRF9fX7z55puxc+fOOHbsWFx77bVx+PDh6j733ntvvPzyy7F9+/YYGBiIAwcOxM0331zzxgGakTkKtJ10Cg4dOpQiIg0MDKSUUhobG0sLFixI27dvr+7z0UcfpYhIg4ODszpmpVJJEaGUOk11IvXu63RUpVI5lRFYEznmaEpmqVLq9NRs5ugpvWazUqlERMSSJUsiImJoaCiOHTsWvb291X1WrVoVPT09MTg4OOMxJicnY3x8fFoBtItazNEIsxRoXCcdNqempmLz5s1x1VVXxaWXXhoRESMjI9HR0RGLFy+etm9XV1eMjIzMeJz+/v4olUrVWrFixcm2BNBUajVHI8xSoHGddNjs6+uL999/P7Zt23ZKDWzZsiUqlUq1hoeHT+l4AM2iVnM0wiwFGtf8k7nTXXfdFa+88kq88cYbsXz58ur27u7uOHr0aIyNjU37q3x0dDS6u7tnPFaxWIxisXgybQA0rVrO0QizFGhcczqzmVKKu+66K3bs2BG7d++OlStXTrt97dq1sWDBgti1a1d12/79++PTTz+Ncrlcm44Bmpg5CrSduVw1eccdd6RSqZRef/31dPDgwWp9/vnn1X1uv/321NPTk3bv3p3eeuutVC6XU7lcdgWlUg1aJ1Lvvk5H1eNq9NMxR1MyS5VSp6dmM0fnFDZP9EAvvPBCdZ8vvvgi3Xnnnencc89NZ599drrpppvSwYMHDUilGrTm+vveSlWPsHmiXmo5R1MyS5VSp6dmM0cL/xx+DWN8fDxKpVK924C2caIRUCgUTnMnp1+lUonOzs56t5GFWQqcDrOZoz4bHQCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIJv59W6gHaWUZtxeKBROcycAAHk5swkAQDbCJgAA2QibAABkI2wCAJCNsAkAQDbCJgAA2QibAABkI2wCAJCNsAkAQDbCJgAA2fi4SmhzzfgxqT7yFaB5OLMJAEA2wiYAANkImwAAZCNsAgCQjbAJAEA2wiYAANkImwAAZCNsAgCQjbAJAEA2cwqbzzzzTKxevTo6Ozujs7MzyuVyvPrqq9Xbjxw5En19fbF06dJYuHBhbNy4MUZHR2veNECzMkeBdjOnsLl8+fLYunVrDA0NxVtvvRXXXHNN3HDDDfHBBx9ERMS9994bL7/8cmzfvj0GBgbiwIEDcfPNN2dpHKAZmaNA20mn6Nxzz03PP/98GhsbSwsWLEjbt2+v3vbRRx+liEiDg4OzPl6lUkkR0dJ1IvXuS6lmqVr9DlUqlVnPppxqPUdTao9ZqpSqf81mjp70azaPHz8e27Zti8OHD0e5XI6hoaE4duxY9Pb2VvdZtWpV9PT0xODg4AmPMzk5GePj49MKoB3Uao5GmKVA45pz2Hzvvfdi4cKFUSwW4/bbb48dO3bEJZdcEiMjI9HR0RGLFy+etn9XV1eMjIyc8Hj9/f1RKpWqtWLFijkvAqCZ1HqORpilQOOac9i8+OKLY9++fbFnz5644447YtOmTfHhhx+edANbtmyJSqVSreHh4ZM+FkAzqPUcjTBLgcY1f6536OjoiAsvvDAiItauXRt79+6Nxx9/PG655ZY4evRojI2NTfurfHR0NLq7u094vGKxGMVice6dAzSpWs/RCLMUaFyn/D6bU1NTMTk5GWvXro0FCxbErl27qrft378/Pv300yiXy6f6MAAtyxwFWtmczmxu2bIlvvvd70ZPT09MTEzEL3/5y3j99dfjd7/7XZRKpbjtttvivvvuiyVLlkRnZ2fcfffdUS6X48orr8zVP0BTMUeBdjOnsHno0KH4/ve/HwcPHoxSqRSrV6+O3/3ud/Gd73wnIiIee+yxmDdvXmzcuDEmJydjw4YN8fTTT2dpHKAZmaNAuymklFK9m/hP4+PjUSqV6t1GVif6Ly8UCqe5E2hOtfodqlQq0dnZWYuWGk47zFKg/mYzR302OgAA2QibAABkI2wCAJCNsAkAQDbCJgAA2QibAABkI2wCAJDNnD8bHQCgUTTY24WfklZ9v21nNgEAyEbYBAAgG2ETAIBshE0AALIRNgEAyMbV6ABA02rVK7hbiTObAABkI2wCAJCNsAkAQDbCJgAA2bhACIC20Cgfa+iCFtqNM5sAAGQjbAIAkI2wCQBANsImAADZCJsAAGTjanQA2oKrwKE+nNkEACAbYRMAgGyETQAAshE2AQDIRtgEACAbV6NDEzvRZz276haARuHMJgAA2QibAABkI2wCAJCNsAkAQDbCJgAA2QibAABkI2wCAJCNsAkAQDbCJgAA2QibAABkI2wCAJCNsAkAQDbCJgAA2QibAABkc0phc+vWrVEoFGLz5s3VbUeOHIm+vr5YunRpLFy4MDZu3Bijo6On2idASzJHgVZ30mFz79698dxzz8Xq1aunbb/33nvj5Zdfju3bt8fAwEAcOHAgbr755lNuFKDVmKNAW0gnYWJiIl100UVp586d6eqrr0733HNPSimlsbGxtGDBgrR9+/bqvh999FGKiDQ4ODirY1cqlRQRLV0nUu++VPNVu/4s1WrdlUplVnMph5xzNKX2mKVKqfrXbOboSZ3Z7Ovri+uuuy56e3unbR8aGopjx45N275q1aro6emJwcHBk3kogJZkjgLtYv5c77Bt27Z4++23Y+/evV+7bWRkJDo6OmLx4sXTtnd1dcXIyMiMx5ucnIzJycnq1+Pj43NtCaCp1HqORpilQOOa05nN4eHhuOeee+IXv/hFnHnmmTVpoL+/P0qlUrVWrFhRk+MCNKIcczTCLAUa2FxeY7Rjx44UEemMM86oVkSkQqGQzjjjjPSHP/whRUT6+9//Pu1+PT096dFHH53xmEeOHEmVSqVaw8PDdX/9Qe46kXr3pZqv2vVnqVbrrsdrNnPM0ZTac5Yqpepfs5mjc3oaff369fHee+9N23brrbfGqlWr4sc//nGsWLEiFixYELt27YqNGzdGRMT+/fvj008/jXK5POMxi8ViFIvFubRBG0spzbi9UCic5k7g5OSYoxFmKdC45hQ2Fy1aFJdeeum0beecc04sXbq0uv22226L++67L5YsWRKdnZ1x9913R7lcjiuvvLJ2XQM0KXMUaDdzvkDof3nsscdi3rx5sXHjxpicnIwNGzbE008/XeuHAWhZ5ijQSgrpRM9L1sn4+HiUSqV6t5GVp4JPnv+76dr1/6NW665UKtHZ2VmLlhpOO8xSoP5mM0d9NjoAANkImwAAZFPz12xCTq3+9DDTNdirfAA4Cc5sAgCQjbAJAEA2wiYAANkImwAAZCNsAgCQjbAJAEA2wiYAANkImwAAZCNsAgCQjbAJAEA2Pq4SoIVVKpXo7OysdxtAE6n1R0M7swkAQDbCJgAA2QibAABkI2wCAJCNsAkAQDauRocmVusrBmk9pVKp3i0Abc6ZTQAAshE2AQDIRtgEACAbYRMAgGxcINRAUkozbncRCO3qRD/7J/pdAaDxOLMJAEA2wiYAANkImwAAZCNsAgCQjbAJAEA2rkavA1fYAgDtwplNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMhG2AQAIBthEwCAbIRNAACyETYBAMjGx1U2kBN9jCUwnd8VgObhzCYAANkImwAAZCNsAgCQjbAJAEA2DRc2U0r1bgFoE608b1p5bUDjmM2sabiwOTExUe8WgDbRyvOmldcGNI7ZzJpCarA/f6empuLAgQOxaNGimJiYiBUrVsTw8HB0dnbWu7UsxsfHW3qN1tf8WnGNKaWYmJiIZcuWxbx5Dfc3d038a5amlKKnp6elvn9f1Yo/o//J+ppfK65xLnO04d5nc968ebF8+fKI+Pd76XV2drbMN+dEWn2N1tf8Wm2NpVKp3i1k9a9ZOj4+HhGt9/2bSauv0fqaX6utcbZztDX/pAcAoCEImwAAZNPQYbNYLMZDDz0UxWKx3q1k0+prtL7m1w5rbGXt8P1r9TVaX/NrhzX+Nw13gRAAAK2joc9sAgDQ3IRNAACyETYBAMhG2AQAIJuGDptPPfVUfPOb34wzzzwzrrjiivjTn/5U75ZOyhtvvBHXX399LFu2LAqFQrz00kvTbk8pxYMPPhgXXHBBnHXWWdHb2xsff/xxfZo9Cf39/XH55ZfHokWL4vzzz48bb7wx9u/fP22fI0eORF9fXyxdujQWLlwYGzdujNHR0Tp1PHfPPPNMrF69uvqGvOVyOV599dXq7c2+vq/aunVrFAqF2Lx5c3Vbq62xXZijzcEcbf71fZU5+m8NGzZ/9atfxX333RcPPfRQvP3227FmzZrYsGFDHDp0qN6tzdnhw4djzZo18dRTT814+8MPPxxPPPFEPPvss7Fnz54455xzYsOGDXHkyJHT3OnJGRgYiL6+vnjzzTdj586dcezYsbj22mvj8OHD1X3uvffeePnll2P79u0xMDAQBw4ciJtvvrmOXc/N8uXLY+vWrTE0NBRvvfVWXHPNNXHDDTfEBx98EBHNv77/tHfv3njuuedi9erV07a30hrbhTlqjjYSc7S11jgnqUGtW7cu9fX1Vb8+fvx4WrZsWerv769jV6cuItKOHTuqX09NTaXu7u70yCOPVLeNjY2lYrGYXnzxxTp0eOoOHTqUIiINDAyklL5cz4IFC9L27dur+3z00UcpItLg4GC92jxl5557bnr++edban0TExPpoosuSjt37kxXX311uueee1JKrfs9bHXmqDna6MzR5lzjXDXkmc2jR4/G0NBQ9Pb2VrfNmzcvent7Y3BwsI6d1d4nn3wSIyMj09ZaKpXiiiuuaNq1ViqViIhYsmRJREQMDQ3FsWPHpq1x1apV0dPT05RrPH78eGzbti0OHz4c5XK5pdbX19cX11133bS1RLTe97AdmKPmaCMzR7/UrGucq/n1bmAmn332WRw/fjy6urqmbe/q6oo///nPdeoqj5GRkYiIGdf6r9uaydTUVGzevDmuuuqquPTSSyPiyzV2dHTE4sWLp+3bbGt87733olwux5EjR2LhwoWxY8eOuOSSS2Lfvn0tsb5t27bF22+/HXv37v3aba3yPWwn5mjz/nyao//WbOszR2fWkGGT5tXX1xfvv/9+/PGPf6x3KzV38cUXx759+6JSqcSvf/3r2LRpUwwMDNS7rZoYHh6Oe+65J3bu3BlnnnlmvduBtmaONidz9MQa8mn08847L84444yvXaE1Ojoa3d3ddeoqj3+tpxXWetddd8Urr7wSr732Wixfvry6vbu7O44ePRpjY2PT9m+2NXZ0dMSFF14Ya9eujf7+/lizZk08/vjjLbG+oaGhOHToUHz729+O+fPnx/z582NgYCCeeOKJmD9/fnR1dTX9GtuNOdqcazVHx6bt30zrM0dPrCHDZkdHR6xduzZ27dpV3TY1NRW7du2Kcrlcx85qb+XKldHd3T1trePj47Fnz56mWWtKKe66667YsWNH7N69O1auXDnt9rVr18aCBQumrXH//v3x6aefNs0aZzI1NRWTk5Mtsb7169fHe++9F/v27avWZZddFt/73veq/272NbYbc9QcbQbmaHOt8aTV+wqlE9m2bVsqFovp5z//efrwww/Tj370o7R48eI0MjJS79bmbGJiIr3zzjvpnXfeSRGRHn300fTOO++kv/71rymllLZu3ZoWL16cfvOb36R333033XDDDWnlypXpiy++qHPns3PHHXekUqmUXn/99XTw4MFqff7559V9br/99tTT05N2796d3nrrrVQul1O5XK5j13Nz//33p4GBgfTJJ5+kd999N91///2pUCik3//+9yml5l/fTP7zKsqUWnONrc4cNUcbiTnammucjYYNmyml9OSTT6aenp7U0dGR1q1bl9588816t3RSXnvttRQRX6tNmzallL58244HHnggdXV1pWKxmNavX5/2799f36bnYKa1RUR64YUXqvt88cUX6c4770znnntuOvvss9NNN92UDh48WL+m5+gHP/hB+r//+7/U0dGRvvGNb6T169dXB2RKzb++mXx1SLbiGtuBOdoczNHmX99MzNEvFVJK6fSdRwUAoJ005Gs2AQBoDcImAADZCJsAAGQjbAIAkI2wCQBANsImAADZCJsAAGQjbAIAkI2wCQBANsImAADZCJsAAGQjbAIAkM3/A4niy88/9KQDAAAAAElFTkSuQmCC","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# have a look on two generated images\n","plt.figure(figsize=(8,8))\n","plt.subplot(1,2,1)\n","img=generate_image_with_bars(50,10, vertical=True)\n","plt.imshow(img[:,:,0],cmap='gray')\n","plt.subplot(1,2,2)\n","img=generate_image_with_bars(50,10, vertical=False)\n","plt.imshow(img[:,:,0],cmap='gray')\n","plt.show()"]},{"cell_type":"markdown","metadata":{"id":"Y8gSwmyaevTk"},"source":["### Make a train and validation dataset of images with vertical and horizontal images\n","Now, let's make a train dataset *X_train* with 1000 images (500 images with vertical and 500 images with horizontal bars). We normalize the images values to be between 0 and 1 by dividing all values with 255. We create a secont dataste *X_val* with exactly the same properties to validate the training of the CNN."]},{"cell_type":"code","execution_count":4,"metadata":{"executionInfo":{"elapsed":573,"status":"ok","timestamp":1708798971361,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"63omuptEILKu"},"outputs":[],"source":["pixel=50 # define height and width of images\n","num_images_train = 1000 #Number of training examples (divisible by 2)\n","num_images_val = 1000 #Number of training examples (divisible by 2)\n","\n","# generate training data with vertical edges\n","X_train =np.zeros((num_images_train,pixel,pixel,1))\n","for i in range(0, num_images_train//2):\n"," X_train[i]=generate_image_with_bars(pixel,10)\n","# ... with horizontal\n","for i in range(num_images_train//2, num_images_train):\n"," X_train[i]=generate_image_with_bars(pixel,10, vertical=False)\n","\n","# generate validation data with vertical edges\n","X_val =np.zeros((num_images_train,pixel,pixel,1))\n","for i in range(0, num_images_train//2):\n"," X_val[i]=generate_image_with_bars(pixel,10)\n","# ... with horizontal\n","for i in range(num_images_train//2, num_images_train):\n"," X_val[i]=generate_image_with_bars(pixel,10, vertical=False)"]},{"cell_type":"code","execution_count":5,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":16,"status":"ok","timestamp":1708798971361,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"kvAEj2e4xIoK","outputId":"864bd112-e430-4e1c-e6a2-2bfd4ce58ee5"},"outputs":[{"name":"stdout","output_type":"stream","text":["(1000, 50, 50, 1)\n","(1000, 50, 50, 1)\n"]}],"source":["# normalize the data to be between 0 and 1\n","X_train=X_train/255\n","X_val=X_val/255\n","\n","print(X_train.shape)\n","print(X_val.shape)"]},{"cell_type":"markdown","metadata":{"id":"ajNnUoYyi7IQ"},"source":["Here we make the labels for the art lover, 0 means he likes the image (vertical bars) and 1 means that he doesn't like it (horizontal stripes). We one hot encode the labels because we want to use two outputs in our network."]},{"cell_type":"code","execution_count":6,"metadata":{"executionInfo":{"elapsed":15,"status":"ok","timestamp":1708798971361,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"41-L5hM8S_ZP"},"outputs":[],"source":["# create class labels\n","y = np.array([[0],[1]])\n","Y_train = np.repeat(y, num_images_train //2)\n","Y_val = np.repeat(y, num_images_train //2)\n","\n","# one-hot-encoding\n","Y_train = to_categorical(Y_train,2)\n","Y_val = to_categorical(Y_val,2)"]},{"cell_type":"markdown","metadata":{"id":"uZpr0h-VvatF"},"source":["## Defining the CNN\n","\n","Here we define the CNN:\n","\n","- we use only one kernel with a size of 5x5 pixels \n","- then we apply a linar activation function \n","- the maxpooling layer takes the maximum of the whole activation map to predict the probability (output layer with softmax) if the art lover will like the image\n","\n","As loss we use the categorical_crossentropy and we train the model with a batchsize of 64 images per update.\n"]},{"cell_type":"code","execution_count":7,"metadata":{"executionInfo":{"elapsed":14,"status":"ok","timestamp":1708798971361,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"1Dfg1h2rUifd"},"outputs":[{"name":"stderr","output_type":"stream","text":["2024-02-26 14:06:40.039931: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:901] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n","2024-02-26 14:06:40.059032: W tensorflow/core/common_runtime/gpu/gpu_device.cc:2256] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n","Skipping registering GPU devices...\n"]}],"source":["model = Sequential()\n","\n","model.add(Convolution2D(1,(5,5),padding='same',input_shape=(pixel,pixel,1)))\n","model.add(Activation('linear'))\n","\n","# take the max over all values in the activation map\n","model.add(MaxPooling2D(pool_size=(pixel,pixel)))\n","model.add(Flatten())\n","model.add(Dense(2))\n","model.add(Activation('softmax'))\n","\n","# compile model and initialize weights\n","model.compile(loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy'])\n"]},{"cell_type":"code","execution_count":8,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":15,"status":"ok","timestamp":1708798971362,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"r6eqV0TRU0_n","outputId":"2c6833cb-ca10-422c-bbda-56102a866011"},"outputs":[{"name":"stdout","output_type":"stream","text":["Model: \"sequential\"\n","_________________________________________________________________\n"," Layer (type) Output Shape Param # \n","=================================================================\n"," conv2d (Conv2D) (None, 50, 50, 1) 26 \n"," \n"," activation (Activation) (None, 50, 50, 1) 0 \n"," \n"," max_pooling2d (MaxPooling2 (None, 1, 1, 1) 0 \n"," D) \n"," \n"," flatten (Flatten) (None, 1) 0 \n"," \n"," dense (Dense) (None, 2) 4 \n"," \n"," activation_1 (Activation) (None, 2) 0 \n"," \n","=================================================================\n","Total params: 30 (120.00 Byte)\n","Trainable params: 30 (120.00 Byte)\n","Non-trainable params: 0 (0.00 Byte)\n","_________________________________________________________________\n"]}],"source":["# let's summarize the CNN architectures along with the number of model weights\n","model.summary()\n"]},{"cell_type":"code","execution_count":9,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":38560,"status":"ok","timestamp":1708799009916,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"Sc-BYd8kVCx0","outputId":"73316fb0-5762-4fae-a012-4bfc64797edc","scrolled":false},"outputs":[{"name":"stdout","output_type":"stream","text":["Epoch 1/150\n"]},{"name":"stdout","output_type":"stream","text":["16/16 [==============================] - 0s 7ms/step - loss: 0.7118 - accuracy: 0.5000 - val_loss: 0.7055 - val_accuracy: 0.5000\n","Epoch 2/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6991 - accuracy: 0.5000 - val_loss: 0.6947 - val_accuracy: 0.5000\n","Epoch 3/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6890 - accuracy: 0.5000 - val_loss: 0.6858 - val_accuracy: 0.5000\n","Epoch 4/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6805 - accuracy: 0.5000 - val_loss: 0.6773 - val_accuracy: 0.5000\n","Epoch 5/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6718 - accuracy: 0.5000 - val_loss: 0.6680 - val_accuracy: 0.5000\n","Epoch 6/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6619 - accuracy: 0.5000 - val_loss: 0.6577 - val_accuracy: 0.5000\n","Epoch 7/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6505 - accuracy: 0.5110 - val_loss: 0.6450 - val_accuracy: 0.5460\n","Epoch 8/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6366 - accuracy: 0.5860 - val_loss: 0.6301 - val_accuracy: 0.5790\n","Epoch 9/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6206 - accuracy: 0.6380 - val_loss: 0.6134 - val_accuracy: 0.6110\n","Epoch 10/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6032 - accuracy: 0.6500 - val_loss: 0.5953 - val_accuracy: 0.6720\n","Epoch 11/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5850 - accuracy: 0.8170 - val_loss: 0.5771 - val_accuracy: 0.8970\n","Epoch 12/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5666 - accuracy: 0.9020 - val_loss: 0.5590 - val_accuracy: 0.9220\n","Epoch 13/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5481 - accuracy: 0.9330 - val_loss: 0.5405 - val_accuracy: 0.9290\n","Epoch 14/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5294 - accuracy: 0.9370 - val_loss: 0.5219 - val_accuracy: 0.9480\n","Epoch 15/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5104 - accuracy: 0.9530 - val_loss: 0.5029 - val_accuracy: 0.9830\n","Epoch 16/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4913 - accuracy: 0.9690 - val_loss: 0.4838 - val_accuracy: 0.9870\n","Epoch 17/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4723 - accuracy: 0.9730 - val_loss: 0.4647 - val_accuracy: 0.9900\n","Epoch 18/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4534 - accuracy: 0.9840 - val_loss: 0.4459 - val_accuracy: 0.9920\n","Epoch 19/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4349 - accuracy: 0.9870 - val_loss: 0.4273 - val_accuracy: 0.9920\n","Epoch 20/150\n","16/16 [==============================] - 0s 3ms/step - loss: 0.4165 - accuracy: 0.9890 - val_loss: 0.4090 - val_accuracy: 0.9940\n","Epoch 21/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3988 - accuracy: 0.9960 - val_loss: 0.3910 - val_accuracy: 0.9990\n","Epoch 22/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3810 - accuracy: 0.9980 - val_loss: 0.3736 - val_accuracy: 0.9990\n","Epoch 23/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3640 - accuracy: 0.9980 - val_loss: 0.3568 - val_accuracy: 0.9990\n","Epoch 24/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3477 - accuracy: 1.0000 - val_loss: 0.3406 - val_accuracy: 0.9990\n","Epoch 25/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3320 - accuracy: 1.0000 - val_loss: 0.3250 - val_accuracy: 0.9990\n","Epoch 26/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3170 - accuracy: 1.0000 - val_loss: 0.3102 - val_accuracy: 1.0000\n","Epoch 27/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3026 - accuracy: 1.0000 - val_loss: 0.2959 - val_accuracy: 1.0000\n","Epoch 28/150\n","16/16 [==============================] - 0s 3ms/step - loss: 0.2888 - accuracy: 1.0000 - val_loss: 0.2823 - val_accuracy: 1.0000\n","Epoch 29/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2759 - accuracy: 1.0000 - val_loss: 0.2696 - val_accuracy: 1.0000\n","Epoch 30/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2635 - accuracy: 1.0000 - val_loss: 0.2573 - val_accuracy: 1.0000\n","Epoch 31/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2516 - accuracy: 1.0000 - val_loss: 0.2456 - val_accuracy: 1.0000\n","Epoch 32/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2403 - accuracy: 1.0000 - val_loss: 0.2344 - val_accuracy: 1.0000\n","Epoch 33/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2294 - accuracy: 1.0000 - val_loss: 0.2237 - val_accuracy: 1.0000\n","Epoch 34/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2190 - accuracy: 1.0000 - val_loss: 0.2135 - val_accuracy: 1.0000\n","Epoch 35/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2090 - accuracy: 1.0000 - val_loss: 0.2037 - val_accuracy: 1.0000\n","Epoch 36/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1996 - accuracy: 1.0000 - val_loss: 0.1945 - val_accuracy: 1.0000\n","Epoch 37/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1907 - accuracy: 1.0000 - val_loss: 0.1857 - val_accuracy: 1.0000\n","Epoch 38/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1822 - accuracy: 1.0000 - val_loss: 0.1774 - val_accuracy: 1.0000\n","Epoch 39/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1741 - accuracy: 1.0000 - val_loss: 0.1695 - val_accuracy: 1.0000\n","Epoch 40/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1665 - accuracy: 1.0000 - val_loss: 0.1619 - val_accuracy: 1.0000\n","Epoch 41/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1592 - accuracy: 1.0000 - val_loss: 0.1548 - val_accuracy: 1.0000\n","Epoch 42/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1523 - accuracy: 1.0000 - val_loss: 0.1480 - val_accuracy: 1.0000\n","Epoch 43/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1457 - accuracy: 1.0000 - val_loss: 0.1417 - val_accuracy: 1.0000\n","Epoch 44/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1395 - accuracy: 1.0000 - val_loss: 0.1356 - val_accuracy: 1.0000\n","Epoch 45/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1335 - accuracy: 1.0000 - val_loss: 0.1296 - val_accuracy: 1.0000\n","Epoch 46/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1276 - accuracy: 1.0000 - val_loss: 0.1237 - val_accuracy: 1.0000\n","Epoch 47/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1219 - accuracy: 1.0000 - val_loss: 0.1181 - val_accuracy: 1.0000\n","Epoch 48/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1165 - accuracy: 1.0000 - val_loss: 0.1128 - val_accuracy: 1.0000\n","Epoch 49/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1113 - accuracy: 1.0000 - val_loss: 0.1078 - val_accuracy: 1.0000\n","Epoch 50/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1065 - accuracy: 1.0000 - val_loss: 0.1031 - val_accuracy: 1.0000\n","Epoch 51/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1020 - accuracy: 1.0000 - val_loss: 0.0987 - val_accuracy: 1.0000\n","Epoch 52/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0978 - accuracy: 1.0000 - val_loss: 0.0946 - val_accuracy: 1.0000\n","Epoch 53/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0938 - accuracy: 1.0000 - val_loss: 0.0908 - val_accuracy: 1.0000\n","Epoch 54/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0901 - accuracy: 1.0000 - val_loss: 0.0872 - val_accuracy: 1.0000\n","Epoch 55/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0866 - accuracy: 1.0000 - val_loss: 0.0837 - val_accuracy: 1.0000\n","Epoch 56/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0832 - accuracy: 1.0000 - val_loss: 0.0805 - val_accuracy: 1.0000\n","Epoch 57/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0800 - accuracy: 1.0000 - val_loss: 0.0774 - val_accuracy: 1.0000\n","Epoch 58/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0770 - accuracy: 1.0000 - val_loss: 0.0745 - val_accuracy: 1.0000\n","Epoch 59/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0741 - accuracy: 1.0000 - val_loss: 0.0717 - val_accuracy: 1.0000\n","Epoch 60/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0714 - accuracy: 1.0000 - val_loss: 0.0691 - val_accuracy: 1.0000\n","Epoch 61/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0688 - accuracy: 1.0000 - val_loss: 0.0666 - val_accuracy: 1.0000\n","Epoch 62/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0664 - accuracy: 1.0000 - val_loss: 0.0642 - val_accuracy: 1.0000\n","Epoch 63/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0640 - accuracy: 1.0000 - val_loss: 0.0619 - val_accuracy: 1.0000\n","Epoch 64/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0618 - accuracy: 1.0000 - val_loss: 0.0597 - val_accuracy: 1.0000\n","Epoch 65/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0595 - accuracy: 1.0000 - val_loss: 0.0575 - val_accuracy: 1.0000\n","Epoch 66/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0573 - accuracy: 1.0000 - val_loss: 0.0554 - val_accuracy: 1.0000\n","Epoch 67/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0553 - accuracy: 1.0000 - val_loss: 0.0534 - val_accuracy: 1.0000\n","Epoch 68/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0533 - accuracy: 1.0000 - val_loss: 0.0515 - val_accuracy: 1.0000\n","Epoch 69/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0514 - accuracy: 1.0000 - val_loss: 0.0497 - val_accuracy: 1.0000\n","Epoch 70/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0496 - accuracy: 1.0000 - val_loss: 0.0479 - val_accuracy: 1.0000\n","Epoch 71/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0479 - accuracy: 1.0000 - val_loss: 0.0463 - val_accuracy: 1.0000\n","Epoch 72/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0463 - accuracy: 1.0000 - val_loss: 0.0447 - val_accuracy: 1.0000\n","Epoch 73/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0448 - accuracy: 1.0000 - val_loss: 0.0432 - val_accuracy: 1.0000\n","Epoch 74/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0433 - accuracy: 1.0000 - val_loss: 0.0418 - val_accuracy: 1.0000\n","Epoch 75/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0419 - accuracy: 1.0000 - val_loss: 0.0405 - val_accuracy: 1.0000\n","Epoch 76/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0405 - accuracy: 1.0000 - val_loss: 0.0392 - val_accuracy: 1.0000\n","Epoch 77/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0393 - accuracy: 1.0000 - val_loss: 0.0379 - val_accuracy: 1.0000\n","Epoch 78/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0380 - accuracy: 1.0000 - val_loss: 0.0367 - val_accuracy: 1.0000\n","Epoch 79/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0368 - accuracy: 1.0000 - val_loss: 0.0356 - val_accuracy: 1.0000\n","Epoch 80/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0357 - accuracy: 1.0000 - val_loss: 0.0345 - val_accuracy: 1.0000\n","Epoch 81/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0346 - accuracy: 1.0000 - val_loss: 0.0335 - val_accuracy: 1.0000\n","Epoch 82/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0336 - accuracy: 1.0000 - val_loss: 0.0325 - val_accuracy: 1.0000\n","Epoch 83/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0326 - accuracy: 1.0000 - val_loss: 0.0315 - val_accuracy: 1.0000\n","Epoch 84/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0317 - accuracy: 1.0000 - val_loss: 0.0306 - val_accuracy: 1.0000\n","Epoch 85/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0307 - accuracy: 1.0000 - val_loss: 0.0297 - val_accuracy: 1.0000\n","Epoch 86/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0299 - accuracy: 1.0000 - val_loss: 0.0288 - val_accuracy: 1.0000\n","Epoch 87/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0290 - accuracy: 1.0000 - val_loss: 0.0280 - val_accuracy: 1.0000\n","Epoch 88/150\n","16/16 [==============================] - 0s 3ms/step - loss: 0.0282 - accuracy: 1.0000 - val_loss: 0.0273 - val_accuracy: 1.0000\n","Epoch 89/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0274 - accuracy: 1.0000 - val_loss: 0.0265 - val_accuracy: 1.0000\n","Epoch 90/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0267 - accuracy: 1.0000 - val_loss: 0.0258 - val_accuracy: 1.0000\n","Epoch 91/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0260 - accuracy: 1.0000 - val_loss: 0.0251 - val_accuracy: 1.0000\n","Epoch 92/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0253 - accuracy: 1.0000 - val_loss: 0.0244 - val_accuracy: 1.0000\n","Epoch 93/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0246 - accuracy: 1.0000 - val_loss: 0.0238 - val_accuracy: 1.0000\n","Epoch 94/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0240 - accuracy: 1.0000 - val_loss: 0.0231 - val_accuracy: 1.0000\n","Epoch 95/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0233 - accuracy: 1.0000 - val_loss: 0.0225 - val_accuracy: 1.0000\n","Epoch 96/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0227 - accuracy: 1.0000 - val_loss: 0.0220 - val_accuracy: 1.0000\n","Epoch 97/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0222 - accuracy: 1.0000 - val_loss: 0.0214 - val_accuracy: 1.0000\n","Epoch 98/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0216 - accuracy: 1.0000 - val_loss: 0.0209 - val_accuracy: 1.0000\n","Epoch 99/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0211 - accuracy: 1.0000 - val_loss: 0.0203 - val_accuracy: 1.0000\n","Epoch 100/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0205 - accuracy: 1.0000 - val_loss: 0.0198 - val_accuracy: 1.0000\n","Epoch 101/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0200 - accuracy: 1.0000 - val_loss: 0.0194 - val_accuracy: 1.0000\n","Epoch 102/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0196 - accuracy: 1.0000 - val_loss: 0.0189 - val_accuracy: 1.0000\n","Epoch 103/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0191 - accuracy: 1.0000 - val_loss: 0.0184 - val_accuracy: 1.0000\n","Epoch 104/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0186 - accuracy: 1.0000 - val_loss: 0.0180 - val_accuracy: 1.0000\n","Epoch 105/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0182 - accuracy: 1.0000 - val_loss: 0.0176 - val_accuracy: 1.0000\n","Epoch 106/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0178 - accuracy: 1.0000 - val_loss: 0.0172 - val_accuracy: 1.0000\n","Epoch 107/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0174 - accuracy: 1.0000 - val_loss: 0.0168 - val_accuracy: 1.0000\n","Epoch 108/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0170 - accuracy: 1.0000 - val_loss: 0.0164 - val_accuracy: 1.0000\n","Epoch 109/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0166 - accuracy: 1.0000 - val_loss: 0.0160 - val_accuracy: 1.0000\n","Epoch 110/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0162 - accuracy: 1.0000 - val_loss: 0.0157 - val_accuracy: 1.0000\n","Epoch 111/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0158 - accuracy: 1.0000 - val_loss: 0.0153 - val_accuracy: 1.0000\n","Epoch 112/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0155 - accuracy: 1.0000 - val_loss: 0.0150 - val_accuracy: 1.0000\n","Epoch 113/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0151 - accuracy: 1.0000 - val_loss: 0.0146 - val_accuracy: 1.0000\n","Epoch 114/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0148 - accuracy: 1.0000 - val_loss: 0.0143 - val_accuracy: 1.0000\n","Epoch 115/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0145 - accuracy: 1.0000 - val_loss: 0.0140 - val_accuracy: 1.0000\n","Epoch 116/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0142 - accuracy: 1.0000 - val_loss: 0.0137 - val_accuracy: 1.0000\n","Epoch 117/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0139 - accuracy: 1.0000 - val_loss: 0.0134 - val_accuracy: 1.0000\n","Epoch 118/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0136 - accuracy: 1.0000 - val_loss: 0.0131 - val_accuracy: 1.0000\n","Epoch 119/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0133 - accuracy: 1.0000 - val_loss: 0.0129 - val_accuracy: 1.0000\n","Epoch 120/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0130 - accuracy: 1.0000 - val_loss: 0.0126 - val_accuracy: 1.0000\n","Epoch 121/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0128 - accuracy: 1.0000 - val_loss: 0.0123 - val_accuracy: 1.0000\n","Epoch 122/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0125 - accuracy: 1.0000 - val_loss: 0.0121 - val_accuracy: 1.0000\n","Epoch 123/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0123 - accuracy: 1.0000 - val_loss: 0.0119 - val_accuracy: 1.0000\n","Epoch 124/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0120 - accuracy: 1.0000 - val_loss: 0.0116 - val_accuracy: 1.0000\n","Epoch 125/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0118 - accuracy: 1.0000 - val_loss: 0.0114 - val_accuracy: 1.0000\n","Epoch 126/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0115 - accuracy: 1.0000 - val_loss: 0.0112 - val_accuracy: 1.0000\n","Epoch 127/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0113 - accuracy: 1.0000 - val_loss: 0.0109 - val_accuracy: 1.0000\n","Epoch 128/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0111 - accuracy: 1.0000 - val_loss: 0.0107 - val_accuracy: 1.0000\n","Epoch 129/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0109 - accuracy: 1.0000 - val_loss: 0.0105 - val_accuracy: 1.0000\n","Epoch 130/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0107 - accuracy: 1.0000 - val_loss: 0.0103 - val_accuracy: 1.0000\n","Epoch 131/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0105 - accuracy: 1.0000 - val_loss: 0.0101 - val_accuracy: 1.0000\n","Epoch 132/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0103 - accuracy: 1.0000 - val_loss: 0.0099 - val_accuracy: 1.0000\n","Epoch 133/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0101 - accuracy: 1.0000 - val_loss: 0.0098 - val_accuracy: 1.0000\n","Epoch 134/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0099 - accuracy: 1.0000 - val_loss: 0.0096 - val_accuracy: 1.0000\n","Epoch 135/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0097 - accuracy: 1.0000 - val_loss: 0.0094 - val_accuracy: 1.0000\n","Epoch 136/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0095 - accuracy: 1.0000 - val_loss: 0.0092 - val_accuracy: 1.0000\n","Epoch 137/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0093 - accuracy: 1.0000 - val_loss: 0.0091 - val_accuracy: 1.0000\n","Epoch 138/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0092 - accuracy: 1.0000 - val_loss: 0.0089 - val_accuracy: 1.0000\n","Epoch 139/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0090 - accuracy: 1.0000 - val_loss: 0.0087 - val_accuracy: 1.0000\n","Epoch 140/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0088 - accuracy: 1.0000 - val_loss: 0.0086 - val_accuracy: 1.0000\n","Epoch 141/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0087 - accuracy: 1.0000 - val_loss: 0.0084 - val_accuracy: 1.0000\n","Epoch 142/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0085 - accuracy: 1.0000 - val_loss: 0.0083 - val_accuracy: 1.0000\n","Epoch 143/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0084 - accuracy: 1.0000 - val_loss: 0.0081 - val_accuracy: 1.0000\n","Epoch 144/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0082 - accuracy: 1.0000 - val_loss: 0.0080 - val_accuracy: 1.0000\n","Epoch 145/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0081 - accuracy: 1.0000 - val_loss: 0.0078 - val_accuracy: 1.0000\n","Epoch 146/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0079 - accuracy: 1.0000 - val_loss: 0.0077 - val_accuracy: 1.0000\n","Epoch 147/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0078 - accuracy: 1.0000 - val_loss: 0.0076 - val_accuracy: 1.0000\n","Epoch 148/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0077 - accuracy: 1.0000 - val_loss: 0.0074 - val_accuracy: 1.0000\n","Epoch 149/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0075 - accuracy: 1.0000 - val_loss: 0.0073 - val_accuracy: 1.0000\n","Epoch 150/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0074 - accuracy: 1.0000 - val_loss: 0.0072 - val_accuracy: 1.0000\n"]}],"source":["# train the model\n","history=model.fit(X_train, Y_train,\n"," validation_data=(X_val,Y_val),\n"," batch_size=64,\n"," epochs=150,\n"," verbose=1)"]},{"cell_type":"code","execution_count":10,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":428},"executionInfo":{"elapsed":468,"status":"ok","timestamp":1708799010370,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"fK_AAAoiQtlc","outputId":"3d6398a5-ac98-4759-cbaa-d7243e095e1b"},"outputs":[{"data":{"text/plain":[""]},"execution_count":10,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA+kAAAGJCAYAAAD2VnIMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACLD0lEQVR4nOzdeVxU9f7H8deZgRk22UTBBUXR3JdcMpduVhTlkpV5bTWtrEzL4le3vKXt2WJmi2V19baXNzNbLMssK/dyK/cVd1BERUAYmDm/PwanSFxA5Azwfj4e5wFz5pwz78Ogh898v+f7NUzTNBERERERERERy9msDiAiIiIiIiIiXirSRURERERERPyEinQRERERERERP6EiXURERERERMRPqEgXERERERER8RMq0kVERERERET8hIp0ERERERERET+hIl1ERERERETET6hIFxEREREREfETKtJFKrHU1FQMw+Dtt98u9b5z587FMAzmzp1b7rlERETEf1XE3w9vv/02hmGQmppapowi1ZmKdBERERERERE/oSJdRERERERExE+oSBeRKiUnJ8fqCCIiIiIiZaYiXeQ0PProoxiGwYYNG7jhhhuIiIigVq1ajB49GtM02bFjB/369SM8PJy4uDheeOGFY46xd+9ebrnlFmJjYwkKCqJdu3a88847x2x38OBBBg8eTEREBJGRkdx0000cPHiwxFzr1q3j6quvJjo6mqCgIDp16sQXX3xRpnPctm0bd955J82aNSM4OJiaNWsyYMCAEu8xO3jwIPfeey8JCQk4nU7q16/PoEGDyMjI8G2Tl5fHo48+yllnnUVQUBB16tThqquuYvPmzcDx73Ur6f65wYMHExYWxubNm+nVqxc1atTg+uuvB+CXX35hwIABNGjQAKfTSXx8PPfeey9Hjhwp8ef1z3/+k1q1ahEcHEyzZs146KGHAPjxxx8xDIPPPvvsmP0+/PBDDMNg4cKFpf2xiohINVYd/n44ntdee41WrVrhdDqpW7cuw4cPPybPxo0b6d+/P3FxcQQFBVG/fn2uueYaDh065Ntm9uzZ9OjRg8jISMLCwmjWrBn//ve/yzWriFUCrA4gUhUMHDiQFi1a8MwzzzBz5kyefPJJoqOjeeONN7jwwgt59tln+eCDD7jvvvvo3Lkz//jHPwA4cuQIPXv2ZNOmTYwYMYJGjRrxySefMHjwYA4ePMjIkSMBME2Tfv36MW/ePO644w5atGjBZ599xk033XRMltWrV9O9e3fq1avHgw8+SGhoKP/73/+44oor+PTTT7nyyitLdW6//vorCxYs4JprrqF+/fqkpqby+uuv07NnT9asWUNISAgA2dnZnHfeeaxdu5abb76ZDh06kJGRwRdffMHOnTuJiYnB7XbTp08f5syZwzXXXMPIkSM5fPgws2fPZtWqVSQmJpb6Z19YWEhycjI9evRg3LhxvjyffPIJubm5DBs2jJo1a7JkyRJeeeUVdu7cySeffOLb//fff+e8884jMDCQ2267jYSEBDZv3syXX37JU089Rc+ePYmPj+eDDz445mf3wQcfkJiYSNeuXUudW0REpCr//VCSRx99lMcee4ykpCSGDRvG+vXref311/n111+ZP38+gYGBuFwukpOTyc/P56677iIuLo5du3bx1VdfcfDgQSIiIli9ejV9+vShbdu2PP744zidTjZt2sT8+fNPO6OIXzBFpMweeeQREzBvu+0237rCwkKzfv36pmEY5jPPPONbf+DAATM4ONi86aabfOsmTJhgAub777/vW+dyucyuXbuaYWFhZlZWlmmapjljxgwTMJ977rlir3PeeeeZgPnf//7Xt/6iiy4y27RpY+bl5fnWeTwes1u3bmbTpk1963788UcTMH/88ccTnmNubu4x6xYuXGgC5rvvvutbN2bMGBMwp0+ffsz2Ho/HNE3TnDJligmY48ePP+42x8u1devWY871pptuMgHzwQcfPKXcY8eONQ3DMLdt2+Zb949//MOsUaNGsXV/zWOapjlq1CjT6XSaBw8e9K3bu3evGRAQYD7yyCPHvI6IiMiJVIe/H/773/+agLl161bTNL3XTYfDYV5yySWm2+32bffqq6+agDllyhTTNE1z+fLlJmB+8sknxz32iy++aALmvn37TphBpLJSd3eRcnDrrbf6vrfb7XTq1AnTNLnlllt86yMjI2nWrBlbtmzxrfv666+Ji4vj2muv9a0LDAzk7rvvJjs7m59++sm3XUBAAMOGDSv2OnfddVexHJmZmfzwww/885//5PDhw2RkZJCRkcH+/ftJTk5m48aN7Nq1q1TnFhwc7Pu+oKCA/fv306RJEyIjI1m2bJnvuU8//ZR27dqV+Em7YRi+bWJiYo7J/ddtyuKvP5eS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OXLkhD83ERGR46kOfz/8fQq2o1599VWzefPmZmBgoBkbG2sOGzbMPHDggO/5LVu2mDfffLOZmJhoBgUFmdHR0eYFF1xgfv/9975t5syZY/br18+sW7eu6XA4zLp165rXXnutuWHDhhNmEqksDNM8g6NQiIhUIYWFhdStW5e+ffsyefJkq+OIiIiISBWke9JFRE7RjBkz2LdvX7HB6EREREREypNa0kVETmLx4sX8/vvvPPHEE8TExLBs2TKrI4mIiIhIFaWWdBGRk3j99dcZNmwYtWvX5t1337U6joiIiIhUYWpJFxEREREREfETakkXERERERER8RMq0kVERERERET8RIDVASqax+Nh9+7d1KhRA8MwrI4jIiKCaZocPnyYunXrYrPp8/PyoOu9iIj4k9Jc66tdkb57927i4+OtjiEiInKMHTt2UL9+fatjVAm63ouIiD86lWt9tSvSa9SoAXh/OOHh4RanERERgaysLOLj433XKDl9ut6LiIg/Kc21vtoV6Ue7vIWHh+uiLSIifkXdssuPrvciIuKPTuVarxvfRERERERERPyEinQRERERERERP6EiXURERERERMRPVLt70kVERERERKQ40zQpLCzE7XZbHaXSCgwMxG63n/ZxVKSLiIiIiIhUYy6Xiz179pCbm2t1lErNMAzq169PWFjYaR1HRbqIiIiIiEg15fF42Lp1K3a7nbp16+JwODTbSBmYpsm+ffvYuXMnTZs2Pa0WdRXpIiIiIiIi1ZTL5cLj8RAfH09ISIjVcSq1WrVqkZqaSkFBwWkV6ZYOHPfzzz/Tt29f6tati2EYzJgx46T7zJ07lw4dOuB0OmnSpAlvv/32Gc8pIiIiIiJSldlsGlP8dJVXDwRL34mcnBzatWvHxIkTT2n7rVu30rt3by644AJWrFjBPffcw6233sq33357hpOKiIiIiIiInHmWdne/7LLLuOyyy055+0mTJtGoUSNeeOEFAFq0aMG8efN48cUXSU5OPlMx5W/mbcwgO78Ae2Eu4QdW43AdOOk+seFB1I0IBuBIoZt1e7Kw2wza1ov0bbNxbzbZ+QWlylIz1EmDaG+3nAKPh1W7DgHQPj4SA+8nWVv353Aw11Wq40YEO2gcE+p7vHyH9xxb1Y3AYfd+trX9QC77s/NLddwQRwDNYmv4Hv+x6yCFHpNmceGEBHq7xOw5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20PtnPUs2ZppdSIRETlFZar6du3axYgRI5g2bRqNGzcmOTmZ//3vf7hcrvLOV8zcuXN5+umnee2111i2bBnTp09n5syZPPHEE8fdZ9SoURw6dMi3lPVDBcu4/5wnXfeki4iIyClx1sA461IApnTYStfEmhYHEhGRU1Wmqi8mJoZ7772XFStWsHjxYs466yzuvPNO6taty913383KlStP6Rh2u5309PRi69PT04mLiytxn9GjR3PjjTdy66230qZNG6688kqefvppxo4di8dTcjcup9NJeHh4saVSKeru7jbsBKhIFxERkVPVdiAAsdu+wjDV3V1EpLI47aqvQ4cOjBo1ihEjRpCdnc2UKVPo2LEj5513HqtXrz7ufg6Hg44dOzJnzhzfOo/Hw5w5c+jatWuJ++Tm5mKzFY9st9sBqu70IkUDxxn2QIuDiIiISKXSJAmCoyA7Dbb+bHUaERE5RWUu0gsKCpg2bRq9evWiYcOGfPvtt7z66qukp6ezadMmGjZsyIABA054jJSUFN566y3eeecd1q5dy7Bhw8jJyWHIkCEADBo0iFGjRvm279u3L6+//joff/wxW7duZfbs2YwePZq+ffv6ivWqxnAfLdIdFicRERGRSiXAAa2uBGDpV5O4+6PlFgcSEZFTEVCWne666y4++ugjTNPkxhtv5LnnnqN169a+50NDQxk3bhx169Y94XEGDhzIvn37GDNmDGlpabRv355Zs2b5BpPbvn17sZbzhx9+GMMwePjhh9m1axe1atWib9++PPXUU2U5jcqhqCX9tUHnWhxEREREKp02/4TfpnBW5k98nzaQfX1aUquG0+pUIiJyAoZZhn7iF110EbfeeitXXXUVTmfJ/9EXFhYyf/58zj///NMOWZ6ysrKIiIjg0KFD/n9/uscNj0d7v//XVgiJtjaPiIicEZXq2lRJ6GdaxOOBl9vBwe2sP+8lmlxwE3abYXUqEZFqpzTXpTK1pP/1PvLjHjggwO8K9EqnqKs7ALYyvVUiIiJSndls0GYA/PICzdJngW2w1YlEROQkynRP+tixY5kyZcox66dMmcKzzz572qGkiPvPKe0+WV7y3PEiIiKVwcSJE0lISCAoKIguXbqwZMmSU9rv448/xjAMrrjiijMbsCpr80/v102zIWe/tVlEROSkylSkv/HGGzRv3vyY9a1atWLSpEmn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H34gJiYGm82G3W6nR48ejB07lrvvvpvly5ef0nFONJjMunXrTrr/kiVLWLVqFZMnTz7uNmPHjuWxxx47pTx+5eigcQD2QOtyiIiInKaBAweyb98+xowZQ1paGu3bt2fWrFm+6//27dux2f5sN8jJyeHOO+9k586dBAcH07x5c95//30GDhxo1SnIUTFNMVr2gzUzuDPgC576sSkDO8erNV1EpByVqSXd7XZTo0YNwHuv2e7duwFo2LAh69evL790JzF58mTatGnDOeecc9xtKu1AMu6/FOk2FekiIlK5jRgxgm3btpGfn8/ixYvp0qWL77m5c+fy9ttv+x4/+eSTbNy4kSNHjpCZmcmCBQtUoPuT8/4PgD72RYRkp/LB4u0WBxIRqVrKVKS3bt2alStXAtClSxeee+455s+fz+OPP07jxo1P+ThlHUwGvJ+yf/zxx9xyyy0n3M7pdBIeHl5sqRT+UqR/uHS3hUFERERE/qJOW2iajB0PdwXM4PW5m8h1FVqdSkSkyihTkf7www/j8XgAePzxx9m6dSvnnXceX3/9NS+//PIpH+evg8kcdXQwma5du55w308++YT8/Pyqe39aUXd3j2ngNsv0NomIiIicGT29g/teYZ9PRM5W3l24zeJAIiJVR5nuSU9OTvZ936RJE9atW0dmZiZRUVHFRnk/FSkpKdx000106tSJc845hwkTJhwzmEy9evUYO3Zssf0mT57MFVdcQc2aNctyCv6vqCW9gAAcASrSRURExI/U6wDN+2Bf9xX3Bkxj9E8J3HBuQ8KcZZ7dV0REipTb/6R/nxrtVJV2MBmA9evXM2/ePL777rvTzu23PEeLdLuKdBEREfE/F/wbc91M+tgX8/qRjbyzoDHDL2hidSoRkUrPLz7uHDFixHHnSi1pSrdmzZphmuYZTmWxopb0Quw47BoxVURERPxMbCuM1v1h1TReip1J9DlDrU4kIlIlqInWX7nVki4iIiJ+7oJ/g2GnycH5RGeusDqNiEiVoOrPX3l0T7qIiIj4uZqJ0P467/c/PAFAodtjYSARkcpP1Z+/cnunMik07TjseptERETET53/L7AFwtafeeKV13n+2/VWJxIRqdRU/fkrtaSLiIhIZRDZADp5Z+Xpve8/fLRkGzn5mjddRKSsVP35K7cL8A4c51SRLiIiIv7svP/DDAimg20TP16e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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# plot the development of the accuracy and loss during training\n","plt.figure(figsize=(12,4))\n","plt.subplot(1,2,(1))\n","plt.plot(history.history['accuracy'],linestyle='-.')\n","plt.plot(history.history['val_accuracy'])\n","plt.title('model accuracy')\n","plt.ylabel('accuracy')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='lower right')\n","plt.subplot(1,2,(2))\n","plt.plot(history.history['loss'],linestyle='-.')\n","plt.plot(history.history['val_loss'])\n","plt.title('model loss')\n","plt.ylabel('loss')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='upper right')"]},{"cell_type":"markdown","metadata":{"id":"uOwR3Esbw8eN"},"source":["### Visualize the learned kernel and experiment with the code\n","\n","You see that the CNN performs very good at this task (100% accuracy). We can check which pattern is recognized by the **learned kernel** and see if you think that this is helpful to distinguish between images with horizontal and vertical edges.\n","\n","Below you can see the original image, the image after the convolution operation with the learned kernel and the maximum value from the maxpooling operation. Note that the maxpooling has the same size as the convolved image so there is just one value as output.\n","\n","Move the sliders to inspect different pictures from the validation set and their predictions\n","\n","\n"]},{"cell_type":"code","execution_count":11,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":935,"referenced_widgets":["2b9eb29c4c4d4b44b1e5592233ae4dab","11b66fd5176b475ba5c69140eae37d62","ed53a993099641bb86c8d7a10fc17bdb","e905c391b1d644bc9f0b59976800f391","3ee2908fbdce4081a6bb10c970fa187d","9b72172c1a1c46439102f6059066a39f","613f8f4d5b0e4816aa55033960822230","5f1c8af64c254ffdb40ba8499cac6ca8","1140e90db2fc4b9c91cbbe362767d65d","f7e38cbf0fa84263916f1c8dbcf4c53c"]},"executionInfo":{"elapsed":1357,"status":"ok","timestamp":1708799011724,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"pl1yuAddVRnE","outputId":"6eb7bfed-14c1-4975-d9e9-385c6412784a"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAtcAAAEpCAYAAABY/g6pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAz50lEQVR4nO3dd3gU9drG8XuTkA2EEFpoJhQBjTEUDYL0CCgigiAqKkgAC2LotsN5jyK2IJaD0sQGKiAISFFBBKSqSBNpyhEFTgAhNBOkBJL83j94d182dXczm03w+7muvbj2l9mdh8nMPPfOzkxsxhgjAAAAAIUW4O8CAAAAgMsF4RoAAACwCOEaAAAAsAjhGgAAALAI4RoAAACwCOEaAAAAsAjhGgAAALAI4RoAAACwCOEaAAAAsAjh+v/07dtXtWvXvizmXbt2bfXt29er18bHxys+Pt6yWiTpueeek81mcxkrTI3emjZtmmw2m/bt21ek882uML/vvn37qmzZstYWBMAvfLG/LW5WrVolm82mVatWuTX92LFjFR0draysLN8W9n/27dsnm82madOmef3a1157zfrCLvHVV1+pbNmyOnr0qOXvbbPZNGjQIMvft7ix2Wx67rnnPH6dt+tHkYdrR8BxPIKCgnTFFVeob9++OnjwYFGXgwIcOnRIzz33nLZu3ervUuCBM2fO6LnnnnO7oQH+4ugJmzZt8ncpxVbt2rV1++235xj/+OOPFRgYqFtvvVXnzp3zQ2XWSktL0yuvvKKnn35aAQGX17G/xYsXexXuJOnWW29VvXr1lJSUZG1R8Jkgf834+eefV506dXTu3DmtX79e06ZN07p167Rjxw6FhIT4q6zLwu7du73eMX399dcuzw8dOqTRo0erdu3aaty4sQXVXVSYGku6d9991+dHZc6cOaPRo0dL0mV/ZAz4O5oxY4b69u2rDh06aMGCBZdF3/zggw+UkZGh++67r8jmWatWLZ09e1alSpXy6XwWL16siRMneh2wBwwYoCeeeEKjR49WWFiYtcXBcn5LN506dVLv3r310EMP6b333tMTTzyh3377TYsWLfJXSZcNu93u9Y4iODhYwcHBFleUU2FqLOlKlSolu93u7zIAXCIjI0Pnz5/3dxlumTVrlhISEtSuXTstXLjQkmB95swZCyornKlTp6pr165F+kHBZrMpJCREgYGBRTZPb/To0UPp6emaM2eOv0uBG4rNocPWrVtLkn777Tfn2Pnz5/Xss88qLi5O4eHhCg0NVevWrbVy5UqX11563tM777yjunXrym6364YbbtDGjRtzzGvBggWKjY1VSEiIYmNjNX/+/FxrOn36tB5//HFFRUXJbrfr6quv1muvvSZjjMt0jnOW5syZo5iYGJUuXVrNmzfX9u3bJUlTpkxRvXr1FBISovj4+HzP+TXGqHbt2rrjjjty/OzcuXMKDw/XgAED8ny9lPN8ZsfXrt9++61GjBihiIgIhYaGqnv37jnO4br0HMBVq1bphhtukCT169fPeSqP49yjtWvX6u6771bNmjVlt9sVFRWl4cOH6+zZs/nWl1uNl54qlP1x6fL65ZdfdNddd6lixYoKCQlRkyZNcv1AtnPnTrVr106lS5dWZGSkXnzxRbeOFi9atEg2m03btm1zjs2bN082m0133nmny7TXXHONevbs6TI2ffp0xcXFqXTp0qpYsaLuvfdeJScnu0yT2znXx48f1wMPPKBy5cqpfPnySkhI0E8//ZTnuV4HDx5Ut27dVLZsWUVEROiJJ55QZmampIvbQ0REhCRp9OjRzuXoOGJy+PBh9evXT5GRkbLb7apevbruuOMOv5+LDuTn4MGD6t+/v6pWrSq73a5rr71WH3zwgcs03vSMcePGOXvGrl27nNeI7NmzR3379lX58uUVHh6ufv365RpA3dnmJTl7U+nSpdW0aVOtXbvWq+Xw6aefqnfv3oqPj9eiRYtyBFF36omPj1dsbKw2b96sNm3aqEyZMvrnP//pcS91d3/sjr1792rbtm3q0KGDy/j111+fY9/boEGDHPvp2bNny2az6eeff3aOubPO5HVOraOfX5oT8rteJr/l1bdvX02cOFGSa69zmDVrluLi4hQWFqZy5cqpQYMGevPNN13ev0qVKmrYsKEWLlyYxxIsnBkzZujqq69WSEiI4uLitGbNGufPVq5cKZvNlmtWmjlzpmw2m77//vs839uRQdatW6chQ4YoIiJC5cuX14ABA3T+/Hn9+eef6tOnjypUqKAKFSroqaeeypGz3M1j6enpGj58uCIiIhQWFqauXbvqwIEDudblzvrhLb+dFpKdo7FXqFDBOZaWlqb33ntP9913nx5++GGdOnVK77//vjp27KgNGzbkOE1h5syZOnXqlAYMGCCbzaaxY8fqzjvv1O+//+48Svr111+rR48eiomJUVJSko4fP+4MGpcyxqhr165auXKlHnzwQTVu3FhLly7Vk08+qYMHD+rf//63y/Rr167VokWLlJiYKElKSkrS7bffrqeeekqTJk3SY489ppMnT2rs2LHq37+/vvnmm1yXg81mU+/evTV27FidOHFCFStWdP7s888/V1pamnr37u3VMh48eLAqVKigUaNGad++fRo3bpwGDRqk2bNn5zr9Nddco+eff17PPvusHnnkEecHoBYtWki6uPM5c+aMBg4cqEqVKmnDhg0aP368Dhw44PGn648//jjH2L/+9S+lpKQ4L+DbuXOnWrZsqSuuuEL/+Mc/FBoaqk8//VTdunXTvHnz1L17d0kXw+NNN92kjIwM53TvvPOOSpcuXWAdrVq1ks1m05o1a9SwYUNJF3+3AQEBWrdunXO6o0eP6pdffnG5EOSll17SM888o3vuuUcPPfSQjh49qvHjx6tNmzb68ccfVb58+VznmZWVpS5dumjDhg0aOHCgoqOjtXDhQiUkJOQ6fWZmpjp27KhmzZrptdde0/Lly/X666+rbt26GjhwoCIiIjR58mQNHDhQ3bt3dzYmx/+nR48e2rlzpwYPHqzatWsrJSVFy5Yt03//+1+/XdQL5OfIkSO68cYbnQcyIiIitGTJEj344INKS0vTsGHDJHneM6ZOnapz587pkUcekd1ud9nf3nPPPapTp46SkpK0ZcsWvffee6pSpYpeeeUV5zTubvPvv/++BgwYoBYtWmjYsGH6/fff1bVrV1WsWFFRUVFuL4d58+apV69eatOmjT7//PMc+zRP9kHHjx9Xp06ddO+996p3796qWrWq82fu9FJ398fu+u677yRdDNOXat26tT755BPn8xMnTmjnzp0KCAjQ2rVrXfbTERERuuaaayS5v87k5ssvv1TPnj3VoEEDJSUl6eTJk3rwwQd1xRVX5Dp9QctrwIABOnTokJYtW5aj1y1btkz33Xef2rdv71y3fv75Z3377bcaOnSoy7RxcXFasGBBwQvTQ6tXr9bs2bM1ZMgQ2e12TZo0Sbfeeqs2bNig2NhYxcfHKyoqSjNmzMjxe50xY4bq1q2r5s2bFzifwYMHq1q1aho9erTWr1+vd955R+XLl9d3332nmjVr6uWXX9bixYv16quvKjY2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P//srC03+/fvV/Xq1VWmTBmX8Xr16uU6fUhISI5AUKFCBbd+j3a7Xa+88oqWLFmiqlWrqk2bNho7dqwOHz5c4GsBfzh69Kj+/PNPvfPOOzm2LUc4vHT78qRn1KlTJ8/5FrS/dHebz6vvlCpVSldeeaXby6F9+/YaOHCgpk+fnutX1p7ug6644oo8L14v6P/uyf64sKpWrar69eu77Htbt26tNm3a6NChQ/r999/17bffKisryxlqPV1nLuX4feW2/81rn1yY3vrYY4/pqquuUqdOnRQZGan+/fvrq6++ynVa83/nF3t7gC0vufXLq666SmfOnHFelxUdHa0bbrjB5aDfjBkzdOONN+a5XLLzJCdduuzczWP79+9XQECA6tat6zJd9t5fmPXDXX4757pp06Zq0qSJJKlbt25q1aqV7r//fu3evdv5aXH69Onq27evunXrpieffFJVqlRRYGCgkpKSXC58dMjral/HCulLec3b25ruvfdeDR8+XDNmzNA///lPTZ8+XU2aNHE7IFpZS24yMzN1880368SJE3r66acVHR2t0NBQHTx4UH379vXqVnPnz5/XXXfdJbvdrk8//VRBQf+/ejre74knnlDHjh1zfb27G3hBWrVqJenikZLff/9d119/vfPCqLfeekt//fWXfvzxR7300ksu9dlsNi1ZsiTX5WzlH34p7FXtw4YNU5cuXbRgwQItXbpUzzzzjJKSkvTNN9/ouuuus6hKwBqObb937955XofgOO/W056R33UYBe0vi3Kbd5gwYYJOnjypt956SxUqVHC5rZun9RT2/y5Zuz+uVKmSMjIydOrUqRwhqlWrVlqxYoXOnj2rzZs369lnn1VsbKzKly+vtWvX6ueff1bZsmWd+y9P1hkrFKa3VqlSRVu3btXSpUu1ZMkSLVmyRFOnTlWfPn304YcfukzrCJyVK1cufNFe6NOnj4YOHaoDBw4oPT1d69ev14QJE9x+vSc5yZe5rSjWj2JxQaNj53fTTTdpwoQJ+sc//iFJmjt3rq688kp99tlnLp/UHJ+MPVWrVi1JFz/hZ7d79+4c0y5fvjzHhv7LL7+4vJevVKxYUZ07d9aMGTPUq1cvffvttxo3bpxP55mbvD4hb9++Xf/5z3/04YcfOi86kOTWV1t5GTJkiLZu3ao1a9a4XFwjyXmEp1SpUjmuJs+uVq1a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","text/plain":["
"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["\n","---------Move the sliders to inspect different vertical and horizontal images from the valset and their predictions:------------------\n","\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"ad5c288dc71b4e78be71f1ddd09b70f1","version_major":2,"version_minor":0},"text/plain":["interactive(children=(IntSlider(value=0, description='vertical ', max=499), IntSlider(value=500, description='…"]},"metadata":{},"output_type":"display_data"}],"source":["## Do not worry about this cell, just move the sliders.\n","import scipy.signal\n","from skimage.measure import block_reduce # For max pooling\n","import ipywidgets as widgets\n","\n","# Kernel from model\n","plt.figure(figsize=(10, 3))\n","plt.subplot(1, 2, 1)\n","plt.imshow(np.random.rand(25).reshape(5, 5),\"gray\") ,plt.title('Randomly initalized weights')\n","plt.subplot(1, 2, 2)\n","conv_filter=np.squeeze(model.get_weights()[0], axis=2)\n","plt.imshow(conv_filter[:,:,0],\"gray\"),plt.title('Learned Kernel (weights) , by model'),plt.show();\n","print(\"\\n---------Move the sliders to inspect different vertical and horizontal images from the valset and their predictions:------------------\\n\")\n","\n","def scale_convolution_map(conv_map, min_val=-3, max_val=3):\n"," clipped_conv_map = np.clip(conv_map, min_val, max_val)\n"," scaled_conv_map = (clipped_conv_map - min_val) / (max_val - min_val)\n"," return scaled_conv_map\n","\n","def plot_conv(img):\n"," convolved_image = scipy.signal.convolve2d(img.squeeze(), conv_filter.squeeze(), mode='same')\n"," scaled_conv_image = scale_convolution_map(convolved_image+model.get_weights()[1])\n"," max_pooled_image = block_reduce(convolved_image+model.get_weights()[1], block_size=(50, 50), func=np.max)\n"," scaled_max_pooled_image = scale_convolution_map(max_pooled_image)\n"," plt.figure(figsize=(10, 3))\n"," plt.subplot(1, 4, 1), plt.imshow(img,\"gray\", vmin=0, vmax=1),plt.title(f'Original Image')\n"," plt.subplot(1, 4, 2),plt.imshow(scaled_conv_image,\"gray\", vmin=0, vmax=1),plt.title('Convolved Image')\n"," plt.subplot(1, 4, 3)\n"," plt.imshow(scaled_max_pooled_image, \"gray\",vmin=0, vmax=1),plt.title(f'Max Pooled (just 1 value here) = {max_pooled_image[0][0]:.2f} ',fontsize=8)\n"," plt.xticks([]),plt.yticks([])\n"," plt.subplot(1, 4, 4)\n"," pred=model.predict(img.reshape(1, 50, 50, 1),verbose=0)\n"," plt.text(0.5, 0.6, f'P(y=vertical|x): {pred[0][0]:.4f}')\n"," plt.text(0.5, 0.4, f'P(y=horizontal|x): {pred[0][1]:.4f}')\n"," plt.axis('off'),plt.show();\n","\n","def inspect_preds(horizontal,vertical):\n"," plot_conv(X_val[horizontal,:,:,0])\n"," plot_conv(X_val[vertical,:,:,0])\n","\n","horizontal_slider = widgets.IntSlider(min=0, max=num_images_val//2-1, step=1, value=0, description='vertical ')\n","vertical_slider = widgets.IntSlider(min=num_images_val//2, max=num_images_val-1, step=1, value=0, description='horizontal')\n","widgets.interact(inspect_preds, horizontal=horizontal_slider, vertical=vertical_slider);"]},{"cell_type":"markdown","metadata":{"id":"U4gnnlAPp_Q2"},"source":["### Repeat the training and experiment with the kernelsize and activation function.\n","\n","**Exercise**:\n","- Repeat the compiling and training, beginning from the cell:\n","\n","```\n","model = Sequential()\n"," \n"," ...\n"," \n","model.compile(loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy'])\n","```\n","\n","for several times and check if the CNN always learns the same kernel. \n","\n","- You can experiment with the code and check what happens if you use another kernel size, activation function (relu instead of linear ) or pooling method AveragePooling instead of MaxPooling. Try to make a prediction on the performance before doing the experiment.\n","\n","\n"]},{"cell_type":"markdown","metadata":{"id":"qjHAJkDVP8fN"},"source":["## Answer:\n","\n","- No it does not, sometimes it learns the horizontal patterns, and sometimes the vertical pattern.\n","\n","-"]},{"cell_type":"code","execution_count":12,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"elapsed":38402,"status":"ok","timestamp":1708799050120,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"8YwThvI9QzzM","outputId":"18e6fbe4-7bc3-4589-d54a-9dc3157a9b2d"},"outputs":[{"name":"stdout","output_type":"stream","text":["Epoch 1/40\n","16/16 [==============================] - 0s 6ms/step - loss: 0.8904 - accuracy: 0.5000 - val_loss: 0.8370 - val_accuracy: 0.5000\n","Epoch 2/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.8097 - accuracy: 0.5000 - val_loss: 0.7707 - val_accuracy: 0.5000\n","Epoch 3/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.7491 - accuracy: 0.5000 - val_loss: 0.7162 - val_accuracy: 0.5000\n","Epoch 4/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.7005 - accuracy: 0.5000 - val_loss: 0.6742 - val_accuracy: 0.5000\n","Epoch 5/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6624 - accuracy: 0.5000 - val_loss: 0.6410 - val_accuracy: 0.5000\n","Epoch 6/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6338 - accuracy: 0.5000 - val_loss: 0.6169 - val_accuracy: 0.5000\n","Epoch 7/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6107 - accuracy: 0.5000 - val_loss: 0.5973 - val_accuracy: 0.5000\n","Epoch 8/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5913 - accuracy: 0.5000 - val_loss: 0.5798 - val_accuracy: 0.5000\n","Epoch 9/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5737 - accuracy: 0.5000 - val_loss: 0.5633 - val_accuracy: 0.5000\n","Epoch 10/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5574 - accuracy: 0.5000 - val_loss: 0.5481 - val_accuracy: 0.5000\n","Epoch 11/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5421 - accuracy: 0.5440 - val_loss: 0.5336 - val_accuracy: 0.6240\n","Epoch 12/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5279 - accuracy: 0.7870 - val_loss: 0.5200 - val_accuracy: 0.8190\n","Epoch 13/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5148 - accuracy: 0.8190 - val_loss: 0.5078 - val_accuracy: 0.8360\n","Epoch 14/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5032 - accuracy: 0.8310 - val_loss: 0.4968 - val_accuracy: 0.8370\n","Epoch 15/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4921 - accuracy: 0.8360 - val_loss: 0.4860 - val_accuracy: 0.8500\n","Epoch 16/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4811 - accuracy: 0.8560 - val_loss: 0.4750 - val_accuracy: 0.8670\n","Epoch 17/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4703 - accuracy: 0.8630 - val_loss: 0.4642 - val_accuracy: 0.8720\n","Epoch 18/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4595 - accuracy: 0.8650 - val_loss: 0.4537 - val_accuracy: 0.8880\n","Epoch 19/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4489 - accuracy: 0.8850 - val_loss: 0.4430 - val_accuracy: 0.8930\n","Epoch 20/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4382 - accuracy: 0.8940 - val_loss: 0.4325 - val_accuracy: 0.9030\n","Epoch 21/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4277 - accuracy: 0.9150 - val_loss: 0.4218 - val_accuracy: 0.9260\n","Epoch 22/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4171 - accuracy: 0.9290 - val_loss: 0.4116 - val_accuracy: 0.9260\n","Epoch 23/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4068 - accuracy: 0.9310 - val_loss: 0.4014 - val_accuracy: 0.9340\n","Epoch 24/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3968 - accuracy: 0.9330 - val_loss: 0.3912 - val_accuracy: 0.9340\n","Epoch 25/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3867 - accuracy: 0.9340 - val_loss: 0.3812 - val_accuracy: 0.9340\n","Epoch 26/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3768 - accuracy: 0.9340 - val_loss: 0.3712 - val_accuracy: 0.9340\n","Epoch 27/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3668 - accuracy: 0.9340 - val_loss: 0.3614 - val_accuracy: 0.9340\n","Epoch 28/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3571 - accuracy: 0.9340 - val_loss: 0.3516 - val_accuracy: 0.9350\n","Epoch 29/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3475 - accuracy: 0.9340 - val_loss: 0.3424 - val_accuracy: 0.9360\n","Epoch 30/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3386 - accuracy: 0.9340 - val_loss: 0.3339 - val_accuracy: 0.9360\n","Epoch 31/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3303 - accuracy: 0.9340 - val_loss: 0.3258 - val_accuracy: 0.9360\n","Epoch 32/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3224 - accuracy: 0.9340 - val_loss: 0.3180 - val_accuracy: 0.9360\n","Epoch 33/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3148 - accuracy: 0.9370 - val_loss: 0.3105 - val_accuracy: 0.9360\n","Epoch 34/40\n","16/16 [==============================] - 0s 3ms/step - loss: 0.3074 - accuracy: 0.9370 - val_loss: 0.3032 - val_accuracy: 0.9360\n","Epoch 35/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3002 - accuracy: 0.9370 - val_loss: 0.2962 - val_accuracy: 0.9370\n","Epoch 36/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2933 - accuracy: 0.9390 - val_loss: 0.2893 - val_accuracy: 0.9380\n","Epoch 37/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2866 - accuracy: 0.9420 - val_loss: 0.2827 - val_accuracy: 0.9450\n","Epoch 38/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2800 - accuracy: 0.9470 - val_loss: 0.2762 - val_accuracy: 0.9450\n","Epoch 39/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2736 - accuracy: 0.9470 - val_loss: 0.2699 - val_accuracy: 0.9450\n","Epoch 40/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2675 - accuracy: 0.9470 - val_loss: 0.2639 - val_accuracy: 0.9450\n"]},{"data":{"text/plain":[""]},"execution_count":12,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA+kAAAGJCAYAAAD2VnIMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACgaklEQVR4nOzdd3iTVRvH8W+SNp20pXQxCgVk7y1LUUGUISIiCMpQUREQqfoKiqCo4ERQUByAW1EEREGUJXvJ3ntDSwu0he4mz/tHIFgpSEtpOn6f63quJucZuZPXlyd3zjn3MRmGYSAiIiIiIiIiLmd2dQAiIiIiIiIi4qAkXURERERERCSfUJIuIiIiIiIikk8oSRcRERERERHJJ5Ski4iIiIiIiOQTStJFRERERERE8gkl6SIiIiIiIiL5hJJ0ERERERERkXxCSbqIiIiIiIhIPqEkXaQAO3ToECaTiS+++CLb5/7111+YTCb++uuvXI9LRERE8q+8+P7wxRdfYDKZOHToUI5iFCnKlKSLiIiIiIiI5BNK0kVERERERETyCSXpIlKoJCYmujoEEREREZEcU5Iuch1eeeUVTCYTe/bs4aGHHsLf35/g4GBefvllDMPg6NGjdOrUCT8/P8LCwnjvvfcuu8apU6d49NFHCQ0NxdPTkzp16vDll19edlxcXBx9+vTB39+fgIAAevfuTVxcXJZx7dq1i/vvv5/AwEA8PT1p2LAhs2fPztF7PHz4ME899RRVqlTBy8uLEiVK0LVr1yznmMXFxTFkyBAiIiLw8PCgTJky9OrVi9jYWOcxKSkpvPLKK1SuXBlPT09KlizJfffdx/79+4Erz3XLav5cnz598PX1Zf/+/bRr145ixYrRs2dPAJYtW0bXrl0pW7YsHh4ehIeHM2TIEJKTk7P8vB544AGCg4Px8vKiSpUqvPTSSwAsXrwYk8nEzJkzLzvvu+++w2QysWrVqux+rCIiUoQVhe8PV/LRRx9Ro0YNPDw8KFWqFAMGDLgsnr1799KlSxfCwsLw9PSkTJkydO/enfj4eOcx8+fPp0WLFgQEBODr60uVKlV48cUXczVWEVdxc3UAIoVBt27dqFatGm+++SZz5szh9ddfJzAwkE8++YTbb7+dt956i2+//ZbnnnuORo0accsttwCQnJxMq1at2LdvHwMHDqR8+fL89NNP9OnTh7i4OAYPHgyAYRh06tSJ5cuX8+STT1KtWjVmzpxJ7969L4tl+/btNG/enNKlSzN06FB8fHz48ccfuffee/n555/p3Llztt7bunXrWLlyJd27d6dMmTIcOnSIjz/+mFatWrFjxw68vb0BOH/+PC1btmTnzp088sgj1K9fn9jYWGbPns2xY8cICgrCZrPRoUMHFi5cSPfu3Rk8eDDnzp1j/vz5bNu2jYoVK2b7s8/IyKBt27a0aNGCd9991xnPTz/9RFJSEv3796dEiRKsXbuWDz/8kGPHjvHTTz85z9+yZQstW7bE3d2dxx9/nIiICPbv38+vv/7KG2+8QatWrQgPD+fbb7+97LP79ttvqVixIk2bNs123CIiIoX5+0NWXnnlFV599VVat25N//792b17Nx9//DHr1q1jxYoVuLu7k5aWRtu2bUlNTWXQoEGEhYVx/PhxfvvtN+Li4vD392f79u106NCB2rVrM2rUKDw8PNi3bx8rVqy47hhF8gVDRHJs5MiRBmA8/vjjzraMjAyjTJkyhslkMt58801n+9mzZw0vLy+jd+/ezrZx48YZgPHNN98429LS0oymTZsavr6+RkJCgmEYhjFr1iwDMN5+++1Mr9OyZUsDMKZOnepsv+OOO4xatWoZKSkpzja73W40a9bMqFSpkrNt8eLFBmAsXrz4qu8xKSnpsrZVq1YZgPHVV18520aMGGEAxowZMy473m63G4ZhGFOmTDEAY+zYsVc85kpxHTx48LL32rt3bwMwhg4dek1xjxkzxjCZTMbhw4edbbfccotRrFixTG3/jMcwDGPYsGGGh4eHERcX52w7deqU4ebmZowcOfKy1xEREbmaovD9YerUqQZgHDx40DAMx33TarUad955p2Gz2ZzHTZgwwQCMKVOmGIZhGBs3bjQA46effrritd9//30DMGJiYq4ag0hBpeHuIrngsccecz62WCw0bNgQwzB49NFHne0BAQFUqVKFAwcOONvmzp1LWFgYDz74oLPN3d2dp59+mvPnz7NkyRLncW5ubvTv3z/T6wwaNChTHGfOnGHRokU88MADnDt3jtjYWGJjYzl9+jRt27Zl7969HD9+PFvvzcvLy/k4PT2d06dPc9NNNxEQEMCGDRuc+37++Wfq1KmT5S/tJpPJeUxQUNBlcf/zmJz45+eSVdyJiYnExsbSrFkzDMNg48aNAMTExLB06VIeeeQRypYte8V4evXqRWpqKtOnT3e2TZs2jYyMDB566KEcxy0iIkVbYf7+8G8LFiwgLS2NZ555BrP5UgrSr18//Pz8mDNnDgD+/v4A/PHHHyQlJWV5rYCAAAB++eUX7Hb7dcUlkh8pSRfJBf9O8Pz9/fH09CQoKOiy9rNnzzqfHz58mEqVKmW6WQFUq1bNuf/i35IlS+Lr65vpuCpVqmR6vm/fPgzD4OWXXyY4ODjTNnLkSMAxhy07kpOTGTFiBOHh4Xh4eBAUFERwcDBxcXGZ5obt37+fmjVrXvVa+/fvp0qVKri55d5MGzc3N8qUKXNZ+5EjR+jTpw+BgYH4+voSHBzMrbfeCuCM++IXnv+Ku2rVqjRq1Ihvv/3W2fbtt99y8803c9NNN+XWWxERkSKmMH9/+LeLMf37ta1WKxUqVHDuL1++PJGRkXz++ecEBQXRtm1bJk6cmOk7R7du3WjevDmPPfYYoaGhdO/enR9//FEJuxQampMukgssFss1tYFjftiNcvHm9Nxzz9G2bdssj8luUjlo0CCmTp3KM888Q9OmTfH398dkMtG9e/cbcjO8Uo+6zWbLst3Dw+OyLyk2m402bdpw5swZXnjhBapWrYqPjw/Hjx+nT58+OYq7V69eDB48mGPHjpGamsrq1auZMGFCtq8jIiJyUWH+/nA93nvvPfr06cMvv/zCn3/+ydNPP82YMWNYvXo1ZcqUwcvLi6VLl7J48WLmzJnDvHnzmDZtGrfffjt//vnnFT9DkYJCSbqIC5UrV44tW7Zgt9szJZq7du1y7r/4d+HChZw/fz7Tr+G7d+/OdL0KFSoAjiFvrVu3zpUYp0+fTu/evTNVlk1JSbmsEmvFihXZtm3bVa9VsWJF1qxZQ3p6Ou7u7lkeU7x4cYDLrn/xF/ZrsXXrVvbs2cOXX35Jr169nO3z58/PdNzFz+u/4gbo3r07kZGRfP/99yQnJ+Pu7k63bt2uOSYREZHcUhC+P2QV88XXvvh6AGlpaRw8ePCy161Vqxa1atVi+PDhrFy5kubNmzNp0iRef/11AMxmM3fccQd33HEHY8eOZfTo0bz00kssXrz4hr0Hkbyi4e4iLtSuXTuioqKYNm2asy0jI4MPP/wQX19f5/Dsdu3akZGRwccff+w8zmaz8eGHH2a6XkhICK1ateKTTz7h5MmTl71eTExMtmO0WCyX/Xr/4YcfXtaz3aVLFzZv3pzlUmUXz+/SpQuxsbFZ9kBfPKZcuXJYLBaWLl2aaf9HH32UrZj/ec2Lj8ePH5/puODgYG655RamTJnCkSNHsoznoqCgIO6++26++eYbvv32W+66667LhiOKiIjkhYLw/eHfWrdujdVq5YMPPsh0j508eTLx8fG0b98egISEBDIyMjKdW6tWLcxmM6mpqYBjDv2/1a1bF8B5jEhBpp50ERd6/PHH+eSTT+jTpw/r168nIiKC6dOns2LFCsaNG0exYsUA6NixI82bN2fo0KEcOnSI6tWrM2PGjEzzsy6aOHEiLVq0oFatWvTr148KFSoQHR3NqlWrOHbsGJs3b85WjB06dODrr7/G39+f6tWrs2rVKhYsWECJEiUyHff8888zffp0unbtyiOPPEKDBg04c+YMs2fPZtKkSdSpU4devXrx1VdfERkZydq1a2nZsiWJiYksWLCAp556ik6dOuHv70/Xrl358MMPMZlMVKxYkd9++y1bc+GqVq1KxYoVee655zh+/Dh+fn78/PPPmebzXfTBBx/QokUL6tevz+OPP0758uU5dOgQc+bMYdOmTZmO7dWrF/fffz8Ar732WrY+RxERkdxSEL4//FtwcDDDhg3j1Vdf5a677uKee+5h9+7dfPTRRzRq1MhZiHXRokUMHDiQrl27UrlyZTIyMvj666+xWCx06dIFgFGjRrF06VLat29PuXLlOHXqFB999BFlypShRYsW1xWnSL7gipLyIoXFxSVU/r0ESO/evQ0fH5/Ljr/11luNGjVqZGqLjo42+vbtawQFBRlWq9WoVatWpiVRLjp9+rTx8MMPG35+foa/v7/x8MMPO5cp+ffx+/fvN3r16mWEhYUZ7u7uRunSpY0OHToY06dPdx5zrUuonD171hmfr6+v0bZtW2PXrl1GuXLlMi0HczHGgQMHGqVLlzasVqtRpkwZo3fv3kZsbKzzmKSkJOOll14yypcvb7i7uxthYWHG/fffb+zfv995TExMjNGlSxfD29vbKF68uPHEE08Y27Zty3IJtqw+Z8MwjB07dhitW7c2fH19jaCgIKNfv37G5s2bs/y8tm3bZnTu3NkICAgwPD09jSpVqhgvv/zyZddMTU01ihcvbvj7+xvJyclX/dxERESupCh8f/j3EmwXTZgwwahatarh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JwCI7du3txnDpZ+xY8cO47a0tDQBQDQ0NNyQPImIiHoz1nsi88aZdKJepLCwEPX19Rg9ejTs7OyM7eOPP0ZRUZFxv/j4eONjFxcXhISEoKCgAABQUFCAUaNGmRx31KhROHr0KFpbW5Gfnw8rKyvceeedHcYSERFhfOzl5QUAqKio6HGOREREvR3rPZF5s5Y6ACK6dWprawEAaWlp8PHxMXlNo9GYFO7rZWNj06X9VCqV8bFCoQBguH6OiIiIeob1nsi8cSadqBcJCwuDRqNBSUkJgoKCTJqvr69xv927dxsfnz9/Hr/++itCQ0MBAKGhocjOzjY5bnZ2NgYOHAgrKysMGTIEer3e5Jo3IiIiunVY74nMG2fSiXoRe3t7zJ07F3PmzIFer8dtt92GqqoqZGdnw8HBAf7+/gCAN954A3379oWHhwcWLFgAV1dXTJgwAQDw4osvYtiwYVi8eDEmTpyInJwcvP/++1i1ahUAICAgAFOmTMG0adOwYsUKREZG4vjx46ioqMAjjzwiVepERES9Bus9kZmT+qJ4Irq19Hq9WL58uQgJCREqlUq4ubmJpKQkkZWVZVzkZcuWLSI8PFyo1WoxfPhw8csvv5gcY+PGjSIsLEyoVCrh5+cn3n33XZPXGxoaxJw5c4SXl5dQq9UiKChIrFmzRghxeSGZ8+fPG/fPy8sTAERxcfHNTp+IiKhXYL0nMl8KIYSQ8ksCIpKPzMxM3H333Th//jycnJykDoeIiIhuAtZ7InnjNelEREREREREMsFBOhEREREREZFM8HR3IiIiIiIiIpngTDoRERERERGRTHCQTkRERERERCQTHKQTERERERERyQQH6UREREREREQywUE6ERERERERkUxwkE5EREREREQkExykExEREREREckEB+lEREREREREMvF/z3LqYuChIP8AAAAASUVORK5CYII=","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["model = Sequential()\n","\n","model.add(Convolution2D(1,(5,5),padding='same',input_shape=(pixel,pixel,1)))\n","model.add(Activation('relu'))\n","\n","# take the max over all values in the activation map\n","model.add(MaxPooling2D(pool_size=(pixel,pixel)))\n","model.add(Flatten())\n","model.add(Dense(2))\n","model.add(Activation('softmax'))\n","\n","# compile model and initialize weights\n","model.compile(loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy'])\n","# train the model\n","history=model.fit(X_train, Y_train,\n"," validation_data=(X_val,Y_val),\n"," batch_size=64,\n"," epochs=40,\n"," verbose=1)\n","\n","# plot the development of the accuracy and loss during training\n","plt.figure(figsize=(12,4))\n","plt.subplot(1,2,(1))\n","plt.plot(history.history['accuracy'],linestyle='-.')\n","plt.plot(history.history['val_accuracy'])\n","plt.title('model accuracy')\n","plt.ylabel('accuracy')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='lower right')\n","plt.subplot(1,2,(2))\n","plt.plot(history.history['loss'],linestyle='-.')\n","plt.plot(history.history['val_loss'])\n","plt.title('model loss')\n","plt.ylabel('loss')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='upper right')"]}],"metadata":{"accelerator":"GPU","colab":{"provenance":[]},"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.9.18"},"widgets":{"application/vnd.jupyter.widget-state+json":{"1140e90db2fc4b9c91cbbe362767d65d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"SliderStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"SliderStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":"","handle_color":null}},"11b66fd5176b475ba5c69140eae37d62":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"IntSliderModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"IntSliderModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"IntSliderView","continuous_update":true,"description":"vertical ","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_9b72172c1a1c46439102f6059066a39f","max":499,"min":0,"orientation":"horizontal","readout":true,"readout_format":"d","step":1,"style":"IPY_MODEL_613f8f4d5b0e4816aa55033960822230","value":0}},"2b9eb29c4c4d4b44b1e5592233ae4dab":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"VBoxModel","state":{"_dom_classes":["widget-interact"],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"VBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"VBoxView","box_style":"","children":["IPY_MODEL_11b66fd5176b475ba5c69140eae37d62","IPY_MODEL_ed53a993099641bb86c8d7a10fc17bdb","IPY_MODEL_e905c391b1d644bc9f0b59976800f391"],"layout":"IPY_MODEL_3ee2908fbdce4081a6bb10c970fa187d"}},"3ee2908fbdce4081a6bb10c970fa187d":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"5f1c8af64c254ffdb40ba8499cac6ca8":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"613f8f4d5b0e4816aa55033960822230":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"SliderStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"SliderStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":"","handle_color":null}},"9b72172c1a1c46439102f6059066a39f":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e905c391b1d644bc9f0b59976800f391":{"model_module":"@jupyter-widgets/output","model_module_version":"1.0.0","model_name":"OutputModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/output","_model_module_version":"1.0.0","_model_name":"OutputModel","_view_count":null,"_view_module":"@jupyter-widgets/output","_view_module_version":"1.0.0","_view_name":"OutputView","layout":"IPY_MODEL_f7e38cbf0fa84263916f1c8dbcf4c53c","msg_id":"","outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA5QAAAD7CAYAAAAVfNtaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTiElEQVR4nO3dd1gU1/s28HtpC9IUUBBFEDEiShEromJBsYstRA0CtkTR2DX+jDVR1CT2mkQRv2o01tijYkk0mBgUu0SNxgIoiIAUAdl5/+BlssMCwgouyP25rr2u2TNnZ54d9ug+e8rIBEEQQERERERERFRCWpoOgIiIiIiIiComJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlKVk7ty5kMlkar128+bNkMlkePDgQekGpeTBgweQyWTYvHlzmZ2D6F07c+YMZDIZzpw5887PHRgYCDs7u3d+XiIiIqLypNInlDdu3MDHH3+MWrVqQS6Xw9raGkOGDMGNGzc0HZpG5H1B3717t6ZDoTJ07949fPLJJ7C3t4e+vj5MTEzg6emJFStWICMjQ9PhvVfat2+Pxo0bazoMIiIiojJRqRPKvXv3wt3dHeHh4QgKCsLatWsxfPhwnD59Gu7u7ti3b1+xj/XFF1+o/UXc398fGRkZsLW1Vev1RCVx+PBhODs746effkKvXr2watUqhISEoE6dOpg6dSrGjx+v6RCJiIiIqILQ0XQAmnLv3j34+/vD3t4ev/76K6pXry7uGz9+PNq2bQt/f39cvXoV9vb2hR4nLS0NhoaG0NHRgY6OepdTW1sb2traar2WqCTu37+Pjz76CLa2tjh16hRq1qwp7gsODsbdu3dx+PBhDUZIRERERBVJpe2h/Prrr5Geno7vvvtOkkwCgIWFBTZs2IC0tDQsWbJELM+bJ3nz5k0MHjwY1apVQ5s2bST7lGVkZOCzzz6DhYUFjI2N0bt3bzx58gQymQxz584V6xU0h9LOzg49e/bEuXPn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k8lw//59cbXWNzl69CgmT56Mq1evQkfnrQd5vldKdDU2btxY5H59fX2sWbNG0jVMVNmwnRAREVFxGBgYYMuWLZIervj4eOzYsQNxcXEqN6AnzUlLS0NoaCiTyQLwihARERERaUj79u0lz2vUqAELCwt89913JRoOSmVLeaVdkmJCSURERERUTpRgNhq9hTlz5qjcF5zUw4SSiIgKpDwEK/8KhJcvXxa388/9atCgQYnvb0ZERPQu5V9ch9RX/LWAiYiIiIiIiJQwoSQiIiIiIiK1cMgrkZKKfFsWotL2/Plzcdvc3Fyy7++//xa3XV1dJfv09PQ45JWIiKiSYA8lERERERERqYUJJREREREREamFQ16JiilvOGxKSgpMTU01HA1R2UtKShK383/mX758WWA9gENeiYiIKhP2UBIREREREZFamFASERERERGRWphQEhERERERkVo4h5KIiAqUlZUlbsvl8kLrZWRkSJ6bmZmplBEREdH7iT2UREREREREpBYmlERERERERKQWDnklIqK3kn84bEJCAl69eqWhaIiIiOhdYg8lERERERERqYUJJREREREREamFQ16JiDREV1dX3M7Ozha3LSwsJPUePXokbsfExJR9YERERETFxB5KIiIiIiIiUgsTSiIiIiIiIlILE0oiIiIiIiJSy1sllIsWLYJMJsOECRPEslevXiE4OBjm5uYwMjJC//798fTp07eNk6jCYjuhwpibm4uP58+fiw/l8rzPSN4jLi5OfJQ1XV1d8ZGdnS15KKtSpYrkERsb+07iIyIiIs1TO6G8ePEiNmzYABcXF0n5xIkTcfDgQezatQtnz55FTEwM+vXr99aBElVEbCdERERE9D5TK6FMTU3FkCFD8P3336NatWpieXJyMjZu3IilS5eiY8eOaNq0KUJDQ/H777/jwoULpRY0UUXAdkJERERE7zu1bhsSHByMHj16wNvbG1999ZVYHhkZiezsbHh7e4tljo6OqFOnDiIiItCqVau3j5gqLJlMpukQ3im2E3oTc3Nzcfv58+cFlgO5P07keZe3DSksvvxq1qwpeR4TE6MyLJaIiIjeTyVOKHfs2IFLly7h4sWLKvvi4uKgp6eHqlWrSsotLS0LnU+TmZmJzMxM8XlKSkpJQyIqd0q7nQBsK0RERERU/pRoyOujR48wfvx4bNu2Dfr6+qUS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\n","text/plain":"
"},"metadata":{},"output_type":"display_data"},{"data":{"image/png":"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KLD3BZ8brJxYTwpX3PN/ilNPVIRnBgHpc5LKz0a+fPlSXFacQqM0z00XNbVGSkqK5L25uflrP1PelH+XZWdni8s1a9aUrLO2tpaMSExERETvL46aQERERERERGphQklERERERERqKdNpQ4iIiqM89YQixW6eit0pNdXFE4Bk6gvlOKpWrVrocmno6emJy6ampuKyYhdX5feavB4lFRcXJ/kZEhER0fuLLZRERERERESkFiaUREREREREpBZ2eSWit0axi6cyxW6dyl0+K7u4uDhNh0BERERUKLZQEhERERERkVqYUBIREREREZFamFASERERERGRWphQEhERERFpSEBAAObNm6fpMMqMTCbD7t27y2x/9vb2WLx4sfg+NDQUQUFBJf58QkICatSogYcPH5ZZTCTFhJKIiIiIqIwFBQVBJpNBJpNBT08PDg4OmDNnDl69eiVuc/HiRRw4cACff/65BiNVT2hoKJo0aaJSHhcXh65du779gIpgbm6OgQMHYtasWWWyv0uXLqFt27bQ19dHrVq1sGDBgmK3v3jxIvr27YtatWrBwMAADRo0wJIlSyTbxMXFoV+/fvjggw+gpaWFsWPHquzn6tWr8PPzg729PWQymSTJLhAaGirecwUvJyenNzndEmFCSURERERUDrp06YK4uDjcvHkTEyZMQGhoKL799ltx/dKlS9G7d28YGRlpMMrSEQRBkhQrs7Kyglwuf4sRvV5wcDA2btyIFy9evNF+kpOT0blzZ9jZ2SE6OhrffvstQkND8dNPPxX5mejoaNSoUQMbNmzA1atXMW3aNEydOhXLli0Tt8nKyoKFhQWmT58OV1fXQveTnp6OunXrYv78+bCysiryeI0aNUJcXJz4OnnypPonXEJMKImIiIiIyoFcLoeVlRXs7OwwcuRIeHt7Y8+ePQCA3NxcbN++HT179hS3nzNnDho3bqyynyZNmmDGjBmlPn6/fv3g7+8vKcvJyYG5uTnWr18PAMjLy0NYWBjq1KkDAwMDuLq6Yvv27eL2x48fh0wmw8GDB9G0aVPI5XJs2LABs2fPxsWLF8WWsLVr1wJQ7fL68OFD9O3bF2ZmZjA0NESzZs1w9uxZAMDt27fx8ccfw9LSEkZGRmjevDl+//33Up3joEGD4OLigqysLABAdnY23NzcMHDgQHGbRo0awcbGBrt27SrVvpVt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KJuIiSo41hMiIiIiqixK1UIZEhKCTZs24bfffoOxsbH4vJepqSkMDAxgamqKwYMHY/z48TAzM4OJiQnGjBkDDw8PjlxJlQbrCRERERFVFqVKKFeuXAkgf/4XReHh4QgKCgIALFq0CFpaWvDz80NWVhZ8fHywYsWKMgmW6F3AekJERERElUWpEkpBEF67jb6+PpYvX47ly5erHRTRu4z1hIiIiIgqizeah5KIiIiIiIgqLyaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERBoSEBCAefPmldv+ZTIZdu/e/c7tuyytXbsWVatWlZTJZDLcu3evxPuYMmUKxowZU7aBvSeYUBIRERERlbGgoCDIZDLIZDLo6enBwcEBc+bMwatXr8RtLl68iAMHDuDzzz/XYKTqi4uLQ9euXd/a8UJDQ9GkSZO3djxFEydOxLp163Dnzp1Sf/b+/fvo3r07qlSpgho1amDSpEmS+0DZ8ePHxXtH+XXu3Dlxu8OHD6NVq1YwNjaGhYUF/Pz8VJLkjRs3wtXVFVWqVIG1tTUGDRqE58+fi+vXrl2rcgx9ff1SnV+pEsqVK1fCxcUFJiYmMDExgYeHBw4ePCiuz8zMREhICKpXrw4jIyP4+fnhyZMnpQqI6F3HekJEREQA0KVLF8TFxeHmzZuYMGECQkND8e2334rrly5dit69e8PIyEiDUZZednY2AMDKygpyuVzD0bwd5ubm8PHxwcqVK0v1udzcXHTv3h3Z2dk4ffo01q1bh7Vr12LmzJlFfqZ169aIi4uTvIYMGYI6deqgWbNmAIC7d+/i448/RseOHRETE4PDhw8jISEBn376qbifU6dOYeDAgRg8eDCuXr2Kbdu24a+//sLQoUMlxzMxMZEc699//y3VOZYqoaxZsybmz5+P6Oho/P333+jYsSM+/vhjXL16FQAwbtw47N27F9u2bcOJEyfw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YkVZH4boncZ6QkRERETvgzdOKI8fPy55r6+vj+XLl2P58uVvumt6R1XEaUY03R24MtcTxa6hit0pFbuCAkB6erq4bGNj88bHVTzWixcvJOsU79GMjIxCl1/n+fPn4rJil9oGDRpItlM8dk5OjmSdYpdXxetU2BQjZam4YxW1Tnk7xeurvM7c3FwyIjERERG9v9Sah5KIiIiIiIiICSURERERERGppcyfoaSK4W12O1XuTqrp7qVUsSiOIqo4uqjyfZKcnCwul/Uop8ojmZqbm4vLdnZ24nJ8fLxkO8UuqcVR3E75WLdu3RKX69WrJ1lnZmYmLqempha6XB4Uu6sqH0ux+2qVKlXEZeXzet1Iscoj6xIREdH7iS2UREREREREpBYmlERERERERKQWJpRERERERESkFj5DWcYq4pQZ5a2ynDOfDVVPUdetuOtZ1tda8ZlBZcbGxuKy8lQmxX2uKMqxm5qaisvKzxUqPr/4NqcNSUlJKfJYBgYG4rLiubzNnxcRERG9O9hCSURERERERGphQklERERERERqYZfXMsauX0RS2trahZYrTw2iuF1Rn1GXYrdWQNqV9eXLl+JyXl6eZDt1unMrT8OheCzlc7ayshKX3dzcSn2s8vb06VNxubififK6zMxM5OTklFtcREREVHGwhZKIiIiIiIjUwoSSiIiIiIiI1MIur0RUrhRHDVWkONIoIB0Btay7S2ppSb87U9x/1apVC10uK1WqVCn0uABw//79Mj/e25KcnCwuK5+XqampyjUnIiKi9xP/4hMREREREZFamFASERERERGRWphQEhERERERkVr4DCURlSs9Pb1Cy83NzYt9T0REREQVH1soiYiIiIiISC1MKImIiIiIiEgtTCiJiIiIiIhILUwoiYiIiIiISC1MKImIiIiIiEgtTCiJiIiIiIhILUwoiYiIiIiISC1MKImIiIiIiEgtOpoOQJkgCJoOgahENH2vFhw/JydHo3EQFabgvqwo9SQrK0ujcRAVpuC+1HQ9ISJ6ExUuoUxJSdF0CEQlkpKSAlNTU40eHwC2b9+usRiIXqei1JMVK1ZoLAai19F0PSEiehMyoYJ9LZaXl4fHjx9DEATUrl0bDx48gImJiabD0qjk5GTUqlWL1+L/0/T1EAQBKSkpsLGxgZaW5nqN5+XlITY2Fg0bNuS98f9p+t6oSDR9LSpSPXn8+DGMjY0hk8k0FgdRYSpKPSEiehMVroVSS0sLNWvWRHJyMgDAxMSk0v9jWIDXQkqT16MifJOspaUFW1tbALw3lPF6/If1JP9vClFFVRHqCRHRm+DXYURERERERKQWJpRERERERESklgqbUMrlcsyaNQtyuVzToWgcr4UUr8d/eC2keD3+w2tBREREb0OFG5SHiIiIiIiI3g0VtoWSiIiIiIiIKjYmlERERERERKQWJpRERERERESklgqbUC5fvhz29vbQ19dHy5Yt8ddff2k6pHIXFhaG5s2bw9jYGDVq1ICvry9iY2Ml22RmZiIkJATVq1eHkZER/Pz88OTJEw1F/PbMnz8fMpkMY8eOFcsq67VQxHrCeqKI9YSIiIjetgqZUG7duhXjx4/HrFmzcP78ebi6usLHxwdPnz7VdGjl6sSJEwgJCcGZM2cQERGBnJwcdO7cGWlpaeI248aNw969e7Ft2zacOHECjx8/xqeffqrBqMvfuXPnsGrVKri4uEjKK+O1UMR6wnqiiPWEiIiINEKogFq0aCGEhISI73NzcwUbGxshLCxMg1G9fU+fPhUACCdOnBAEQRASExMFXV1dYdu2beI2169fFwAIUVFRmgqzXKWkpAiOjo5CRESE4OXlJXzxxReCIFTOa6GM9SQf6wnrCREREWlOhWuhzM7ORnR0NLy9vcUyLS0teHt7IyoqSoORvX1JSUkAADMzMwBAdHQ0cnJyJNfGyckJtWvXfm+vTUhICLp37y45Z6ByXgtFrCf/YT1hPSEiIiLN0dF0AMoSEhKQm5sLS0tLSbmlpSVu3Lihoajevry8PIwdOxaenp5o3LgxACA+Ph56enqoWrWqZFtLS0vEx8drIMrytWXLFpw/fx7nzp1TWVfZroUy1pN8rCesJ0RERKRZFS6hpHwhISG4cuUKTp48qelQNOLBgwf44osvEBERAX19fU2HQxUU6wnrCREREWlWhevyam5uDm1tbZVRCJ88eQIrKysNRfV2jR49Gvv27cOxY8dQs2ZNsdzKygrZ2dlITEyUbP8+Xpvo6Gg8ffoU7u7u0NHRgY6ODk6cOIEffvgBOjo6sLS0rDTXojCsJ6wnAOsJERERaV6FSyj19PTQtGlTREZGimV5eXmIjIyEh4eHBiMrf4IgYPTo0di1axeOHj2KOnXqSNY3bdoUurq6kmsTGxuL+/fvv3fX5sMPP8Tly5cRExMjvpo1a4b+/fuLy5XlWhSG9YT1BGA9ISIiIs2rkF1ex48fj8DAQDRr1gwtWrTA4sWLkZaWhuDgYE2HVq5CQkKwadMm/PbbbzA2NhafcTI1NYWBgQFMTU0xePBgjB8/HmZmZjAxMcGYMWPg4eGBVq1aaTj6smVsbCw+E1fA0NAQ1atXF8sry7UoCusJ6wnrCREREWlahUwo/f398ezZM8ycORPx8fFo0qQJDh06pDIAyftm5cqVAID27dtLysPDwxEUFAQAWLRoEbS0tODn54esrCz4+PhgxYoVbznSiqGyXwvWk/aSctaTwvFaEBERUXmSCYIgaDoIIiIiIiIievdUuGcoiYiIiIiI6N3AhJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjU8v8A8zGO6WUQgBYAAAAASUVORK5CYII=\n","text/plain":"
"},"metadata":{},"output_type":"display_data"}]}},"ed53a993099641bb86c8d7a10fc17bdb":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"IntSliderModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"IntSliderModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"IntSliderView","continuous_update":true,"description":"horizontal","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_5f1c8af64c254ffdb40ba8499cac6ca8","max":999,"min":500,"orientation":"horizontal","readout":true,"readout_format":"d","step":1,"style":"IPY_MODEL_1140e90db2fc4b9c91cbbe362767d65d","value":500}},"f7e38cbf0fa84263916f1c8dbcf4c53c":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}}}}},"nbformat":4,"nbformat_minor":0} +{"cells":[{"cell_type":"markdown","metadata":{"id":"4K8Ug6ICkRtQ"},"source":["# A simple CNN for the edge lover task\n","\n","In this notebook you train a very simple CNN with only 1 kernel to distinguish between images containing vertical and images containing horizontal stripes. To check what pattern is recognized by the learned kernel you will visualize the weights of the kernel as an image. You will see that the CNN learns a useful kernel (either a vertical or horiziontal bar). You can experiment with the code to check the influence of the kernel size, the activation function and the pooling method on the result. \n","\n","\n","**Dataset:** You work with an artficially generatet dataset of greyscale images (50x50 pixel) with 10 vertical or horizontal bars. We want to classify them into whether an art lover, who only loves vertical strips, will like the image (y = 0) or not like the image (y = 1). \n","\n","The idea of the notebook is that you try to understand the provided code by running it, checking the output and playing with it by slightly changing the code and rerunning it. \n","\n","**Content:**\n","* definig and generating the dataset X_train and X_val\n","* visualize samples of the generated images\n","* use keras to train a CNN with only one kernel (5x5 pixel)\n","* visualize the weights of the learned kernel and interpret if it is useful\n","* repeat the last two steps to check if the learned kernel is always the same\n","\n"]},{"cell_type":"markdown","metadata":{"id":"eiB8bJNYn8oP"},"source":["### Imports\n","\n","In the next cell, we load all the required libraries."]},{"cell_type":"code","execution_count":1,"metadata":{"executionInfo":{"elapsed":262,"status":"ok","timestamp":1708798970232,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"2PDLAWRQ7iUB"},"outputs":[{"name":"stderr","output_type":"stream","text":["2024-02-26 14:06:38.909869: I tensorflow/core/util/port.cc:113] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n","2024-02-26 14:06:38.929955: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n","2024-02-26 14:06:38.929971: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n","2024-02-26 14:06:38.930681: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n","2024-02-26 14:06:38.934250: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n","To enable the following instructions: AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n","2024-02-26 14:06:39.286274: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n"]}],"source":["# load required libraries:\n","import numpy as np\n","import matplotlib.pyplot as plt\n","%matplotlib inline\n","plt.style.use('default')\n","\n","import tensorflow.keras\n","from tensorflow.keras.models import Sequential\n","from tensorflow.keras.layers import Dense, Convolution2D, MaxPooling2D, Flatten , Activation\n","from tensorflow.keras.utils import to_categorical"]},{"cell_type":"markdown","metadata":{"id":"Oq0FNqcBpj23"},"source":["### Defining functions to generate images\n","\n","Here we define the function to genere images with vertical and horizontal bars, the arguments of the functions are the size of the image and the number of bars you want to have. The bars are at random positions in the image with a random length. The image is black and white, meaning we have only two values for the pixels, 0 for black and 255 for white."]},{"cell_type":"code","execution_count":2,"metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1708798970491,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"nqVBlR8yAO9c"},"outputs":[],"source":["#define function to generate image with shape (size, size, 1) with stripes\n","def generate_image_with_bars(size, bar_nr, vertical = True):\n"," img = np.zeros((size,size,1), dtype=\"uint8\")\n"," for i in range(0,bar_nr):\n"," x,y = np.random.randint(0,size,2)\n"," l = int(np.random.randint(y,size,1)[0])\n"," if (vertical):\n"," img[y:l,x,0]=255\n"," else:\n"," img[x,y:l,0]=255\n"," return img"]},{"cell_type":"markdown","metadata":{"id":"bUmdGzQLdqzB"},"source":["Let's have a look at the generated images. We choose a size of 50x50 pixels and set the number of bars in the image to 10."]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":345},"executionInfo":{"elapsed":301,"status":"ok","timestamp":1708798970791,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"EccLz0FlXGuU","outputId":"5cccc101-ab1f-4c8f-8125-1225918ed827"},"outputs":[{"data":{"image/png":"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586dcezYsbj22mvj8OHD1X3uvffeePnll2P79u0xMDAQBw4ciJtvvrmOXc/N8uXLY+vWrTE0NBRvvfVWXHPNNXHDDTfEBx98EBHNv77/tHfv3njuuedi9erV07a30hrbhTlqjjYSc7S11jgnqUGtW7cu9fX1Vb8+fvx4WrZsWerv769jV6cuItKOHTuqX09NTaXu7u70yCOPVLeNjY2lYrGYXnzxxTp0eOoOHTqUIiINDAyklL5cz4IFC9L27dur+3z00UcpItLg4GC92jxl5557bnr++edban0TExPpoosuSjt37kxXX311uueee1JKrfs9bHXmqDna6MzR5lzjXDXkmc2jR4/G0NBQ9Pb2VrfNmzcvent7Y3BwsI6d1d4nn3wSIyMj09ZaKpXiiiuuaNq1ViqViIhYsmRJREQMDQ3FsWPHpq1x1apV0dPT05RrPH78eGzbti0OHz4c5XK5pdbX19cX11133bS1RLTe97AdmKPmaCMzR7/UrGucq/n1bmAmn332WRw/fjy6urqmbe/q6oo///nPdeoqj5GRkYiIGdf6r9uaydTUVGzevDmuuuqquPTSSyPiyzV2dHTE4sWLp+3bbGt87733olwux5EjR2LhwoWxY8eOuOSSS2Lfvn0tsb5t27bF22+/HXv37v3aba3yPWwn5mjz/nyao//WbOszR2fWkGGT5tXX1xfvv/9+/PGPf6x3KzV38cUXx759+6JSqcSvf/3r2LRpUwwMDNS7rZoYHh6Oe+65J3bu3BlnnnlmvduBtmaONidz9MQa8mn08847L84444yvXaE1Ojoa3d3ddeoqj3+tpxXWetddd8Urr7wSr732Wixfvry6vbu7O44ePRpjY2PT9m+2NXZ0dMSFF14Ya9eujf7+/lizZk08/vjjLbG+oaGhOHToUHz729+O+fPnx/z582NgYCCeeOKJmD9/fnR1dTX9GtuNOdqcazVHx6bt30zrM0dPrCHDZkdHR6xduzZ27dpV3TY1NRW7du2Kcrlcx85qb+XKldHd3T1trePj47Fnz56mWWtKKe66667YsWNH7N69O1auXDnt9rVr18aCBQumrXH//v3x6aefNs0aZzI1NRWTk5Mtsb7169fHe++9F/v27avWZZddFt/73veq/272NbYbc9QcbQbmaHOt8aTV+wqlE9m2bVsqFovp5z//efrwww/Tj370o7R48eI0MjJS79bmbGJiIr3zzjvpnXfeSRGRHn300fTOO++kv/71rymllLZu3ZoWL16cfvOb36R333033XDDDWnlypXpiy++qHPns3PHHXekUqmUXn/99XTw4MFqff7559V9br/99tTT05N2796d3nrrrVQul1O5XK5j13Nz//33p4GBgfTJJ5+kd999N91///2pUCik3//+9yml5l/fTP7zKsqUWnONrc4cNUcbiTnammucjYYNmyml9OSTT6aenp7U0dGR1q1bl9588816t3RSXnvttRQRX6tNmzallL58244HHnggdXV1pWKxmNavX5/2799f36bnYKa1RUR64YUXqvt88cUX6c4770znnntuOvvss9NNN92UDh48WL+m5+gHP/hB+r//+7/U0dGRvvGNb6T169dXB2RKzb++mXx1SLbiGtuBOdoczNHmX99MzNEvFVJK6fSdRwUAoJ005Gs2AQBoDcImAADZCJsAAGQjbAIAkI2wCQBANsImAADZCJsAAGQjbAIAkI2wCQBANsImAADZCJsAAGQjbAIAkM3/A4niy88/9KQDAAAAAElFTkSuQmCC","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# have a look on two generated images\n","plt.figure(figsize=(8,8))\n","plt.subplot(1,2,1)\n","img=generate_image_with_bars(50,10, vertical=True)\n","plt.imshow(img[:,:,0],cmap='gray')\n","plt.subplot(1,2,2)\n","img=generate_image_with_bars(50,10, vertical=False)\n","plt.imshow(img[:,:,0],cmap='gray')\n","plt.show()"]},{"cell_type":"markdown","metadata":{"id":"Y8gSwmyaevTk"},"source":["### Make a train and validation dataset of images with vertical and horizontal images\n","Now, let's make a train dataset *X_train* with 1000 images (500 images with vertical and 500 images with horizontal bars). We normalize the images values to be between 0 and 1 by dividing all values with 255. We create a secont dataste *X_val* with exactly the same properties to validate the training of the CNN."]},{"cell_type":"code","execution_count":4,"metadata":{"executionInfo":{"elapsed":573,"status":"ok","timestamp":1708798971361,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"63omuptEILKu"},"outputs":[],"source":["pixel=50 # define height and width of images\n","num_images_train = 1000 #Number of training examples (divisible by 2)\n","num_images_val = 1000 #Number of training examples (divisible by 2)\n","\n","# generate training data with vertical edges\n","X_train =np.zeros((num_images_train,pixel,pixel,1))\n","for i in range(0, num_images_train//2):\n"," X_train[i]=generate_image_with_bars(pixel,10)\n","# ... with horizontal\n","for i in range(num_images_train//2, num_images_train):\n"," X_train[i]=generate_image_with_bars(pixel,10, vertical=False)\n","\n","# generate validation data with vertical edges\n","X_val =np.zeros((num_images_train,pixel,pixel,1))\n","for i in range(0, num_images_train//2):\n"," X_val[i]=generate_image_with_bars(pixel,10)\n","# ... with horizontal\n","for i in range(num_images_train//2, num_images_train):\n"," X_val[i]=generate_image_with_bars(pixel,10, vertical=False)"]},{"cell_type":"code","execution_count":5,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":16,"status":"ok","timestamp":1708798971361,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"kvAEj2e4xIoK","outputId":"864bd112-e430-4e1c-e6a2-2bfd4ce58ee5"},"outputs":[{"name":"stdout","output_type":"stream","text":["(1000, 50, 50, 1)\n","(1000, 50, 50, 1)\n"]}],"source":["# normalize the data to be between 0 and 1\n","X_train=X_train/255\n","X_val=X_val/255\n","\n","print(X_train.shape)\n","print(X_val.shape)"]},{"cell_type":"markdown","metadata":{"id":"ajNnUoYyi7IQ"},"source":["Here we make the labels for the art lover, 0 means he likes the image (vertical bars) and 1 means that he doesn't like it (horizontal stripes). We one hot encode the labels because we want to use two outputs in our network."]},{"cell_type":"code","execution_count":6,"metadata":{"executionInfo":{"elapsed":15,"status":"ok","timestamp":1708798971361,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"41-L5hM8S_ZP"},"outputs":[],"source":["# create class labels\n","y = np.array([[0],[1]])\n","Y_train = np.repeat(y, num_images_train //2)\n","Y_val = np.repeat(y, num_images_train //2)\n","\n","# one-hot-encoding\n","Y_train = to_categorical(Y_train,2)\n","Y_val = to_categorical(Y_val,2)"]},{"cell_type":"markdown","metadata":{"id":"uZpr0h-VvatF"},"source":["## Defining the CNN\n","\n","Here we define the CNN:\n","\n","- we use only one kernel with a size of 5x5 pixels \n","- then we apply a linar activation function \n","- the maxpooling layer takes the maximum of the whole activation map to predict the probability (output layer with softmax) if the art lover will like the image\n","\n","As loss we use the categorical_crossentropy and we train the model with a batchsize of 64 images per update.\n"]},{"cell_type":"code","execution_count":7,"metadata":{"executionInfo":{"elapsed":14,"status":"ok","timestamp":1708798971361,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"1Dfg1h2rUifd"},"outputs":[{"name":"stderr","output_type":"stream","text":["2024-02-26 14:06:40.039931: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:901] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n","2024-02-26 14:06:40.059032: W tensorflow/core/common_runtime/gpu/gpu_device.cc:2256] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n","Skipping registering GPU devices...\n"]}],"source":["model = Sequential()\n","\n","model.add(Convolution2D(1,(5,5),padding='same',input_shape=(pixel,pixel,1)))\n","model.add(Activation('linear'))\n","\n","# take the max over all values in the activation map\n","model.add(MaxPooling2D(pool_size=(pixel,pixel)))\n","model.add(Flatten())\n","model.add(Dense(2))\n","model.add(Activation('softmax'))\n","\n","# compile model and initialize weights\n","model.compile(loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy'])\n"]},{"cell_type":"code","execution_count":8,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":15,"status":"ok","timestamp":1708798971362,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"r6eqV0TRU0_n","outputId":"2c6833cb-ca10-422c-bbda-56102a866011"},"outputs":[{"name":"stdout","output_type":"stream","text":["Model: \"sequential\"\n","_________________________________________________________________\n"," Layer (type) Output Shape Param # \n","=================================================================\n"," conv2d (Conv2D) (None, 50, 50, 1) 26 \n"," \n"," activation (Activation) (None, 50, 50, 1) 0 \n"," \n"," max_pooling2d (MaxPooling2 (None, 1, 1, 1) 0 \n"," D) \n"," \n"," flatten (Flatten) (None, 1) 0 \n"," \n"," dense (Dense) (None, 2) 4 \n"," \n"," activation_1 (Activation) (None, 2) 0 \n"," \n","=================================================================\n","Total params: 30 (120.00 Byte)\n","Trainable params: 30 (120.00 Byte)\n","Non-trainable params: 0 (0.00 Byte)\n","_________________________________________________________________\n"]}],"source":["# let's summarize the CNN architectures along with the number of model weights\n","model.summary()\n"]},{"cell_type":"code","execution_count":9,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":38560,"status":"ok","timestamp":1708799009916,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"Sc-BYd8kVCx0","outputId":"73316fb0-5762-4fae-a012-4bfc64797edc","scrolled":false},"outputs":[{"name":"stdout","output_type":"stream","text":["Epoch 1/150\n"]},{"name":"stdout","output_type":"stream","text":["16/16 [==============================] - 0s 7ms/step - loss: 0.7118 - accuracy: 0.5000 - val_loss: 0.7055 - val_accuracy: 0.5000\n","Epoch 2/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6991 - accuracy: 0.5000 - val_loss: 0.6947 - val_accuracy: 0.5000\n","Epoch 3/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6890 - accuracy: 0.5000 - val_loss: 0.6858 - val_accuracy: 0.5000\n","Epoch 4/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6805 - accuracy: 0.5000 - val_loss: 0.6773 - val_accuracy: 0.5000\n","Epoch 5/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6718 - accuracy: 0.5000 - val_loss: 0.6680 - val_accuracy: 0.5000\n","Epoch 6/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6619 - accuracy: 0.5000 - val_loss: 0.6577 - val_accuracy: 0.5000\n","Epoch 7/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6505 - accuracy: 0.5110 - val_loss: 0.6450 - val_accuracy: 0.5460\n","Epoch 8/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6366 - accuracy: 0.5860 - val_loss: 0.6301 - val_accuracy: 0.5790\n","Epoch 9/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6206 - accuracy: 0.6380 - val_loss: 0.6134 - val_accuracy: 0.6110\n","Epoch 10/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6032 - accuracy: 0.6500 - val_loss: 0.5953 - val_accuracy: 0.6720\n","Epoch 11/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5850 - accuracy: 0.8170 - val_loss: 0.5771 - val_accuracy: 0.8970\n","Epoch 12/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5666 - accuracy: 0.9020 - val_loss: 0.5590 - val_accuracy: 0.9220\n","Epoch 13/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5481 - accuracy: 0.9330 - val_loss: 0.5405 - val_accuracy: 0.9290\n","Epoch 14/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5294 - accuracy: 0.9370 - val_loss: 0.5219 - val_accuracy: 0.9480\n","Epoch 15/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5104 - accuracy: 0.9530 - val_loss: 0.5029 - val_accuracy: 0.9830\n","Epoch 16/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4913 - accuracy: 0.9690 - val_loss: 0.4838 - val_accuracy: 0.9870\n","Epoch 17/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4723 - accuracy: 0.9730 - val_loss: 0.4647 - val_accuracy: 0.9900\n","Epoch 18/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4534 - accuracy: 0.9840 - val_loss: 0.4459 - val_accuracy: 0.9920\n","Epoch 19/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4349 - accuracy: 0.9870 - val_loss: 0.4273 - val_accuracy: 0.9920\n","Epoch 20/150\n","16/16 [==============================] - 0s 3ms/step - loss: 0.4165 - accuracy: 0.9890 - val_loss: 0.4090 - val_accuracy: 0.9940\n","Epoch 21/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3988 - accuracy: 0.9960 - val_loss: 0.3910 - val_accuracy: 0.9990\n","Epoch 22/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3810 - accuracy: 0.9980 - val_loss: 0.3736 - val_accuracy: 0.9990\n","Epoch 23/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3640 - accuracy: 0.9980 - val_loss: 0.3568 - val_accuracy: 0.9990\n","Epoch 24/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3477 - accuracy: 1.0000 - val_loss: 0.3406 - val_accuracy: 0.9990\n","Epoch 25/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3320 - accuracy: 1.0000 - val_loss: 0.3250 - val_accuracy: 0.9990\n","Epoch 26/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3170 - accuracy: 1.0000 - val_loss: 0.3102 - val_accuracy: 1.0000\n","Epoch 27/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3026 - accuracy: 1.0000 - val_loss: 0.2959 - val_accuracy: 1.0000\n","Epoch 28/150\n","16/16 [==============================] - 0s 3ms/step - loss: 0.2888 - accuracy: 1.0000 - val_loss: 0.2823 - val_accuracy: 1.0000\n","Epoch 29/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2759 - accuracy: 1.0000 - val_loss: 0.2696 - val_accuracy: 1.0000\n","Epoch 30/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2635 - accuracy: 1.0000 - val_loss: 0.2573 - val_accuracy: 1.0000\n","Epoch 31/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2516 - accuracy: 1.0000 - val_loss: 0.2456 - val_accuracy: 1.0000\n","Epoch 32/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2403 - accuracy: 1.0000 - val_loss: 0.2344 - val_accuracy: 1.0000\n","Epoch 33/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2294 - accuracy: 1.0000 - val_loss: 0.2237 - val_accuracy: 1.0000\n","Epoch 34/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2190 - accuracy: 1.0000 - val_loss: 0.2135 - val_accuracy: 1.0000\n","Epoch 35/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2090 - accuracy: 1.0000 - val_loss: 0.2037 - val_accuracy: 1.0000\n","Epoch 36/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1996 - accuracy: 1.0000 - val_loss: 0.1945 - val_accuracy: 1.0000\n","Epoch 37/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1907 - accuracy: 1.0000 - val_loss: 0.1857 - val_accuracy: 1.0000\n","Epoch 38/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1822 - accuracy: 1.0000 - val_loss: 0.1774 - val_accuracy: 1.0000\n","Epoch 39/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1741 - accuracy: 1.0000 - val_loss: 0.1695 - val_accuracy: 1.0000\n","Epoch 40/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1665 - accuracy: 1.0000 - val_loss: 0.1619 - val_accuracy: 1.0000\n","Epoch 41/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1592 - accuracy: 1.0000 - val_loss: 0.1548 - val_accuracy: 1.0000\n","Epoch 42/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1523 - accuracy: 1.0000 - val_loss: 0.1480 - val_accuracy: 1.0000\n","Epoch 43/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1457 - accuracy: 1.0000 - val_loss: 0.1417 - val_accuracy: 1.0000\n","Epoch 44/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1395 - accuracy: 1.0000 - val_loss: 0.1356 - val_accuracy: 1.0000\n","Epoch 45/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1335 - accuracy: 1.0000 - val_loss: 0.1296 - val_accuracy: 1.0000\n","Epoch 46/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1276 - accuracy: 1.0000 - val_loss: 0.1237 - val_accuracy: 1.0000\n","Epoch 47/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1219 - accuracy: 1.0000 - val_loss: 0.1181 - val_accuracy: 1.0000\n","Epoch 48/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1165 - accuracy: 1.0000 - val_loss: 0.1128 - val_accuracy: 1.0000\n","Epoch 49/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1113 - accuracy: 1.0000 - val_loss: 0.1078 - val_accuracy: 1.0000\n","Epoch 50/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1065 - accuracy: 1.0000 - val_loss: 0.1031 - val_accuracy: 1.0000\n","Epoch 51/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.1020 - accuracy: 1.0000 - val_loss: 0.0987 - val_accuracy: 1.0000\n","Epoch 52/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0978 - accuracy: 1.0000 - val_loss: 0.0946 - val_accuracy: 1.0000\n","Epoch 53/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0938 - accuracy: 1.0000 - val_loss: 0.0908 - val_accuracy: 1.0000\n","Epoch 54/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0901 - accuracy: 1.0000 - val_loss: 0.0872 - val_accuracy: 1.0000\n","Epoch 55/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0866 - accuracy: 1.0000 - val_loss: 0.0837 - val_accuracy: 1.0000\n","Epoch 56/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0832 - accuracy: 1.0000 - val_loss: 0.0805 - val_accuracy: 1.0000\n","Epoch 57/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0800 - accuracy: 1.0000 - val_loss: 0.0774 - val_accuracy: 1.0000\n","Epoch 58/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0770 - accuracy: 1.0000 - val_loss: 0.0745 - val_accuracy: 1.0000\n","Epoch 59/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0741 - accuracy: 1.0000 - val_loss: 0.0717 - val_accuracy: 1.0000\n","Epoch 60/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0714 - accuracy: 1.0000 - val_loss: 0.0691 - val_accuracy: 1.0000\n","Epoch 61/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0688 - accuracy: 1.0000 - val_loss: 0.0666 - val_accuracy: 1.0000\n","Epoch 62/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0664 - accuracy: 1.0000 - val_loss: 0.0642 - val_accuracy: 1.0000\n","Epoch 63/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0640 - accuracy: 1.0000 - val_loss: 0.0619 - val_accuracy: 1.0000\n","Epoch 64/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0618 - accuracy: 1.0000 - val_loss: 0.0597 - val_accuracy: 1.0000\n","Epoch 65/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0595 - accuracy: 1.0000 - val_loss: 0.0575 - val_accuracy: 1.0000\n","Epoch 66/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0573 - accuracy: 1.0000 - val_loss: 0.0554 - val_accuracy: 1.0000\n","Epoch 67/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0553 - accuracy: 1.0000 - val_loss: 0.0534 - val_accuracy: 1.0000\n","Epoch 68/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0533 - accuracy: 1.0000 - val_loss: 0.0515 - val_accuracy: 1.0000\n","Epoch 69/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0514 - accuracy: 1.0000 - val_loss: 0.0497 - val_accuracy: 1.0000\n","Epoch 70/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0496 - accuracy: 1.0000 - val_loss: 0.0479 - val_accuracy: 1.0000\n","Epoch 71/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0479 - accuracy: 1.0000 - val_loss: 0.0463 - val_accuracy: 1.0000\n","Epoch 72/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0463 - accuracy: 1.0000 - val_loss: 0.0447 - val_accuracy: 1.0000\n","Epoch 73/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0448 - accuracy: 1.0000 - val_loss: 0.0432 - val_accuracy: 1.0000\n","Epoch 74/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0433 - accuracy: 1.0000 - val_loss: 0.0418 - val_accuracy: 1.0000\n","Epoch 75/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0419 - accuracy: 1.0000 - val_loss: 0.0405 - val_accuracy: 1.0000\n","Epoch 76/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0405 - accuracy: 1.0000 - val_loss: 0.0392 - val_accuracy: 1.0000\n","Epoch 77/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0393 - accuracy: 1.0000 - val_loss: 0.0379 - val_accuracy: 1.0000\n","Epoch 78/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0380 - accuracy: 1.0000 - val_loss: 0.0367 - val_accuracy: 1.0000\n","Epoch 79/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0368 - accuracy: 1.0000 - val_loss: 0.0356 - val_accuracy: 1.0000\n","Epoch 80/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0357 - accuracy: 1.0000 - val_loss: 0.0345 - val_accuracy: 1.0000\n","Epoch 81/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0346 - accuracy: 1.0000 - val_loss: 0.0335 - val_accuracy: 1.0000\n","Epoch 82/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0336 - accuracy: 1.0000 - val_loss: 0.0325 - val_accuracy: 1.0000\n","Epoch 83/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0326 - accuracy: 1.0000 - val_loss: 0.0315 - val_accuracy: 1.0000\n","Epoch 84/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0317 - accuracy: 1.0000 - val_loss: 0.0306 - val_accuracy: 1.0000\n","Epoch 85/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0307 - accuracy: 1.0000 - val_loss: 0.0297 - val_accuracy: 1.0000\n","Epoch 86/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0299 - accuracy: 1.0000 - val_loss: 0.0288 - val_accuracy: 1.0000\n","Epoch 87/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0290 - accuracy: 1.0000 - val_loss: 0.0280 - val_accuracy: 1.0000\n","Epoch 88/150\n","16/16 [==============================] - 0s 3ms/step - loss: 0.0282 - accuracy: 1.0000 - val_loss: 0.0273 - val_accuracy: 1.0000\n","Epoch 89/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0274 - accuracy: 1.0000 - val_loss: 0.0265 - val_accuracy: 1.0000\n","Epoch 90/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0267 - accuracy: 1.0000 - val_loss: 0.0258 - val_accuracy: 1.0000\n","Epoch 91/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0260 - accuracy: 1.0000 - val_loss: 0.0251 - val_accuracy: 1.0000\n","Epoch 92/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0253 - accuracy: 1.0000 - val_loss: 0.0244 - val_accuracy: 1.0000\n","Epoch 93/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0246 - accuracy: 1.0000 - val_loss: 0.0238 - val_accuracy: 1.0000\n","Epoch 94/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0240 - accuracy: 1.0000 - val_loss: 0.0231 - val_accuracy: 1.0000\n","Epoch 95/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0233 - accuracy: 1.0000 - val_loss: 0.0225 - val_accuracy: 1.0000\n","Epoch 96/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0227 - accuracy: 1.0000 - val_loss: 0.0220 - val_accuracy: 1.0000\n","Epoch 97/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0222 - accuracy: 1.0000 - val_loss: 0.0214 - val_accuracy: 1.0000\n","Epoch 98/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0216 - accuracy: 1.0000 - val_loss: 0.0209 - val_accuracy: 1.0000\n","Epoch 99/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0211 - accuracy: 1.0000 - val_loss: 0.0203 - val_accuracy: 1.0000\n","Epoch 100/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0205 - accuracy: 1.0000 - val_loss: 0.0198 - val_accuracy: 1.0000\n","Epoch 101/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0200 - accuracy: 1.0000 - val_loss: 0.0194 - val_accuracy: 1.0000\n","Epoch 102/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0196 - accuracy: 1.0000 - val_loss: 0.0189 - val_accuracy: 1.0000\n","Epoch 103/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0191 - accuracy: 1.0000 - val_loss: 0.0184 - val_accuracy: 1.0000\n","Epoch 104/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0186 - accuracy: 1.0000 - val_loss: 0.0180 - val_accuracy: 1.0000\n","Epoch 105/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0182 - accuracy: 1.0000 - val_loss: 0.0176 - val_accuracy: 1.0000\n","Epoch 106/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0178 - accuracy: 1.0000 - val_loss: 0.0172 - val_accuracy: 1.0000\n","Epoch 107/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0174 - accuracy: 1.0000 - val_loss: 0.0168 - val_accuracy: 1.0000\n","Epoch 108/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0170 - accuracy: 1.0000 - val_loss: 0.0164 - val_accuracy: 1.0000\n","Epoch 109/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0166 - accuracy: 1.0000 - val_loss: 0.0160 - val_accuracy: 1.0000\n","Epoch 110/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0162 - accuracy: 1.0000 - val_loss: 0.0157 - val_accuracy: 1.0000\n","Epoch 111/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0158 - accuracy: 1.0000 - val_loss: 0.0153 - val_accuracy: 1.0000\n","Epoch 112/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0155 - accuracy: 1.0000 - val_loss: 0.0150 - val_accuracy: 1.0000\n","Epoch 113/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0151 - accuracy: 1.0000 - val_loss: 0.0146 - val_accuracy: 1.0000\n","Epoch 114/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0148 - accuracy: 1.0000 - val_loss: 0.0143 - val_accuracy: 1.0000\n","Epoch 115/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0145 - accuracy: 1.0000 - val_loss: 0.0140 - val_accuracy: 1.0000\n","Epoch 116/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0142 - accuracy: 1.0000 - val_loss: 0.0137 - val_accuracy: 1.0000\n","Epoch 117/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0139 - accuracy: 1.0000 - val_loss: 0.0134 - val_accuracy: 1.0000\n","Epoch 118/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0136 - accuracy: 1.0000 - val_loss: 0.0131 - val_accuracy: 1.0000\n","Epoch 119/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0133 - accuracy: 1.0000 - val_loss: 0.0129 - val_accuracy: 1.0000\n","Epoch 120/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0130 - accuracy: 1.0000 - val_loss: 0.0126 - val_accuracy: 1.0000\n","Epoch 121/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0128 - accuracy: 1.0000 - val_loss: 0.0123 - val_accuracy: 1.0000\n","Epoch 122/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0125 - accuracy: 1.0000 - val_loss: 0.0121 - val_accuracy: 1.0000\n","Epoch 123/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0123 - accuracy: 1.0000 - val_loss: 0.0119 - val_accuracy: 1.0000\n","Epoch 124/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0120 - accuracy: 1.0000 - val_loss: 0.0116 - val_accuracy: 1.0000\n","Epoch 125/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0118 - accuracy: 1.0000 - val_loss: 0.0114 - val_accuracy: 1.0000\n","Epoch 126/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0115 - accuracy: 1.0000 - val_loss: 0.0112 - val_accuracy: 1.0000\n","Epoch 127/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0113 - accuracy: 1.0000 - val_loss: 0.0109 - val_accuracy: 1.0000\n","Epoch 128/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0111 - accuracy: 1.0000 - val_loss: 0.0107 - val_accuracy: 1.0000\n","Epoch 129/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0109 - accuracy: 1.0000 - val_loss: 0.0105 - val_accuracy: 1.0000\n","Epoch 130/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0107 - accuracy: 1.0000 - val_loss: 0.0103 - val_accuracy: 1.0000\n","Epoch 131/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0105 - accuracy: 1.0000 - val_loss: 0.0101 - val_accuracy: 1.0000\n","Epoch 132/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0103 - accuracy: 1.0000 - val_loss: 0.0099 - val_accuracy: 1.0000\n","Epoch 133/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0101 - accuracy: 1.0000 - val_loss: 0.0098 - val_accuracy: 1.0000\n","Epoch 134/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0099 - accuracy: 1.0000 - val_loss: 0.0096 - val_accuracy: 1.0000\n","Epoch 135/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0097 - accuracy: 1.0000 - val_loss: 0.0094 - val_accuracy: 1.0000\n","Epoch 136/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0095 - accuracy: 1.0000 - val_loss: 0.0092 - val_accuracy: 1.0000\n","Epoch 137/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0093 - accuracy: 1.0000 - val_loss: 0.0091 - val_accuracy: 1.0000\n","Epoch 138/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0092 - accuracy: 1.0000 - val_loss: 0.0089 - val_accuracy: 1.0000\n","Epoch 139/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0090 - accuracy: 1.0000 - val_loss: 0.0087 - val_accuracy: 1.0000\n","Epoch 140/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0088 - accuracy: 1.0000 - val_loss: 0.0086 - val_accuracy: 1.0000\n","Epoch 141/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0087 - accuracy: 1.0000 - val_loss: 0.0084 - val_accuracy: 1.0000\n","Epoch 142/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0085 - accuracy: 1.0000 - val_loss: 0.0083 - val_accuracy: 1.0000\n","Epoch 143/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0084 - accuracy: 1.0000 - val_loss: 0.0081 - val_accuracy: 1.0000\n","Epoch 144/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0082 - accuracy: 1.0000 - val_loss: 0.0080 - val_accuracy: 1.0000\n","Epoch 145/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0081 - accuracy: 1.0000 - val_loss: 0.0078 - val_accuracy: 1.0000\n","Epoch 146/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0079 - accuracy: 1.0000 - val_loss: 0.0077 - val_accuracy: 1.0000\n","Epoch 147/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0078 - accuracy: 1.0000 - val_loss: 0.0076 - val_accuracy: 1.0000\n","Epoch 148/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0077 - accuracy: 1.0000 - val_loss: 0.0074 - val_accuracy: 1.0000\n","Epoch 149/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0075 - accuracy: 1.0000 - val_loss: 0.0073 - val_accuracy: 1.0000\n","Epoch 150/150\n","16/16 [==============================] - 0s 2ms/step - loss: 0.0074 - accuracy: 1.0000 - val_loss: 0.0072 - val_accuracy: 1.0000\n"]}],"source":["# train the model\n","history=model.fit(X_train, Y_train,\n"," validation_data=(X_val,Y_val),\n"," batch_size=64,\n"," epochs=150,\n"," verbose=1)"]},{"cell_type":"code","execution_count":10,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":428},"executionInfo":{"elapsed":468,"status":"ok","timestamp":1708799010370,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"fK_AAAoiQtlc","outputId":"3d6398a5-ac98-4759-cbaa-d7243e095e1b"},"outputs":[{"data":{"text/plain":[""]},"execution_count":10,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA+kAAAGJCAYAAAD2VnIMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACLD0lEQVR4nOzdeVxU9f7H8deZgRk22UTBBUXR3JdcMpduVhTlkpV5bTWtrEzL4le3vKXt2WJmi2V19baXNzNbLMssK/dyK/cVd1BERUAYmDm/PwanSFxA5Azwfj4e5wFz5pwz78Ogh898v+f7NUzTNBERERERERERy9msDiAiIiIiIiIiXirSRURERERERPyEinQRERERERERP6EiXURERERERMRPqEgXERERERER8RMq0kVERERERET8hIp0ERERERERET+hIl1ERERERETET6hIFxEREREREfETKtJFKrHU1FQMw+Dtt98u9b5z587FMAzmzp1b7rlERETEf1XE3w9vv/02hmGQmppapowi1ZmKdBERERERERE/oSJdRERERERExE+oSBeRKiUnJ8fqCCIiIiIiZaYiXeQ0PProoxiGwYYNG7jhhhuIiIigVq1ajB49GtM02bFjB/369SM8PJy4uDheeOGFY46xd+9ebrnlFmJjYwkKCqJdu3a88847x2x38OBBBg8eTEREBJGRkdx0000cPHiwxFzr1q3j6quvJjo6mqCgIDp16sQXX3xRpnPctm0bd955J82aNSM4OJiaNWsyYMCAEu8xO3jwIPfeey8JCQk4nU7q16/PoEGDyMjI8G2Tl5fHo48+yllnnUVQUBB16tThqquuYvPmzcDx73Ur6f65wYMHExYWxubNm+nVqxc1atTg+uuvB+CXX35hwIABNGjQAKfTSXx8PPfeey9Hjhwp8ef1z3/+k1q1ahEcHEyzZs146KGHAPjxxx8xDIPPPvvsmP0+/PBDDMNg4cKFpf2xiohINVYd/n44ntdee41WrVrhdDqpW7cuw4cPPybPxo0b6d+/P3FxcQQFBVG/fn2uueYaDh065Ntm9uzZ9OjRg8jISMLCwmjWrBn//ve/yzWriFUCrA4gUhUMHDiQFi1a8MwzzzBz5kyefPJJoqOjeeONN7jwwgt59tln+eCDD7jvvvvo3Lkz//jHPwA4cuQIPXv2ZNOmTYwYMYJGjRrxySefMHjwYA4ePMjIkSMBME2Tfv36MW/ePO644w5atGjBZ599xk033XRMltWrV9O9e3fq1avHgw8+SGhoKP/73/+44oor+PTTT7nyyitLdW6//vorCxYs4JprrqF+/fqkpqby+uuv07NnT9asWUNISAgA2dnZnHfeeaxdu5abb76ZDh06kJGRwRdffMHOnTuJiYnB7XbTp08f5syZwzXXXMPIkSM5fPgws2fPZtWqVSQmJpb6Z19YWEhycjI9evRg3LhxvjyffPIJubm5DBs2jJo1a7JkyRJeeeUVdu7cySeffOLb//fff+e8884jMDCQ2267jYSEBDZv3syXX37JU089Rc+ePYmPj+eDDz445mf3wQcfkJiYSNeuXUudW0REpCr//VCSRx99lMcee4ykpCSGDRvG+vXref311/n111+ZP38+gYGBuFwukpOTyc/P56677iIuLo5du3bx1VdfcfDgQSIiIli9ejV9+vShbdu2PP744zidTjZt2sT8+fNPO6OIXzBFpMweeeQREzBvu+0237rCwkKzfv36pmEY5jPPPONbf+DAATM4ONi86aabfOsmTJhgAub777/vW+dyucyuXbuaYWFhZlZWlmmapjljxgwTMJ977rlir3PeeeeZgPnf//7Xt/6iiy4y27RpY+bl5fnWeTwes1u3bmbTpk1963788UcTMH/88ccTnmNubu4x6xYuXGgC5rvvvutbN2bMGBMwp0+ffsz2Ho/HNE3TnDJligmY48ePP+42x8u1devWY871pptuMgHzwQcfPKXcY8eONQ3DMLdt2+Zb949//MOsUaNGsXV/zWOapjlq1CjT6XSaBw8e9K3bu3evGRAQYD7yyCPHvI6IiMiJVIe/H/773/+agLl161bTNL3XTYfDYV5yySWm2+32bffqq6+agDllyhTTNE1z+fLlJmB+8sknxz32iy++aALmvn37TphBpLJSd3eRcnDrrbf6vrfb7XTq1AnTNLnlllt86yMjI2nWrBlbtmzxrfv666+Ji4vj2muv9a0LDAzk7rvvJjs7m59++sm3XUBAAMOGDSv2OnfddVexHJmZmfzwww/885//5PDhw2RkZJCRkcH+/ftJTk5m48aN7Nq1q1TnFhwc7Pu+oKCA/fv306RJEyIjI1m2bJnvuU8//ZR27dqV+Em7YRi+bWJiYo7J/ddtyuKvP5eS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OXLkhD83ERGR46kOfz/8fQq2o1599VWzefPmZmBgoBkbG2sOGzbMPHDggO/5LVu2mDfffLOZmJhoBgUFmdHR0eYFF1xgfv/9975t5syZY/br18+sW7eu6XA4zLp165rXXnutuWHDhhNmEqksDNM8g6NQiIhUIYWFhdStW5e+ffsyefJkq+OIiIiISBWke9JFRE7RjBkz2LdvX7HB6EREREREypNa0kVETmLx4sX8/vvvPPHEE8TExLBs2TKrI4mIiIhIFaWWdBGRk3j99dcZNmwYtWvX5t1337U6joiIiIhUYWpJFxEREREREfETakkXERERERER8RMq0kVERERERET8RIDVASqax+Nh9+7d1KhRA8MwrI4jIiKCaZocPnyYunXrYrPp8/PyoOu9iIj4k9Jc66tdkb57927i4+OtjiEiInKMHTt2UL9+fatjVAm63ouIiD86lWt9tSvSa9SoAXh/OOHh4RanERERgaysLOLj433XKDl9ut6LiIg/Kc21vtoV6Ue7vIWHh+uiLSIifkXdssuPrvciIuKPTuVarxvfRERERERERPyEinQRERERERERP6EiXURERERERMRPVLt70kVERERERKQ40zQpLCzE7XZbHaXSCgwMxG63n/ZxVKSLiIiIiIhUYy6Xiz179pCbm2t1lErNMAzq169PWFjYaR1HRbqIiIiIiEg15fF42Lp1K3a7nbp16+JwODTbSBmYpsm+ffvYuXMnTZs2Pa0WdRXpIiIiIiIi1ZTL5cLj8RAfH09ISIjVcSq1WrVqkZqaSkFBwWkV6ZYOHPfzzz/Tt29f6tati2EYzJgx46T7zJ07lw4dOuB0OmnSpAlvv/32Gc8pIiIiIiJSldlsGlP8dJVXDwRL34mcnBzatWvHxIkTT2n7rVu30rt3by644AJWrFjBPffcw6233sq33357hpOKiIiIiIiInHmWdne/7LLLuOyyy055+0mTJtGoUSNeeOEFAFq0aMG8efN48cUXSU5OPlMx5W/mbcwgO78Ae2Eu4QdW43AdOOk+seFB1I0IBuBIoZt1e7Kw2wza1ov0bbNxbzbZ+QWlylIz1EmDaG+3nAKPh1W7DgHQPj4SA+8nWVv353Aw11Wq40YEO2gcE+p7vHyH9xxb1Y3AYfd+trX9QC77s/NLddwQRwDNYmv4Hv+x6yCFHpNmceGEBHq7xOw5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20PtnPUs2ZppdSIRETlFZar6du3axYgRI5g2bRqNGzcmOTmZ//3vf7hcrvLOV8zcuXN5+umnee2111i2bBnTp09n5syZPPHEE8fdZ9SoURw6dMi3lPVDBcu4/5wnXfeki4iIyClx1sA461IApnTYStfEmhYHEhGRU1Wmqi8mJoZ7772XFStWsHjxYs466yzuvPNO6taty913383KlStP6Rh2u5309PRi69PT04mLiytxn9GjR3PjjTdy66230qZNG6688kqefvppxo4di8dTcjcup9NJeHh4saVSKeru7jbsBKhIFxERkVPVdiAAsdu+wjDV3V1EpLI47aqvQ4cOjBo1ihEjRpCdnc2UKVPo2LEj5513HqtXrz7ufg6Hg44dOzJnzhzfOo/Hw5w5c+jatWuJ++Tm5mKzFY9st9sBqu70IkUDxxn2QIuDiIiISKXSJAmCoyA7Dbb+bHUaERE5RWUu0gsKCpg2bRq9evWiYcOGfPvtt7z66qukp6ezadMmGjZsyIABA054jJSUFN566y3eeecd1q5dy7Bhw8jJyWHIkCEADBo0iFGjRvm279u3L6+//joff/wxW7duZfbs2YwePZq+ffv6ivWqxnAfLdIdFicRERGRSiXAAa2uBGDpV5O4+6PlFgcSEZFTEVCWne666y4++ugjTNPkxhtv5LnnnqN169a+50NDQxk3bhx169Y94XEGDhzIvn37GDNmDGlpabRv355Zs2b5BpPbvn17sZbzhx9+GMMwePjhh9m1axe1atWib9++PPXUU2U5jcqhqCX9tUHnWhxEREREKp02/4TfpnBW5k98nzaQfX1aUquG0+pUIiJyAoZZhn7iF110EbfeeitXXXUVTmfJ/9EXFhYyf/58zj///NMOWZ6ysrKIiIjg0KFD/n9/uscNj0d7v//XVgiJtjaPiIicEZXq2lRJ6GdaxOOBl9vBwe2sP+8lmlxwE3abYXUqEZFqpzTXpTK1pP/1PvLjHjggwO8K9EqnqKs7ALYyvVUiIiJSndls0GYA/PICzdJngW2w1YlEROQkynRP+tixY5kyZcox66dMmcKzzz572qGkiPvPKe0+WV7y3PEiIiKVwcSJE0lISCAoKIguXbqwZMmSU9rv448/xjAMrrjiijMbsCpr80/v102zIWe/tVlEROSkylSkv/HGGzRv3vyY9a1atWLSpEmn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H34gJiYGm82G3W6nR48ejB07lrvvvpvly5ef0nFONJjMunXrTrr/kiVLWLVqFZMnTz7uNmPHjuWxxx47pTx+5eigcQD2QOtyiIiInKaBAweyb98+xowZQ1paGu3bt2fWrFm+6//27dux2f5sN8jJyeHOO+9k586dBAcH07x5c95//30GDhxo1SnIUTFNMVr2gzUzuDPgC576sSkDO8erNV1EpByVqSXd7XZTo0YNwHuv2e7duwFo2LAh69evL790JzF58mTatGnDOeecc9xtKu1AMu6/FOk2FekiIlK5jRgxgm3btpGfn8/ixYvp0qWL77m5c+fy9ttv+x4/+eSTbNy4kSNHjpCZmcmCBQtUoPuT8/4PgD72RYRkp/LB4u0WBxIRqVrKVKS3bt2alStXAtClSxeee+455s+fz+OPP07jxo1P+ThlHUwGvJ+yf/zxx9xyyy0n3M7pdBIeHl5sqRT+UqR/uHS3hUFERERE/qJOW2iajB0PdwXM4PW5m8h1FVqdSkSkyihTkf7www/j8XgAePzxx9m6dSvnnXceX3/9NS+//PIpH+evg8kcdXQwma5du55w308++YT8/Pyqe39aUXd3j2ngNsv0NomIiIicGT29g/teYZ9PRM5W3l24zeJAIiJVR5nuSU9OTvZ936RJE9atW0dmZiZRUVHFRnk/FSkpKdx000106tSJc845hwkTJhwzmEy9evUYO3Zssf0mT57MFVdcQc2aNctyCv6vqCW9gAAcASrSRURExI/U6wDN+2Bf9xX3Bkxj9E8J3HBuQ8KcZZ7dV0REipTb/6R/nxrtVJV2MBmA9evXM2/ePL777rvTzu23PEeLdLuKdBEREfE/F/wbc91M+tgX8/qRjbyzoDHDL2hidSoRkUrPLz7uHDFixHHnSi1pSrdmzZphmuYZTmWxopb0Quw47BoxVURERPxMbCuM1v1h1TReip1J9DlDrU4kIlIlqInWX7nVki4iIiJ+7oJ/g2GnycH5RGeusDqNiEiVoOrPX3l0T7qIiIj4uZqJ0P467/c/PAFAodtjYSARkcpP1Z+/cnunMik07TjseptERETET53/L7AFwtafeeKV13n+2/VWJxIRqdRU/fkrtaSLiIhIZRDZADp5Z+Xpve8/fLRkGzn5mjddRKSsVP35K7cL8A4c51SRLiIiIv7svP/DDAimg20TP16e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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# plot the development of the accuracy and loss during training\n","plt.figure(figsize=(12,4))\n","plt.subplot(1,2,(1))\n","plt.plot(history.history['accuracy'],linestyle='-.')\n","plt.plot(history.history['val_accuracy'])\n","plt.title('model accuracy')\n","plt.ylabel('accuracy')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='lower right')\n","plt.subplot(1,2,(2))\n","plt.plot(history.history['loss'],linestyle='-.')\n","plt.plot(history.history['val_loss'])\n","plt.title('model loss')\n","plt.ylabel('loss')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='upper right')"]},{"cell_type":"markdown","metadata":{"id":"uOwR3Esbw8eN"},"source":["### Visualize the learned kernel and experiment with the code\n","\n","You see that the CNN performs very good at this task (100% accuracy). We can check which pattern is recognized by the **learned kernel** and see if you think that this is helpful to distinguish between images with horizontal and vertical edges.\n","\n","Below you can see the original image, the image after the convolution operation with the learned kernel and the maximum value from the maxpooling operation. Note that the maxpooling has the same size as the convolved image so there is just one value as output.\n","\n","Move the sliders to inspect different pictures from the validation set and their predictions\n","\n","\n"]},{"cell_type":"code","execution_count":11,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":935,"referenced_widgets":["2b9eb29c4c4d4b44b1e5592233ae4dab","11b66fd5176b475ba5c69140eae37d62","ed53a993099641bb86c8d7a10fc17bdb","e905c391b1d644bc9f0b59976800f391","3ee2908fbdce4081a6bb10c970fa187d","9b72172c1a1c46439102f6059066a39f","613f8f4d5b0e4816aa55033960822230","5f1c8af64c254ffdb40ba8499cac6ca8","1140e90db2fc4b9c91cbbe362767d65d","f7e38cbf0fa84263916f1c8dbcf4c53c"]},"executionInfo":{"elapsed":1357,"status":"ok","timestamp":1708799011724,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"pl1yuAddVRnE","outputId":"6eb7bfed-14c1-4975-d9e9-385c6412784a"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAtcAAAEpCAYAAABY/g6pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAz50lEQVR4nO3dd3gU9drG8XuTkA2EEFpoJhQBjTEUDYL0CCgigiAqKkgAC2LotsN5jyK2IJaD0sQGKiAISFFBBKSqSBNpyhEFTgAhNBOkBJL83j94d182dXczm03w+7muvbj2l9mdh8nMPPfOzkxsxhgjAAAAAIUW4O8CAAAAgMsF4RoAAACwCOEaAAAAsAjhGgAAALAI4RoAAACwCOEaAAAAsAjhGgAAALAI4RoAAACwCOEaAAAAsAjh+v/07dtXtWvXvizmXbt2bfXt29er18bHxys+Pt6yWiTpueeek81mcxkrTI3emjZtmmw2m/bt21ek882uML/vvn37qmzZstYWBMAvfLG/LW5WrVolm82mVatWuTX92LFjFR0draysLN8W9n/27dsnm82madOmef3a1157zfrCLvHVV1+pbNmyOnr0qOXvbbPZNGjQIMvft7ix2Wx67rnnPH6dt+tHkYdrR8BxPIKCgnTFFVeob9++OnjwYFGXgwIcOnRIzz33nLZu3ervUuCBM2fO6LnnnnO7oQH+4ugJmzZt8ncpxVbt2rV1++235xj/+OOPFRgYqFtvvVXnzp3zQ2XWSktL0yuvvKKnn35aAQGX17G/xYsXexXuJOnWW29VvXr1lJSUZG1R8Jkgf834+eefV506dXTu3DmtX79e06ZN07p167Rjxw6FhIT4q6zLwu7du73eMX399dcuzw8dOqTRo0erdu3aaty4sQXVXVSYGku6d9991+dHZc6cOaPRo0dL0mV/ZAz4O5oxY4b69u2rDh06aMGCBZdF3/zggw+UkZGh++67r8jmWatWLZ09e1alSpXy6XwWL16siRMneh2wBwwYoCeeeEKjR49WWFiYtcXBcn5LN506dVLv3r310EMP6b333tMTTzyh3377TYsWLfJXSZcNu93u9Y4iODhYwcHBFleUU2FqLOlKlSolu93u7zIAXCIjI0Pnz5/3dxlumTVrlhISEtSuXTstXLjQkmB95swZCyornKlTp6pr165F+kHBZrMpJCREgYGBRTZPb/To0UPp6emaM2eOv0uBG4rNocPWrVtLkn777Tfn2Pnz5/Xss88qLi5O4eHhCg0NVevWrbVy5UqX11563tM777yjunXrym6364YbbtDGjRtzzGvBggWKjY1VSEiIYmNjNX/+/FxrOn36tB5//HFFRUXJbrfr6quv1muvvSZjjMt0jnOW5syZo5iYGJUuXVrNmzfX9u3bJUlTpkxRvXr1FBISovj4+HzP+TXGqHbt2rrjjjty/OzcuXMKDw/XgAED8ny9lPN8ZsfXrt9++61GjBihiIgIhYaGqnv37jnO4br0HMBVq1bphhtukCT169fPeSqP49yjtWvX6u6771bNmjVlt9sVFRWl4cOH6+zZs/nWl1uNl54qlP1x6fL65ZdfdNddd6lixYoKCQlRkyZNcv1AtnPnTrVr106lS5dWZGSkXnzxRbeOFi9atEg2m03btm1zjs2bN082m0133nmny7TXXHONevbs6TI2ffp0xcXFqXTp0qpYsaLuvfdeJScnu0yT2znXx48f1wMPPKBy5cqpfPnySkhI0E8//ZTnuV4HDx5Ut27dVLZsWUVEROiJJ55QZmampIvbQ0REhCRp9OjRzuXoOGJy+PBh9evXT5GRkbLb7apevbruuOMOv5+LDuTn4MGD6t+/v6pWrSq73a5rr71WH3zwgcs03vSMcePGOXvGrl27nNeI7NmzR3379lX58uUVHh6ufv365RpA3dnmJTl7U+nSpdW0aVOtXbvWq+Xw6aefqnfv3oqPj9eiRYtyBFF36omPj1dsbKw2b96sNm3aqEyZMvrnP//pcS91d3/sjr1792rbtm3q0KGDy/j111+fY9/boEGDHPvp2bNny2az6eeff3aOubPO5HVOraOfX5oT8rteJr/l1bdvX02cOFGSa69zmDVrluLi4hQWFqZy5cqpQYMGevPNN13ev0qVKmrYsKEWLlyYxxIsnBkzZujqq69WSEiI4uLitGbNGufPVq5cKZvNlmtWmjlzpmw2m77//vs839uRQdatW6chQ4YoIiJC5cuX14ABA3T+/Hn9+eef6tOnjypUqKAKFSroqaeeypGz3M1j6enpGj58uCIiIhQWFqauXbvqwIEDudblzvrhLb+dFpKdo7FXqFDBOZaWlqb33ntP9913nx5++GGdOnVK77//vjp27KgNGzbkOE1h5syZOnXqlAYMGCCbzaaxY8fqzjvv1O+//+48Svr111+rR48eiomJUVJSko4fP+4MGpcyxqhr165auXKlHnzwQTVu3FhLly7Vk08+qYMHD+rf//63y/Rr167VokWLlJiYKElKSkrS7bffrqeeekqTJk3SY489ppMnT2rs2LHq37+/vvnmm1yXg81mU+/evTV27FidOHFCFStWdP7s888/V1pamnr37u3VMh48eLAqVKigUaNGad++fRo3bpwGDRqk2bNn5zr9Nddco+eff17PPvusHnnkEecHoBYtWki6uPM5c+aMBg4cqEqVKmnDhg0aP368Dhw44PGn648//jjH2L/+9S+lpKQ4L+DbuXOnWrZsqSuuuEL/+Mc/FBoaqk8//VTdunXTvHnz1L17d0kXw+NNN92kjIwM53TvvPOOSpcuXWAdrVq1ks1m05o1a9SwYUNJF3+3AQEBWrdunXO6o0eP6pdffnG5EOSll17SM888o3vuuUcPPfSQjh49qvHjx6tNmzb68ccfVb58+VznmZWVpS5dumjDhg0aOHCgoqOjtXDhQiUkJOQ6fWZmpjp27KhmzZrptdde0/Lly/X666+rbt26GjhwoCIiIjR58mQNHDhQ3bt3dzYmx/+nR48e2rlzpwYPHqzatWsrJSVFy5Yt03//+1+/XdQL5OfIkSO68cYbnQcyIiIitGTJEj344INKS0vTsGHDJHneM6ZOnapz587pkUcekd1ud9nf3nPPPapTp46SkpK0ZcsWvffee6pSpYpeeeUV5zTubvPvv/++BgwYoBYtWmjYsGH6/fff1bVrV1WsWFFRUVFuL4d58+apV69eatOmjT7//PMc+zRP9kHHjx9Xp06ddO+996p3796qWrWq82fu9FJ398fu+u677yRdDNOXat26tT755BPn8xMnTmjnzp0KCAjQ2rVrXfbTERERuuaaayS5v87k5ssvv1TPnj3VoEEDJSUl6eTJk3rwwQd1xRVX5Dp9QctrwIABOnTokJYtW5aj1y1btkz33Xef2rdv71y3fv75Z3377bcaOnSoy7RxcXFasGBBwQvTQ6tXr9bs2bM1ZMgQ2e12TZo0Sbfeeqs2bNig2NhYxcfHKyoqSjNmzMjxe50xY4bq1q2r5s2bFzifwYMHq1q1aho9erTWr1+vd955R+XLl9d3332nmjVr6uWXX9bixYv16quvKjY2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P//srC03+/fvV/Xq1VWmTBmX8Xr16uU6fUhISI5AUKFCBbd+j3a7Xa+88oqWLFmiqlWrqk2bNho7dqwOHz5c4GsBfzh69Kj+/PNPvfPOOzm2LUc4vHT78qRn1KlTJ8/5FrS/dHebz6vvlCpVSldeeaXby6F9+/YaOHCgpk+fnutX1p7ug6644oo8L14v6P/uyf64sKpWrar69eu77Htbt26tNm3a6NChQ/r999/17bffKisryxlqPV1nLuX4feW2/81rn1yY3vrYY4/pqquuUqdOnRQZGan+/fvrq6++ynVa83/nF3t7gC0vufXLq666SmfOnHFelxUdHa0bbrjB5aDfjBkzdOONN+a5XLLzJCdduuzczWP79+9XQECA6tat6zJd9t5fmPXDXX4757pp06Zq0qSJJKlbt25q1aqV7r//fu3evdv5aXH69Onq27evunXrpieffFJVqlRRYGCgkpKSXC58dMjral/HCulLec3b25ruvfdeDR8+XDNmzNA///lPTZ8+XU2aNHE7IFpZS24yMzN1880368SJE3r66acVHR2t0NBQHTx4UH379vXqVnPnz5/XXXfdJbvdrk8//VRBQf+/ejre74knnlDHjh1zfb27G3hBWrVqJenikZLff/9d119/vfPCqLfeekt//fWXfvzxR7300ksu9dlsNi1ZsiTX5WzlH34p7FXtw4YNU5cuXbRgwQItXbpUzzzzjJKSkvTNN9/ouuuus6hKwBqObb937955XofgOO/W056R33UYBe0vi3Kbd5gwYYJOnjypt956SxUqVHC5rZun9RT2/y5Zuz+uVKmSMjIydOrUqRwhqlWrVlqxYoXOnj2rzZs369lnn1VsbKzKly+vtWvX6ueff1bZsmWd+y9P1hkrFKa3VqlSRVu3btXSpUu1ZMkSLVmyRFOnTlWfPn304YcfukzrCJyVK1cufNFe6NOnj4YOHaoDBw4oPT1d69ev14QJE9x+vSc5yZe5rSjWj2JxQaNj53fTTTdpwoQJ+sc//iFJmjt3rq688kp99tlnLp/UHJ+MPVWrVi1JFz/hZ7d79+4c0y5fvjzHhv7LL7+4vJevVKxYUZ07d9aMGTPUq1cvffvttxo3bpxP55mbvD4hb9++Xf/5z3/04YcfOi86kOTWV1t5GTJkiLZu3ao1a9a4XFwjyXmEp1SpUjmuJs+uVq1a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","text/plain":["
"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["\n","---------Move the sliders to inspect different vertical and horizontal images from the valset and their predictions:------------------\n","\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"ad5c288dc71b4e78be71f1ddd09b70f1","version_major":2,"version_minor":0},"text/plain":["interactive(children=(IntSlider(value=0, description='vertical ', max=499), IntSlider(value=500, description='…"]},"metadata":{},"output_type":"display_data"}],"source":["## Do not worry about this cell, just move the sliders.\n","import scipy.signal\n","from skimage.measure import block_reduce # For max pooling\n","import ipywidgets as widgets\n","\n","# Kernel from model\n","plt.figure(figsize=(10, 3))\n","plt.subplot(1, 2, 1)\n","plt.imshow(np.random.rand(25).reshape(5, 5),\"gray\") ,plt.title('Randomly initalized weights')\n","plt.subplot(1, 2, 2)\n","conv_filter=np.squeeze(model.get_weights()[0], axis=2)\n","plt.imshow(conv_filter[:,:,0],\"gray\"),plt.title('Learned Kernel (weights) , by model'),plt.show();\n","print(\"\\n---------Move the sliders to inspect different vertical and horizontal images from the valset and their predictions:------------------\\n\")\n","\n","def scale_convolution_map(conv_map, min_val=-3, max_val=3):\n"," clipped_conv_map = np.clip(conv_map, min_val, max_val)\n"," scaled_conv_map = (clipped_conv_map - min_val) / (max_val - min_val)\n"," return scaled_conv_map\n","\n","def plot_conv(img):\n"," convolved_image = scipy.signal.convolve2d(img.squeeze(), conv_filter.squeeze(), mode='same')\n"," scaled_conv_image = scale_convolution_map(convolved_image + model.get_weights()[1])\n"," max_pooled_image = block_reduce(convolved_image + model.get_weights()[1], block_size=(50, 50), func=np.max)\n"," scaled_max_pooled_image = scale_convolution_map(max_pooled_image)\n"," \n"," plt.figure(figsize=(20, 5)) # Adjust the figure size as needed\n"," plt.subplot(1, 6, 1)\n"," plt.imshow(img, \"gray\", vmin=0, vmax=1),plt.title('Original Image')\n"," plt.subplot(1, 6, 2)\n"," plt.imshow(scaled_conv_image, \"gray\", vmin=0, vmax=1),plt.title('Convolved Image')\n"," plt.subplot(1, 6, 3),plt.imshow(scaled_max_pooled_image, \"gray\", vmin=0, vmax=1)\n"," plt.title(f'Max Pooled = {max_pooled_image[0][0]:.2f}'),plt.xticks([]), plt.yticks([])\n"," plt.subplot(1, 6, 4),plt.axis('off')\n"," pred = model.predict(img.reshape(1, 50, 50, 1), verbose=0)\n"," text_info = f'''\n"," P(y=vertical|x): {pred[0][0]:.4f}\n"," P(y=horizontal|x): {pred[0][1]:.4f}\n"," \n"," \n"," -log(P(y=vertical|x)): {-np.log(pred[0][0]):.4f}\n"," -log(P(y=horizontal|x)): {-np.log(pred[0][1]):.4f}\n"," '''\n"," plt.text(0, 0.5, text_info, ha='left', va='center')\n"," plt.subplot(1, 6, 5)\n"," x_values = np.linspace(0.001, 1.1, 500)\n"," plt.plot(x_values, -np.log(x_values), label='-log(P(y|x))')\n"," plt.ylim(-0.5, 6),plt.xlim(-0.1, 1.1),plt.xlabel('P(y|x)')\n"," plt.plot(pred[0][0], -np.log(pred[0][0]), 'bo', label='-log(P(y=vertical|x))')\n"," plt.plot(pred[0][1], -np.log(pred[0][1]), 'ro', label='-log(P(y=horizontal|x))')\n"," plt.legend(),plt.grid(True), plt.tight_layout(),plt.show();\n","\n","def inspect_preds(horizontal,vertical):\n"," plot_conv(X_val[horizontal,:,:,0])\n"," plot_conv(X_val[vertical,:,:,0])\n","\n","horizontal_slider = widgets.IntSlider(min=0, max=num_images_val//2-1, step=1, value=0, description='vertical ')\n","vertical_slider = widgets.IntSlider(min=num_images_val//2, max=num_images_val-1, step=1, value=0, description='horizontal')\n","widgets.interact(inspect_preds, horizontal=horizontal_slider, vertical=vertical_slider);"]},{"cell_type":"markdown","metadata":{"id":"U4gnnlAPp_Q2"},"source":["### Repeat the training and experiment with the kernelsize and activation function.\n","\n","**Exercise**:\n","- Repeat the compiling and training, beginning from the cell:\n","\n","```\n","model = Sequential()\n"," \n"," ...\n"," \n","model.compile(loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy'])\n","```\n","\n","for several times and check if the CNN always learns the same kernel. \n","\n","- You can experiment with the code and check what happens if you use another kernel size, activation function (relu instead of linear ) or pooling method AveragePooling instead of MaxPooling. Try to make a prediction on the performance before doing the experiment.\n","\n","\n"]},{"cell_type":"markdown","metadata":{"id":"qjHAJkDVP8fN"},"source":["## Answer:\n","\n","- No it does not, sometimes it learns the horizontal patterns, and sometimes the vertical pattern.\n","\n","-"]},{"cell_type":"code","execution_count":12,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"elapsed":38402,"status":"ok","timestamp":1708799050120,"user":{"displayName":"Pascal Bühler","userId":"01261418420162852179"},"user_tz":-60},"id":"8YwThvI9QzzM","outputId":"18e6fbe4-7bc3-4589-d54a-9dc3157a9b2d"},"outputs":[{"name":"stdout","output_type":"stream","text":["Epoch 1/40\n","16/16 [==============================] - 0s 6ms/step - loss: 0.8904 - accuracy: 0.5000 - val_loss: 0.8370 - val_accuracy: 0.5000\n","Epoch 2/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.8097 - accuracy: 0.5000 - val_loss: 0.7707 - val_accuracy: 0.5000\n","Epoch 3/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.7491 - accuracy: 0.5000 - val_loss: 0.7162 - val_accuracy: 0.5000\n","Epoch 4/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.7005 - accuracy: 0.5000 - val_loss: 0.6742 - val_accuracy: 0.5000\n","Epoch 5/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6624 - accuracy: 0.5000 - val_loss: 0.6410 - val_accuracy: 0.5000\n","Epoch 6/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6338 - accuracy: 0.5000 - val_loss: 0.6169 - val_accuracy: 0.5000\n","Epoch 7/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.6107 - accuracy: 0.5000 - val_loss: 0.5973 - val_accuracy: 0.5000\n","Epoch 8/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5913 - accuracy: 0.5000 - val_loss: 0.5798 - val_accuracy: 0.5000\n","Epoch 9/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5737 - accuracy: 0.5000 - val_loss: 0.5633 - val_accuracy: 0.5000\n","Epoch 10/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5574 - accuracy: 0.5000 - val_loss: 0.5481 - val_accuracy: 0.5000\n","Epoch 11/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5421 - accuracy: 0.5440 - val_loss: 0.5336 - val_accuracy: 0.6240\n","Epoch 12/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5279 - accuracy: 0.7870 - val_loss: 0.5200 - val_accuracy: 0.8190\n","Epoch 13/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5148 - accuracy: 0.8190 - val_loss: 0.5078 - val_accuracy: 0.8360\n","Epoch 14/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.5032 - accuracy: 0.8310 - val_loss: 0.4968 - val_accuracy: 0.8370\n","Epoch 15/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4921 - accuracy: 0.8360 - val_loss: 0.4860 - val_accuracy: 0.8500\n","Epoch 16/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4811 - accuracy: 0.8560 - val_loss: 0.4750 - val_accuracy: 0.8670\n","Epoch 17/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4703 - accuracy: 0.8630 - val_loss: 0.4642 - val_accuracy: 0.8720\n","Epoch 18/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4595 - accuracy: 0.8650 - val_loss: 0.4537 - val_accuracy: 0.8880\n","Epoch 19/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4489 - accuracy: 0.8850 - val_loss: 0.4430 - val_accuracy: 0.8930\n","Epoch 20/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4382 - accuracy: 0.8940 - val_loss: 0.4325 - val_accuracy: 0.9030\n","Epoch 21/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4277 - accuracy: 0.9150 - val_loss: 0.4218 - val_accuracy: 0.9260\n","Epoch 22/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4171 - accuracy: 0.9290 - val_loss: 0.4116 - val_accuracy: 0.9260\n","Epoch 23/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.4068 - accuracy: 0.9310 - val_loss: 0.4014 - val_accuracy: 0.9340\n","Epoch 24/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3968 - accuracy: 0.9330 - val_loss: 0.3912 - val_accuracy: 0.9340\n","Epoch 25/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3867 - accuracy: 0.9340 - val_loss: 0.3812 - val_accuracy: 0.9340\n","Epoch 26/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3768 - accuracy: 0.9340 - val_loss: 0.3712 - val_accuracy: 0.9340\n","Epoch 27/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3668 - accuracy: 0.9340 - val_loss: 0.3614 - val_accuracy: 0.9340\n","Epoch 28/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3571 - accuracy: 0.9340 - val_loss: 0.3516 - val_accuracy: 0.9350\n","Epoch 29/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3475 - accuracy: 0.9340 - val_loss: 0.3424 - val_accuracy: 0.9360\n","Epoch 30/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3386 - accuracy: 0.9340 - val_loss: 0.3339 - val_accuracy: 0.9360\n","Epoch 31/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3303 - accuracy: 0.9340 - val_loss: 0.3258 - val_accuracy: 0.9360\n","Epoch 32/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3224 - accuracy: 0.9340 - val_loss: 0.3180 - val_accuracy: 0.9360\n","Epoch 33/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3148 - accuracy: 0.9370 - val_loss: 0.3105 - val_accuracy: 0.9360\n","Epoch 34/40\n","16/16 [==============================] - 0s 3ms/step - loss: 0.3074 - accuracy: 0.9370 - val_loss: 0.3032 - val_accuracy: 0.9360\n","Epoch 35/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.3002 - accuracy: 0.9370 - val_loss: 0.2962 - val_accuracy: 0.9370\n","Epoch 36/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2933 - accuracy: 0.9390 - val_loss: 0.2893 - val_accuracy: 0.9380\n","Epoch 37/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2866 - accuracy: 0.9420 - val_loss: 0.2827 - val_accuracy: 0.9450\n","Epoch 38/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2800 - accuracy: 0.9470 - val_loss: 0.2762 - val_accuracy: 0.9450\n","Epoch 39/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2736 - accuracy: 0.9470 - val_loss: 0.2699 - val_accuracy: 0.9450\n","Epoch 40/40\n","16/16 [==============================] - 0s 2ms/step - loss: 0.2675 - accuracy: 0.9470 - val_loss: 0.2639 - val_accuracy: 0.9450\n"]},{"data":{"text/plain":[""]},"execution_count":12,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA+kAAAGJCAYAAAD2VnIMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACgaklEQVR4nOzdd3iTVRvH8W+SNp20pXQxCgVk7y1LUUGUISIiCMpQUREQqfoKiqCo4ERQUByAW1EEREGUJXvJ3ntDSwu0he4mz/tHIFgpSEtpOn6f63quJucZuZPXlyd3zjn3MRmGYSAiIiIiIiIiLmd2dQAiIiIiIiIi4qAkXURERERERCSfUJIuIiIiIiIikk8oSRcRERERERHJJ5Ski4iIiIiIiOQTStJFRERERERE8gkl6SIiIiIiIiL5hJJ0ERERERERkXxCSbqIiIiIiIhIPqEkXaQAO3ToECaTiS+++CLb5/7111+YTCb++uuvXI9LRERE8q+8+P7wxRdfYDKZOHToUI5iFCnKlKSLiIiIiIiI5BNK0kVERERERETyCSXpIlKoJCYmujoEEREREZEcU5Iuch1eeeUVTCYTe/bs4aGHHsLf35/g4GBefvllDMPg6NGjdOrUCT8/P8LCwnjvvfcuu8apU6d49NFHCQ0NxdPTkzp16vDll19edlxcXBx9+vTB39+fgIAAevfuTVxcXJZx7dq1i/vvv5/AwEA8PT1p2LAhs2fPztF7PHz4ME899RRVqlTBy8uLEiVK0LVr1yznmMXFxTFkyBAiIiLw8PCgTJky9OrVi9jYWOcxKSkpvPLKK1SuXBlPT09KlizJfffdx/79+4Erz3XLav5cnz598PX1Zf/+/bRr145ixYrRs2dPAJYtW0bXrl0pW7YsHh4ehIeHM2TIEJKTk7P8vB544AGCg4Px8vKiSpUqvPTSSwAsXrwYk8nEzJkzLzvvu+++w2QysWrVqux+rCIiUoQVhe8PV/LRRx9Ro0YNPDw8KFWqFAMGDLgsnr1799KlSxfCwsLw9PSkTJkydO/enfj4eOcx8+fPp0WLFgQEBODr60uVKlV48cUXczVWEVdxc3UAIoVBt27dqFatGm+++SZz5szh9ddfJzAwkE8++YTbb7+dt956i2+//ZbnnnuORo0accsttwCQnJxMq1at2LdvHwMHDqR8+fL89NNP9OnTh7i4OAYPHgyAYRh06tSJ5cuX8+STT1KtWjVmzpxJ7969L4tl+/btNG/enNKlSzN06FB8fHz48ccfuffee/n555/p3Llztt7bunXrWLlyJd27d6dMmTIcOnSIjz/+mFatWrFjxw68vb0BOH/+PC1btmTnzp088sgj1K9fn9jYWGbPns2xY8cICgrCZrPRoUMHFi5cSPfu3Rk8eDDnzp1j/vz5bNu2jYoVK2b7s8/IyKBt27a0aNGCd9991xnPTz/9RFJSEv3796dEiRKsXbuWDz/8kGPHjvHTTz85z9+yZQstW7bE3d2dxx9/nIiICPbv38+vv/7KG2+8QatWrQgPD+fbb7+97LP79ttvqVixIk2bNs123CIiIoX5+0NWXnnlFV599VVat25N//792b17Nx9//DHr1q1jxYoVuLu7k5aWRtu2bUlNTWXQoEGEhYVx/PhxfvvtN+Li4vD392f79u106NCB2rVrM2rUKDw8PNi3bx8rVqy47hhF8gVDRHJs5MiRBmA8/vjjzraMjAyjTJkyhslkMt58801n+9mzZw0vLy+jd+/ezrZx48YZgPHNN98429LS0oymTZsavr6+RkJCgmEYhjFr1iwDMN5+++1Mr9OyZUsDMKZOnepsv+OOO4xatWoZKSkpzja73W40a9bMqFSpkrNt8eLFBmAsXrz4qu8xKSnpsrZVq1YZgPHVV18520aMGGEAxowZMy473m63G4ZhGFOmTDEAY+zYsVc85kpxHTx48LL32rt3bwMwhg4dek1xjxkzxjCZTMbhw4edbbfccotRrFixTG3/jMcwDGPYsGGGh4eHERcX52w7deqU4ebmZowcOfKy1xEREbmaovD9YerUqQZgHDx40DAMx33TarUad955p2Gz2ZzHTZgwwQCMKVOmGIZhGBs3bjQA46effrritd9//30DMGJiYq4ag0hBpeHuIrngsccecz62WCw0bNgQwzB49NFHne0BAQFUqVKFAwcOONvmzp1LWFgYDz74oLPN3d2dp59+mvPnz7NkyRLncW5ubvTv3z/T6wwaNChTHGfOnGHRokU88MADnDt3jtjYWGJjYzl9+jRt27Zl7969HD9+PFvvzcvLy/k4PT2d06dPc9NNNxEQEMCGDRuc+37++Wfq1KmT5S/tJpPJeUxQUNBlcf/zmJz45+eSVdyJiYnExsbSrFkzDMNg48aNAMTExLB06VIeeeQRypYte8V4evXqRWpqKtOnT3e2TZs2jYyMDB566KEcxy0iIkVbYf7+8G8LFiwgLS2NZ555BrP5UgrSr18//Pz8mDNnDgD+/v4A/PHHHyQlJWV5rYCAAAB++eUX7Hb7dcUlkh8pSRfJBf9O8Pz9/fH09CQoKOiy9rNnzzqfHz58mEqVKmW6WQFUq1bNuf/i35IlS+Lr65vpuCpVqmR6vm/fPgzD4OWXXyY4ODjTNnLkSMAxhy07kpOTGTFiBOHh4Xh4eBAUFERwcDBxcXGZ5obt37+fmjVrXvVa+/fvp0qVKri55d5MGzc3N8qUKXNZ+5EjR+jTpw+BgYH4+voSHBzMrbfeCuCM++IXnv+Ku2rVqjRq1Ihvv/3W2fbtt99y8803c9NNN+XWWxERkSKmMH9/+LeLMf37ta1WKxUqVHDuL1++PJGRkXz++ecEBQXRtm1bJk6cmOk7R7du3WjevDmPPfYYoaGhdO/enR9//FEJuxQampMukgssFss1tYFjftiNcvHm9Nxzz9G2bdssj8luUjlo0CCmTp3KM888Q9OmTfH398dkMtG9e/cbcjO8Uo+6zWbLst3Dw+OyLyk2m402bdpw5swZXnjhBapWrYqPjw/Hjx+nT58+OYq7V69eDB48mGPHjpGamsrq1auZMGFCtq8jIiJyUWH+/nA93nvvPfr06cMvv/zCn3/+ydNPP82YMWNYvXo1ZcqUwcvLi6VLl7J48WLmzJnDvHnzmDZtGrfffjt//vnnFT9DkYJCSbqIC5UrV44tW7Zgt9szJZq7du1y7r/4d+HChZw/fz7Tr+G7d+/OdL0KFSoAjiFvrVu3zpUYp0+fTu/evTNVlk1JSbmsEmvFihXZtm3bVa9VsWJF1qxZQ3p6Ou7u7lkeU7x4cYDLrn/xF/ZrsXXrVvbs2cOXX35Jr169nO3z58/PdNzFz+u/4gbo3r07kZGRfP/99yQnJ+Pu7k63bt2uOSYREZHcUhC+P2QV88XXvvh6AGlpaRw8ePCy161Vqxa1atVi+PDhrFy5kubNmzNp0iRef/11AMxmM3fccQd33HEHY8eOZfTo0bz00kssXrz4hr0Hkbyi4e4iLtSuXTuioqKYNm2asy0jI4MPP/wQX19f5/Dsdu3akZGRwccff+w8zmaz8eGHH2a6XkhICK1ateKTTz7h5MmTl71eTExMtmO0WCyX/Xr/4YcfXtaz3aVLFzZv3pzlUmUXz+/SpQuxsbFZ9kBfPKZcuXJYLBaWLl2aaf9HH32UrZj/ec2Lj8ePH5/puODgYG655RamTJnCkSNHsoznoqCgIO6++26++eYbvv32W+66667LhiOKiIjkhYLw/eHfWrdujdVq5YMPPsh0j508eTLx8fG0b98egISEBDIyMjKdW6tWLcxmM6mpqYBjDv2/1a1bF8B5jEhBpp50ERd6/PHH+eSTT+jTpw/r168nIiKC6dOns2LFCsaNG0exYsUA6NixI82bN2fo0KEcOnSI6tWrM2PGjEzzsy6aOHEiLVq0oFatWvTr148KFSoQHR3NqlWrOHbsGJs3b85WjB06dODrr7/G39+f6tWrs2rVKhYsWECJEiUyHff8888zffp0unbtyiOPPEKDBg04c+YMs2fPZtKkSdSpU4devXrx1VdfERkZydq1a2nZsiWJiYksWLCAp556ik6dOuHv70/Xrl358MMPMZlMVKxYkd9++y1bc+GqVq1KxYoVee655zh+/Dh+fn78/PPPmebzXfTBBx/QokUL6tevz+OPP0758uU5dOgQc+bMYdOmTZmO7dWrF/fffz8Ar732WrY+RxERkdxSEL4//FtwcDDDhg3j1Vdf5a677uKee+5h9+7dfPTRRzRq1MhZiHXRokUMHDiQrl27UrlyZTIyMvj666+xWCx06dIFgFGjRrF06VLat29PuXLlOHXqFB999BFlypShRYsW1xWnSL7gipLyIoXFxSVU/r0ESO/evQ0fH5/Ljr/11luNGjVqZGqLjo42+vbtawQFBRlWq9WoVatWpiVRLjp9+rTx8MMPG35+foa/v7/x8MMPO5cp+ffx+/fvN3r16mWEhYUZ7u7uRunSpY0OHToY06dPdx5zrUuonD171hmfr6+v0bZtW2PXrl1GuXLlMi0HczHGgQMHGqVLlzasVqtRpkwZo3fv3kZsbKzzmKSkJOOll14yypcvb7i7uxthYWHG/fffb+zfv995TExMjNGlSxfD29vbKF68uPHEE08Y27Zty3IJtqw+Z8MwjB07dhitW7c2fH19jaCgIKNfv37G5s2bs/y8tm3bZnTu3NkICAgwPD09jSpVqhgvv/zyZddMTU01ihcvbvj7+xvJyclX/dxERESupCh8f/j3EmwXTZgwwahatarh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JwCI7du3txnDpZ+xY8cO47a0tDQBQDQ0NNyQPImIiHoz1nsi88aZdKJepLCwEPX19Rg9ejTs7OyM7eOPP0ZRUZFxv/j4eONjFxcXhISEoKCgAABQUFCAUaNGmRx31KhROHr0KFpbW5Gfnw8rKyvceeedHcYSERFhfOzl5QUAqKio6HGOREREvR3rPZF5s5Y6ACK6dWprawEAaWlp8PHxMXlNo9GYFO7rZWNj06X9VCqV8bFCoQBguH6OiIiIeob1nsi8cSadqBcJCwuDRqNBSUkJgoKCTJqvr69xv927dxsfnz9/Hr/++itCQ0MBAKGhocjOzjY5bnZ2NgYOHAgrKysMGTIEer3e5Jo3IiIiunVY74nMG2fSiXoRe3t7zJ07F3PmzIFer8dtt92GqqoqZGdnw8HBAf7+/gCAN954A3379oWHhwcWLFgAV1dXTJgwAQDw4osvYtiwYVi8eDEmTpyInJwcvP/++1i1ahUAICAgAFOmTMG0adOwYsUKREZG4vjx46ioqMAjjzwiVepERES9Bus9kZmT+qJ4Irq19Hq9WL58uQgJCREqlUq4ubmJpKQkkZWVZVzkZcuWLSI8PFyo1WoxfPhw8csvv5gcY+PGjSIsLEyoVCrh5+cn3n33XZPXGxoaxJw5c4SXl5dQq9UiKChIrFmzRghxeSGZ8+fPG/fPy8sTAERxcfHNTp+IiKhXYL0nMl8KIYSQ8ksCIpKPzMxM3H333Th//jycnJykDoeIiIhuAtZ7InnjNelEREREREREMsFBOhEREREREZFM8HR3IiIiIiIiIpngTDoRERERERGRTHCQTkRERERERCQTHKQTERERERERyQQH6UREREREREQywUE6ERERERERkUxwkE5EREREREQkExykExEREREREckEB+lEREREREREMvF/z3LqYuChIP8AAAAASUVORK5CYII=","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["model = Sequential()\n","\n","model.add(Convolution2D(1,(5,5),padding='same',input_shape=(pixel,pixel,1)))\n","model.add(Activation('relu'))\n","\n","# take the max over all values in the activation map\n","model.add(MaxPooling2D(pool_size=(pixel,pixel)))\n","model.add(Flatten())\n","model.add(Dense(2))\n","model.add(Activation('softmax'))\n","\n","# compile model and initialize weights\n","model.compile(loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy'])\n","# train the model\n","history=model.fit(X_train, Y_train,\n"," validation_data=(X_val,Y_val),\n"," batch_size=64,\n"," epochs=40,\n"," verbose=1)\n","\n","# plot the development of the accuracy and loss during training\n","plt.figure(figsize=(12,4))\n","plt.subplot(1,2,(1))\n","plt.plot(history.history['accuracy'],linestyle='-.')\n","plt.plot(history.history['val_accuracy'])\n","plt.title('model accuracy')\n","plt.ylabel('accuracy')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='lower right')\n","plt.subplot(1,2,(2))\n","plt.plot(history.history['loss'],linestyle='-.')\n","plt.plot(history.history['val_loss'])\n","plt.title('model loss')\n","plt.ylabel('loss')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'valid'], loc='upper right')"]}],"metadata":{"accelerator":"GPU","colab":{"provenance":[]},"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.9.18"},"widgets":{"application/vnd.jupyter.widget-state+json":{"1140e90db2fc4b9c91cbbe362767d65d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"SliderStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"SliderStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":"","handle_color":null}},"11b66fd5176b475ba5c69140eae37d62":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"IntSliderModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"IntSliderModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"IntSliderView","continuous_update":true,"description":"vertical ","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_9b72172c1a1c46439102f6059066a39f","max":499,"min":0,"orientation":"horizontal","readout":true,"readout_format":"d","step":1,"style":"IPY_MODEL_613f8f4d5b0e4816aa55033960822230","value":0}},"2b9eb29c4c4d4b44b1e5592233ae4dab":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"VBoxModel","state":{"_dom_classes":["widget-interact"],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"VBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"VBoxView","box_style":"","children":["IPY_MODEL_11b66fd5176b475ba5c69140eae37d62","IPY_MODEL_ed53a993099641bb86c8d7a10fc17bdb","IPY_MODEL_e905c391b1d644bc9f0b59976800f391"],"layout":"IPY_MODEL_3ee2908fbdce4081a6bb10c970fa187d"}},"3ee2908fbdce4081a6bb10c970fa187d":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"5f1c8af64c254ffdb40ba8499cac6ca8":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"613f8f4d5b0e4816aa55033960822230":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"SliderStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"SliderStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":"","handle_color":null}},"9b72172c1a1c46439102f6059066a39f":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e905c391b1d644bc9f0b59976800f391":{"model_module":"@jupyter-widgets/output","model_module_version":"1.0.0","model_name":"OutputModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/output","_model_module_version":"1.0.0","_model_name":"OutputModel","_view_count":null,"_view_module":"@jupyter-widgets/output","_view_module_version":"1.0.0","_view_name":"OutputView","layout":"IPY_MODEL_f7e38cbf0fa84263916f1c8dbcf4c53c","msg_id":"","outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA5QAAAD7CAYAAAAVfNtaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTiElEQVR4nO3dd1gU1/s28HtpC9IUUBBFEDEiShEromJBsYstRA0CtkTR2DX+jDVR1CT2mkQRv2o01tijYkk0mBgUu0SNxgIoiIAUAdl5/+BlssMCwgouyP25rr2u2TNnZ54d9ug+e8rIBEEQQERERERERFRCWpoOgIiIiIiIiComJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlKVk7ty5kMlkar128+bNkMlkePDgQekGpeTBgweQyWTYvHlzmZ2D6F07c+YMZDIZzpw5887PHRgYCDs7u3d+XiIiIqLypNInlDdu3MDHH3+MWrVqQS6Xw9raGkOGDMGNGzc0HZpG5H1B3717t6ZDoTJ07949fPLJJ7C3t4e+vj5MTEzg6emJFStWICMjQ9PhvVfat2+Pxo0bazoMIiIiojJRqRPKvXv3wt3dHeHh4QgKCsLatWsxfPhwnD59Gu7u7ti3b1+xj/XFF1+o/UXc398fGRkZsLW1Vev1RCVx+PBhODs746effkKvXr2watUqhISEoE6dOpg6dSrGjx+v6RCJiIiIqILQ0XQAmnLv3j34+/vD3t4ev/76K6pXry7uGz9+PNq2bQt/f39cvXoV9vb2hR4nLS0NhoaG0NHRgY6OepdTW1sb2traar2WqCTu37+Pjz76CLa2tjh16hRq1qwp7gsODsbdu3dx+PBhDUZIRERERBVJpe2h/Prrr5Geno7vvvtOkkwCgIWFBTZs2IC0tDQsWbJELM+bJ3nz5k0MHjwY1apVQ5s2bST7lGVkZOCzzz6DhYUFjI2N0bt3bzx58gQymQxz584V6xU0h9LOzg49e/bEuXPn0KJFC+jr68Pe3h5btmyRnCMxMRFTpkyBs7MzjIyMYGJigm7duuHKlSuldKX+e29///03Pv74Y5iamqJ69eqYNWsWBEHAo0eP0KdPH5iYmMDKygrffvut5PVZWVmYPXs2mjZtClNTUxgaGqJt27Y4ffq0yrmeP38Of39/mJiYoGrVqggICMCVK1cKnP95+/ZtDBgwAGZmZtDX10ezZs1w4MCBUnvf76MlS5YgNTUVGzdulCSTeRwcHCQ9lK9fv8aXX36JevXqQS6Xw87ODv/3f/+HzMxMyeuK83n966+/IJPJEBYWpnLeX375BTKZDIcOHRLLLl++jG7dusHExARGRkbo1KkTLly4UOT7Gzt2LIyMjJCenq6yb9CgQbCyskJOTo5YdvToUbRt2xaGhoYwNjZGjx49Chzuvn//fjRu3Bj6+vpo3LhxiUYvFEQmk2Hs2LHYtWsXnJycYGBgAA8PD1y7dg0AsGHDBjg4OEBfXx/t27dXmV/922+/YeDAgahTpw7kcjlsbGwwceLEAkdJ5J1DOfaC5n8qFAosX74cjRo1gr6+PiwtLfHJJ5/gxYsXb/VeiYiI6P1WaRPKgwcPws7ODm3bti1wf7t27WBnZ1dgb83AgQORnp6OhQsXYuTIkYWeIzAwEKtWrUL37t2xePFiGBgYoEePHsWO8e7duxgwYAA6d+6Mb7/9FtWqVUNgYKDkC+8///yD/fv3o2fPnli6dCmmTp2Ka9euwcvLCzExMcU+V3H4+flBoVBg0aJFaNmyJb766issX74cnTt3Rq1atbB48WI4ODhgypQp+PXXX8XXpaSk4IcffkD79u2xePFizJ07F/Hx8fDx8UFUVJRYT6FQoFevXvjxxx8REBCABQsWIDY2FgEBASqx3LhxA61atcKtW7fw+eef49tvv4WhoSF8fX3f+sv+++zgwYOwt7dH69ati1V/xIgRmD17Ntzd3bFs2TJ4eXkhJCQEH330kUrdN31emzVrBnt7e/z0008qr925cyeqVasGHx8fALl/37Zt2+LKlSuYNm0aZs2ahfv376N9+/b4448/Co3Xz88PaWlpKu02PT0dBw8exIABA8TRAP/73//Qo0cPGBkZYfHixZg1axZu3ryJNm3aSBK448ePo3///pDJZAgJCYGvry+CgoLw119/FesaFua3337D5MmTERAQgLlz5+LWrVvo2bMn1qxZg5UrV2LMmDGYOnUqIiIiMGzYMMlrd+3ahfT0dIwePRqrVq2Cj48PVq1ahaFDh0rqHT58GH5+ftDV1UVISAj69euH4cOHIzIyUiWeTz75BFOnThXn0gYFBWHbtm3w8fFBdnb2W71XIiIieo8JlVBSUpIAQOjTp0+R9Xr37i0AEFJSUgRBEIQ5c+YIAIRBgwap1M3blycyMlIAIEyYMEFSLzAwUAAgzJkzRywLDQ0VAAj3798Xy2xtbQUAwq+//iqWPXv2TJDL5cLkyZPFslevXgk5OTmSc9y/f1+Qy+XC/PnzJWUAhNDQ0CLf8+nTpwUAwq5du1Te26hRo8Sy169fC7Vr1xZkMpmwaNEisfzFixeCgYGBEBAQIKmbmZkpOc+LFy8ES0tLYdiwYWLZnj17BADC8uXLxbKcnByhY8eOKrF36tRJcHZ2Fl69eiWWKRQKoXXr1kL9+vWLfI+VVXJycrE+93mioqIEAMKIESMk5VOmTBEACKdOnRLLivt5nTFjhqCrqyskJiaKZZmZmULVqlUlnwVfX19BT09PuHfvnlgWExMjGBsbC+3atRPL8j6vp0+fFgQh9zNQq1YtoX///pKYf/rpJ0l8L1++FKpWrSqMHDlSUi8uLk4wNTWVlLu5uQk1a9YUkpKSxLLjx48LAARbW9vCL+D/5+XlJTRq1EhSBkCQy+WSNr9hwwYBgGBlZSX+myMIudcs/78P6enpKucJCQkRZDKZ8O+//4plzs7OQu3atYWXL1+KZWfOnFGJ/bfffhMACNu2bZMc89ixYwWWlzZbW1uhevXqQlZWllh26tQpAYAwfvz4UjvP6dOnBX19fcHV1VVwdnYWPD09hStXrqh9vDlz5qgV36pVqyT/RuY3efJk4ccffxQEQRDWrVsnLFmyRM0Ic9/z0aNHC91/6NAhwd3dXdDT0yvVa50nICBAWLZsWakeE4Dw4sWLUj1mfpMnTy7Tz/2PP/4ouLq6Co0aNRIaNWokfPPNN4XW3bhxo9C4cWNBW1tb5Vr+/fffQvv27QVXV1ehQYMGwqRJk1S+ExARlbVK2UP58uVLAICxsXGR9fL2p6SkSMo//fTTN57j2LFjAIAxY8ZIyseNG1fsOJ2cnCQ9qNWrV0eDBg3wzz//iGVyuRxaWrl/xpycHDx//hxGRkZo0KABLl26VOxzFceIESPEbW1tbTRr1gyCIGD48OFiedWqVVVi1NbWhp6eHoDcXsjExES8fv0azZo1k8R47Ngx6OrqSnp9tbS0EBwcLIkjMTERp06dwocffoiXL18iISEBCQkJeP78OXx8fHDnzh08efKkVN/7+yDvc/ymz32eI0eOAAAmTZokKZ88eTIAqPQCFufz6ufnh+zsbOzdu1csO378OJKSkuDn5wcg93N8/Phx+Pr6SuYv16xZE4MHD8a5c+dU2mQemUyGgQMH4siRI0hNTRXLd+7ciVq1aolD1E+cOIGkpCQMGjRI/PwkJCRAW1sbLVu2FIdjx8bGIioqCgEBATA1NRWP17lzZzg5Ob3pEhapU6dOkmGnLVu2BAD0799f8jfKK1e+jgYGBuJ2WloaEhIS0Lp1awiCgMuXLwMAYmJicO3aNQwdOhRGRkZifS8vLzg7O0ti2bVrF0xNTdG5c2fJ9WjatCmMjIwKHJ5e2urUqSMZsr5x40Y0a9as1M/ToEEDREVF4erVq+jXrx+CgoJK/Rxv48mTJzhy5IjYHj799FNMnTpV7eOdOXNG/P+oIPXr18emTZve6hwV0evXr4vcP23aNMydO1cyRL402djY4NixY7h+/TrOnz+PdevWFXr7o6ZNm+Knn37C4MGDVfZNnToVffv2RVRUFKKionD8+PEi/95ERGWhUiaUeV/W8hLLwhSWeNatW/eN5/j333+hpaWlUtfBwaHYcdapU0elrFq1apI5TQqFAsuWLUP9+vUhl8thYWGB6tWr4+rVq0hOTi72udSJx9TUFPr6+rCwsFApzz/vKiwsDC4uLtDX14e5uTmqV6+Ow4cPS2L8999/UbNmTVSpUkXy2vzX7O7duxAEAbNmzUL16tUljzlz5gAAnj179tbv931jYmIC4M2f+zx5n+H819/KygpVq1bFv//+KykvzufV1dUVjo6O2Llzp1i2c+dOWFhYoGPHjgCA+Ph4pKeno0GDBirHa9iwIRQKBR49elRo3H5+fsjIyBCTk9TUVBw5cgQDBw4U5znfuXMHANCxY0eVz9Dx48fFz0/ee6xfv77KeQqKryQKak9A7hfNgsqVr+PDhw8RGBgIMzMzGBkZoXr16vDy8gIAsU3lxV7Qvzn5y+7cuYPk5GTUqFFD5Xqkpqa+k/YUFBSETZs2Ach9DxcuXEDXrl3F/deuXUObNm3g7u4OJycnfPXVV+K+kSNHYuzYsQByf3CqV6+eZNh9Ybp27Yro6GgAufN43d3d4eLiAi8vL9y8eVOs9/XXX6NRo0ZwdnbGkCFDCv239ZtvvkGLFi3g7u6Orl27in+Dly9fws/PDw0aNECbNm3EubIF2bRpkzjEGsidwz5hwgQAufPtfX19xbqHDh1C+/btAeT+DT09PeHq6gpnZ2d88cUXiIqKwvr167Ft2za4ublh/vz5Kuf74IMP4Orq+sZF5UaOHIlvvvlGfH7//n1YWVkhOzsb4eHh8PDwQJMmTdCoUSNs3LixwGMovxcAWL16NQIDA8XnhV2/gqxduxYtWrRA3bp1ERoaKpbfuXMHPXr0QPPmzeHi4oLVq1eL+2QyGebMmYPmzZtjxowZePnyJUaOHIkWLVrAxcUFo0aNQlZWFgCgRo0aqFevHo4fP17kdVGXp6cnrKysAOS2cUdHx0LvRe3q6oqGDRuKPx4rk8lk4ucxIyMD2dnZBc6PJyIqS5VylVdTU1PUrFkTV69eLbLe1atXUatWLfGLeB7l3oGyVNjKr4IgiNsLFy7ErFmzMGzYMHz55ZcwMzODlpYWJkyYAIVCUebxFCfGrVu3IjAwEL6+vpg6dSpq1KgBbW1thISE4N69eyWOI+99TZkyRZxzl19JEvfKwsTEBNbW1rh+/XqJXpd/sanCFOezAOQmfAsWLEBCQgKMjY1x4MABDBo0SO1VkvNr1aoV7OzsxF/0Dx48iIyMDLHHB/jvM/S///1P/FKnrLRiKUph1+tN1zEnJwedO3dGYmIipk+fDkdHRxgaGuLJkycIDAxUq90rFArUqFED27ZtK3B//oXLyoKnpyfWrl2LmJgYHDhwAAMHDpRcCzs7O4SHh0MulyMjIwOtW7eGt7c3WrVqhVWrVqFVq1bYtWsXtmzZghEjRqBdu3ZvPOeOHTvQtGlTPHv2DIMHD8aZM2fg7OyMbdu2YcCAAbhx4waOHTuGTZs2ISIiAlWrVsWoUaPw+eefY926dZJjbd++HdHR0YiIiIC2tjb+97//YcyYMTh8+DDmz58PuVyO27dvIyUlBa1atRJ7nvM7c+YMJk6cWOLrt3r1avTs2RMzZswAkJtYm5mZ4dNPP0VSUhKWL19e4mMqCwoKwqhRozBlyhQAucntkCFDoKurC3d3d5w7dw7a2tpITExEkyZN4OPjg9q1axf7+EVdv4LI5XL8+eefuH37Npo3bw5/f3/IZDIMGjQIW7duhaOjI9LT08Vr3bx5cwC57evixYsAgFGjRqFt27b4/vvvIQgCRo4ciRUrVoi9tR4eHggPD0e3bt2KjD06Olry74uyJk2aSBLegty8eRMRERFYv359kfUKsnz5cvTq1Qvr1q3DixcvMGvWLDRp0qTExyEiehuVMqEEgJ49e+L777/HuXPnxGFwyn777Tc8ePAAn3zyiVrHt7W1hUKhwP379yW9G3fv3lU75oLs3r0bHTp0UPlFOCkpSaXnUFN2794Ne3t77N27V5Kc5PUm5rG1tcXp06eRnp4u6aXMf83yhkHq6urC29u7DCN///Ts2RPfffcdIiIi4OHhUWTdvM/wnTt30LBhQ7H86dOnSEpKUvu+qX5+fpg3bx727NkDS0tLpKSkSBb5qV69OqpUqSL2HCm7ffs2tLS0VHrx8vvwww+xYsUKpKSkYOfOnbCzs0OrVq3E/fXq1QOQ2wtR1Gco7z3m9WgqKyi+d+HatWv4+++/ERYWJlmE58SJE5J6ebEX9G9O/rJ69erh5MmT8PT0fGc/mBXE398fmzdvxv79+7Ft2zZJgpuRkYExY8YgKioKWlpaePToEaKiotCqVSvo6+tj165daNasGTw8PPD5558Xeo7o6Gi4ubkByO2dCwsLwx9//AFnZ2dxKPCQIUMQHByMJ0+e4OTJk/Dz80PVqlUBAKNHj8bAgQNVjrt//35cvHgRTZs2BQDJUMnw8HAsW7YMMpkMpqamGDx4cKE/pj1+/BiWlpYlum5A7kJyU6dORWpqKry8vEr938bWrVvj9evXuHjxIpo1a4YtW7bg4MGDAHJX5x4+fDj+/vtv6Ojo4Pnz57h+/XqJEsqirl9BhgwZAgBwdHSEjo4O4uLikJKSghs3bkj+PXn58iVu3rwpJpTKC1zt378fERERWLp0KYDcz5jyjxhWVlaSnurC5A2jVsfjx4/Rp08frF+/vkTXK8/atWsxaNAgzJgxA8+ePUOHDh3QvHlzdO7cWa14iIjUUSmHvAK58w4MDAzwySef4Pnz55J9iYmJ+PTTT1GlShW155Xk9ZytXbtWUr5q1Sr1Ai6Etra2Sg/Qrl27ytUcwrz/oJXj/OOPPxARESGpl7ea5Pfffy+WKRQKrFmzRlKvRo0aaN++PTZs2IDY2FiV88XHx5dm+O+VadOmwdDQECNGjMDTp09V9t+7dw8rVqwAAHTv3h0AVHo28r58lWTFYmUNGzaEs7Mzdu7ciZ07d6JmzZqS3iRtbW106dIFP//8s2QI2NOnT7F9+3a0adNGZdRAfn5+fsjMzERYWBiOHTuGDz/8ULLfx8cHJiYmWLhwYYErmOZ9hmrWrAk3NzeEhYVJhjmeOHGiWF80y0JB7UkQBPHvlsfa2hqNGzfGli1bJPNJz549qzLk8sMPP0ROTg6+/PJLlfO9fv0aSUlJpfgOCjd06FCsXLkS+vr6KsOM/+///g8WFha4fPkyrly5gvbt2+PVq1fi/ujoaBgaGuLZs2fisMWC5H35j4qKwk8//aRy+5Q3KazHXhAEzJgxQzz2tWvXCh3aWlSvf5UqVSTvS5mOjo4k0VKu179/f5w/fx4NGjQQeytLW1BQEEJDQ3HmzBlYWFigcePGAHLneeYN5Y2KisIHH3xQ4HsoKv6SXD8A0NfXF7e1tbXx+vVrCIIAMzMz8RhRUVG4f/++ZKVw5fnEgiBgz549Yt3o6Ghs2LBBEl9xfmDJ+5GioEdRc3RjYmLg7e2NL774osAfKYpjzZo14vurUaMGunfvXuhcTCKislJpeyjr16+PsLAwDBkyBM7Ozhg+fDjq1q2LBw8eYOPGjUhISMCPP/4o9mSUVNOmTdG/f38sX74cz58/R6tWrXD27Fn8/fffAIo/jPBNevbsifnz5yMoKAitW7fGtWvXsG3bNsliJprWs2dP7N27F3379kWPHj1w//59rF+/Hk5OTpIvur6+vmjRogUmT56Mu3fvwtHREQcOHEBiYiIA6TVbs2YN2rRpA2dnZ4wcORL29vZ4+vQpIiIi8Pjx41K9D+f7pF69eti+fTv8/PzQsGFDDB06FI0bN0ZWVhZ+//137Nq1S5zT5OrqioCAAHz33XdISkqCl5cX/vzzT4SFhcHX1xcdOnRQOw4/Pz/Mnj0b+vr6GD58uMrcoK+++gonTpxAmzZtMGbMGOjo6GDDhg3IzMyU3Bu2MO7u7nBwcMDMmTORmZmpMhzNxMQE69atg7+/P9zd3fHRRx+hevXqePjwIQ4fPgxPT09x7lVISAh69OiBNm3aYNiwYUhMTMSqVavQqFEjyef3XXF0dES9evUwZcoUPHnyBCYmJtizZ0+B94tcuHAh+vTpA09PTwQFBeHFixdYvXo1GjduLIndy8sLn3zyCUJCQhAVFYUuXbpAV1cXd+7cwa5du7BixQoMGDCgzN+btbU1QkJC4OjoqLLvxYsXaNiwIXR0dBAdHY0TJ06IP0Q8fPgQY8aMwcmTJ7F69WpMmDBBZUhqUVq1aoVr167h+vXraNy4MXbs2IFatWqhVq1a8Pb2xuTJkzFp0iSYmJhgw4YN6NKli8oxfH198e2334r3xs3Ozsb169fRpEkTeHt7IzQ0FO3atcPLly/x448/ij1m+bm4uCA6OrrAW1o5ODjg6tWryMjIgK6uLrZv3y7uu3PnDurVq4ehQ4eiRYsW4q2BTExMipyLWBL+/v5wdXXF8+fPJT19L168gK2tLWQyGX799ddC//11cHDA4cOHkZOTg8zMTOzZs0eci1zU9SuuBg0awMTEBKGhoWIid/fuXZiZmcHMzEylvq+vLxYvXowNGzZAR0cHL168wPPnz8UpE7du3YKrq2uxzlvSHsrY2Fh06tQJ06dPL/DWWMVlb2+PY8eOYdiwYUhLS8Pp06fFhdOIiN6Zd7+wbPly9epVYdCgQULNmjUFXV1dwcrKShg0aJBw7do1lbp5t8+Ij48vdJ+ytLQ0ITg4WDAzMxOMjIwEX19fITo6WgAgudVGYbcN6dGjh8p5vLy8BC8vL/H5q1evhMmTJws1a9YUDAwMBE9PTyEiIkKlXmncNiT/+w4ICBAMDQ0LjFH5NgkKhUJYuHChYGtrK8jlcqFJkybCoUOHhICAAJXbLsTHxwuDBw8WjI2NBVNTUyEwMFA4f/68AEDYsWOHpO69e/eEoUOHClZWVoKurq5Qq1YtoWfPnsLu3buLfI+Uu9T8yJEjBTs7O0FPT08wNjYWPD09hVWrVkluxZKdnS3MmzdPqFu3rqCrqyvY2NgIM2bMkNQRhOJ/XvPcuXNHACAAEM6dO1dgjJcuXRJ8fHwEIyMjoUqVKkKHDh2E33//XVIn/21DlM2cOVMAIDg4OBR6HU6fPi34+PgIpqamgr6+vlCvXj0hMDBQ+OuvvyT19uzZIzRs2FCQy+WCk5OTsHfv3gI/vwUp7LYhwcHBkrK8Nvr1118X+B6V2+TNmzcFb29vwcjISLCwsBBGjhwpXLlypcA2vmPHDsHR0VGQy+VC48aNhQMHDgj9+/cXHB0dVWL97rvvhKZNmwoGBgaCsbGx4OzsLEybNk2IiYl54/t8G7a2tsLly5dVypVvy3Hp0iWhUaNGgrOzs+Dr6yv07t1bWLZsmZCdnS14eHgImzdvFgQh999Ed3d3lX8vBCH3Wrq6uhYYw9GjR4UmTZoIzs7OQrt27YQbN26I+5YsWSI4OTkJjRs3FgYPHizeQib/bUNWrFghuLi4CC4uLoKTk5N4K4iUlBThww8/FD744APB09NTGDVqVKG3DTlw4IAwYMAAyTVQvv3Up59+Ktjb2wuenp7CtGnTxPa1cOFCwcnJSXBzcxNcXFyEnTt3CoIgCP/884/g5uYmuLq6CvPmzVM538mTJ4VatWoJxsbGgpGRkVCrVi3h559/LjA2QRCE7t27C/r6+pLbdhw/flxwcHAQXF1dhYCAAMHDw0PYt2+fIAjS24ZkZmYK/fr1E+rXry906NBBGD16tOQ6FHb98kO+24aYm5uL/3/evXtX6Nmzp+Ds7Cw4OTkJ7dq1Ex4/flzg616+fCkEBweLn6smTZoIJ06cEAQh9/+t+vXrCw8ePCj0WryNESNGCFWqVBFcXV3Fx6ZNmwRBEIQnT55IPqehoaFCrVq1hCpVqgimpqZCrVq1hEuXLgmCkNsuWrduLbi4uAiOjo7CtGnTBIVCUSYxExEVRiYI+cZLUpmKiopCkyZNsHXrVnEOCBVt//796Nu3L86dOwdPT09Nh0NU4bm5uaF69eoq8y5J8xQKBVq0aIH9+/ejdu3aGDNmDGrVqoWZM2dqOrRK5dixY9i6dSu2bt2q6VCIiMq9SjuH8l3IyMhQKVu+fDm0tLSKtQJhZZT/muXk5GDVqlUwMTGBu7u7hqIiqpiys7NV7rd35swZcQ4ilT9aWlrYsGEDHjx4gMDAQFy4cAH+/v6aDqvSSU5OLtbweiIiAthDWYbmzZuHyMhIdOjQATo6Ojh69CiOHj2KUaNGSSb+039GjBiBjIwMeHh4IDMzE3v37sXvv/+OhQsXisvhE1HxPHjwAN7e3vj4449hbW2N27dvY/369TA1NcX169dhbm6u6RCJiIiogmNCWYZOnDiBefPm4ebNm0hNTUWdOnXg7++PmTNnvpP73FVE27dvx7fffou7d+/i1atXcHBwwOjRo8WblhNR8SUnJ2PUqFE4f/484uPjYWhoiE6dOmHRokVqLzhGREREpIwJJREREREREamlzOZQrlmzBnZ2dtDX10fLli3x559/ltWpiCosthMiIiIiqsjKJKHcuXMnJk2ahDlz5uDSpUtwdXWFj48Pnj17VhanI6qQ2E6IiIiIqKIrkyGvLVu2RPPmzcUbgysUCtjY2GDcuHH4/PPPi3ytQqFATEwMjI2NJTeyJyovBEHAy5cvYW1tDS0t9X+TeZt2klefbYXKq9JqJ2+L7YTKs/LSToiI3kaprwyTlZWFyMhIyYqcWlpa8Pb2RkRExBtfHxMTAxsbm9IOi6jUPXr0CLVr11brtW/bTgC2FaoY3qadlAa2E6oINN1OiIjeRqknlAkJCcjJyYGlpaWk3NLSErdv31apn5mZiczMTPE51wh6t5KTkyXPTU1NNRRJxWNsbKz2a0vaToDC28qAAQOgq6urdiz0n/zXvm/fvuL25s2bC33dnDlzxO1jx46VelwVUXZ2Nnbv3v1W7aQ05J3/3LlzMDIy0mgsRPmlpqaiTZs2Gm8nRERvQ+P3rggJCcG8efM0HUalZWJioukQKqx3PXyusLaiq6sLPT29dxrL+0pbW1vyXF9fX9wuajhalSpVxG3+LaQ0Pcw07/xGRkb80k7llqbbCRHR2yj1hNLCwgLa2tp4+vSppPzp06ewsrJSqT9jxgxMmjRJfJ6SksLhSfTeK2k7AdhW3oWkpCTJc+Ue+6ysLMm+x48fi9uF/c2IiIiI3nelPgNcT08PTZs2RXh4uFimUCgQHh4ODw8PlfpyuRwmJiaSB9H7rqTtBGBbISIiIqLyp0yGvE6aNAkBAQFo1qwZWrRogeXLlyMtLQ1BQUFlcTqiConthIiIiIgqujJJKP38/BAfH4/Zs2cjLi4Obm5uOHbsmMoCJESVGdsJEREREVV0ZbYoz9ixYzF27NiyOjzRe4HtpHzJP09SLpeL2/Hx8ZJ9CoVC3La2ti7bwIiIiIjKKd5Fl4iIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1KKj6QCIqPx4/fq15LmBgYG4HRsbK24bGhpK6tnb2xdYj4iIiIjeb+yhJCIiIiIiIrUwoSQiIiIiIiK1MKEkIiIiIiIitXAOJRGJEhISJM/d3NzE7evXr4vbycnJknqenp7i9rucQ8k5n0RERESaxR5KIiIiIiIiUgsTSiIiIiIiIlJLpR/yKgiCuC2TyTQYCZHmPX/+XPLc3Nxc3M4/HFaZtbW1uH3p0qXSD6wQFW2ILhEREdH7hj2UREREREREpBYmlERERERERKSWSj/ktaLhEF0qS0lJSZLnpqam4nZWVpa4/fjxY0k9KyurMo2rMBVtiC5XpSUiIqL3TYl7KH/99Vf06tUL1tbWkMlk2L9/v2S/IAiYPXs2atasCQMDA3h7e+POnTulFS9RhcB2QkRERESVQYkTyrS0NLi6umLNmjUF7l+yZAlWrlyJ9evX448//oChoSF8fHzw6tWrtw6WqKJgOyEiIiKiyqDEQ167deuGbt26FbhPEAQsX74cX3zxBfr06QMA2LJlCywtLbF//3589NFHbxctUQXBdkJERERElUGpzqG8f/8+4uLi4O3tLZaZmpqiZcuWiIiI4BdlIpTvdqI8TxIA5HK5uB0fHy9uKxQKST3lOYnvUkWb88nbnBAREdH7plQTyri4OACApaWlpNzS0lLcl19mZiYyMzPF5ykpKaUZElG5o047AdhWiIiIiKj80fhtQ0JCQmBqaio+bGxsNB0SUbnEtkJERERE5U2p9lDmDSN7+vQpatasKZY/ffpUMrRL2YwZMzBp0iTxeUpKCr8ov0d4mxNV6rQTgG2lIBVtiG5Fu80JERER0ZuUag9l3bp1YWVlhfDwcLEsJSUFf/zxBzw8PAp8jVwuh4mJieRB9D5Tp50AbCtEREREVP6UuIcyNTUVd+/eFZ/fv38fUVFRMDMzQ506dTBhwgR89dVXqF+/PurWrYtZs2bB2toavr6+pRk3UbnGdkJERERElUGJE8q//voLHTp0EJ/nDcELCAjA5s2bMW3aNKSlpWHUqFFISkpCmzZtcOzYMejr65de1ETlHNsJEREREVUGJU4o27dvL5kXl59MJsP8+fMxf/78twqMqCJjO6GCVLTbnBARERG9icZXeSUiIiIiIqKKiQklERERERERqaVUbxtCRESFq2i3OSEiIiJ6E/ZQEhERERERkVqYUBIREREREZFaOOSViES6urqS59nZ2eK2hYWFuP3o0SNJvZiYmLINjIiIiIjKJfZQEhERERERkVqYUBIREREREZFamFASERERERGRWphQEpHI3Nxc8nj+/Ln4UC43MjKSPOLi4sQHFU5XV1fyyM7OFh8WFhbiI7+YmBjxQURE7xd/f38sXLhQ02GUGplMhv3795fa8ezs7LB8+XLx+dy5cxEYGFjs1yckJKBGjRp4/PhxqcVEUkwoiYiIiIhKWWBgIGQyGWQyGfT09ODg4ID58+fj9evXYp0rV67gyJEj+OyzzzQYqXrmzp0LNzc3lfLY2Fh069bt3QdUCAsLCwwdOhRz5swpleNdvXoVbdu2hb6+PmxsbLBkyZI3vubixYvo1KkTqlatimrVqsHHxwdXrlwR98+dO1f8rCg/DA0NxTrff/892rZti2rVqqFatWrw9vbGn3/+qXKuW7duoXfv3jA1NYWhoSGaN2+Ohw8flsp7LwwTSiIiIiKiMtC1a1fExsbizp07mDx5MubOnYuvv/5a3L9q1SoMHDgQRkZGGoyyZARBkCTF+VlZWUEul7/DiN4sKCgI27ZtQ2Ji4lsdJyUlBV26dIGtrS0iIyPx9ddfY+7cufjuu+8KfU1qaiq6du2KOnXq4I8//sC5c+dgbGwMHx8fcTX9KVOmIDY2VvJwcnLCwIEDxeOcOXMGgwYNwunTpxEREQEbGxt06dIFT548Eevcu3cPbdq0gaOjI86cOYOrV69i1qxZ0NfXf6v3/SaVPqFU/hWAqLIr7pBXKysryYNDMounrIcUv379WnzkH16bkJAgPjIyMsRHzZo1JQ8iIio9crkcVlZWsLW1xejRo+Ht7Y0DBw4AAHJycrB792706tVLrD9//nw0btxY5Thubm6YNWtWic8/ePBg+Pn5Scryplls2bIFAKBQKBASEoK6devCwMAArq6u2L17t1j/zJkzkMlkOHr0KJo2bQq5XI6tW7di3rx5uHLlivg9evPmzQBUh7w+fvwYgwYNgpmZGQwNDdGsWTP88ccfAHIToD59+sDS0hJGRkZo3rw5Tp48WaL3OGzYMLi4uCAzMxMAkJWVhSZNmmDo0KFinUaNGsHa2hr79u0r0bHz27ZtG7KysrBp0yY0atQIH330ET777DMsXbq00Nfcvn0biYmJmD9/Pho0aIBGjRphzpw5ePr0Kf79918AgJGRkeR71dOnT3Hz5k0MHz5ccu4xY8bAzc0Njo6O+OGHH6BQKBAeHi7WmTlzJrp3744lS5agSZMmqFevHnr37o0aNWq81ft+k0qfUBIRERERvQsGBgbIysoCkDt0Mjk5Gc2aNRP3Dxs2DLdu3cLFixfFssuXL+Pq1asICgoCkJtY5P/hMf/jt99+AwAMGTIEBw8eRGpqqni8X375Benp6ejbty8AICQkBFu2bMH69etx48YNTJw4ER9//DHOnj0rif3zzz/HokWLcOvWLXTu3BmTJ09Go0aNxB61/IkrkNs75+XlhSdPnuDAgQO4cuUKpk2bBoVCIe7v3r07wsPDcfnyZXTt2hW9evUq0RDNlStXIi0tDZ9//jmA3KQqKSkJq1evltRr0aKFeF0AYPPmzSXuUIqIiEC7du2gp6cnlvn4+CA6OhovXrwo8DUNGjSAubk5Nm7ciKysLGRkZGDjxo1o2LAh7OzsCnzNDz/8gA8++ABt27YtNJb09HRkZ2fDzMwMQO4PA4cPH8YHH3wAHx8f1KhRAy1btizV+ayF0SnzMxARERERVWKCICA8PBy//PILxo0bBwD4999/oa2tLek9ql27Nnx8fBAaGormzZsDAEJDQ+Hl5QV7e3sAQO/evdGyZcsiz1erVi0AucmOoaEh9u3bB39/fwDA9u3b0bt3bxgbGyMzMxMLFy7EyZMn4eHhAQCwt7fHuXPnsGHDBnh5eYnHnD9/Pjp37iw+NzIygo6ODqysrAqNY/v27YiPj8fFixfFxMfBwUHc7+rqCldXV/H5l19+iX379uHAgQMYO3Zske9ROY6tW7fCy8sLxsbGWL58OU6fPg0TExNJPWtra1y+fFl8bmpqigYNGhTrHHni4uJQt25dSZmlpaW4r1q1aiqvMTY2xpkzZ+Dr64svv/wSAFC/fn388ssv0NFRTcVevXqFbdu2iQlyYaZPnw5ra2t4e3sDAJ49e4bU1FQsWrQIX331FRYvXoxjx46hX79+OH36tORvWdqYUFKZ4lDiiqVq1aqS58nJyeK28vj7vP/U8sTGxpZpXO+Krq6u5Hne3AYAKquvPnr0SNwu7lBfc3NzyfPnz58XuE/5l+SSHD8hIUHczr9QwvXr18Vt5b+rp6enpN778rckIioPDh06BCMjI2RnZ0OhUGDw4MGYO3cuACAjIwNyuVzlu9LIkSMxbNgwLF26FFpaWti+fTuWLVsm7jc2NoaxsXGxzq+jo4MPP/wQ27Ztg7+/P9LS0vDzzz9jx44dAIC7d+8iPT1dkigC/w0bVabck1pcUVFRaNKkiZhM5peamoq5c+fi8OHDiI2NxevXr5GRkVHiRWQ8PDwwZcoUfPnll5g+fTratGmjUsfAwADp6eni8759+4q9tGUpIyMDw4cPh6enJ3788Ufk5OTgm2++QY8ePXDx4kUYGBhI6u/btw8vX75EQEBAocdctGgRduzYgTNnzojfz/J6ffv06YOJEycCyP0u8Pvvv2P9+vVMKImIiIiIKpoOHTpg3bp10NPTg7W1taRHysLCAunp6cjKypIMoezVqxfkcjn27dsHPT09ZGdnY8CAAeL+bdu24ZNPPinyvEePHhWHSw4ZMgReXl549uwZTpw4AQMDA3Tt2hXAfz9gHj58WOzVzJN/YR3lFUeLK3+ylN+UKVNw4sQJfPPNN3BwcICBgQEGDBggDgsuLoVCgfPnz0NbWxt3794tsE5iYiKqV69eouPmlze/UVne88J6ardv344HDx4gIiICWlpaYlm1atXw888/46OPPpLU/+GHH9CzZ0+x5zO/b775BosWLcLJkyfh4uIilltYWEBHRwdOTk6S+g0bNsS5c+dK9kZLiAklEREREVEZMDQ0lAzxVJY3kuTmzZuSUSU6OjoICAhAaGgo9PT08NFHH0kSs5IMeQWA1q1bw8bGBjt37sTRo0cxcOBAcUSOk5MT5HI5Hj58WOIeLD09PeTk5BRZx8XFBT/88AMSExML7KU8f/48AgMDxZ7C1NRUPHjwoERxAMDXX3+N27dv4+zZs+KQ4bw5p3muX7+O9u3bl/jYyjw8PDBz5kxkZ2eL1/DEiRNo0KBBgcNdgdy5jlpaWpKe6Lzneb2Kee7fv4/Tp0+LCzflt2TJEixYsAC//PKLSo+xnp4emjdvjujoaEn533//DVtb2xK/15LgojxERERERO9Y9erV4e7uXmDv0YgRI3Dq1CkcO3YMw4YNk+wzNjaGg4NDkY/8PYODBw/G+vXrceLECQwZMkRyrClTpmDixIkICwvDvXv3cOnSJaxatQphYWFFxm9nZ4f79+8jKioKCQkJ4iqrygYNGgQrKyv4+vri/Pnz+Oeff7Bnzx5EREQAyJ1LuHfvXkRFReHKlSsYPHiwSpL1JpcvX8bs2bPxww8/wNPTE0uXLsX48ePxzz//iHXS09MRGRmJLl26iGX79u2Do6Njic41ePBg6OnpYfjw4bhx4wZ27tyJFStWYNKkSYUet3Pnznjx4gWCg4Nx69Yt3LhxA0FBQdDR0UGHDh0kx9+0aRNq1qxZ4H08Fy9ejFmzZmHTpk2ws7MTV39XniYzdepU7Ny5E99//z3u3r2L1atX4+DBgxgzZkyJ3mdJsYeSKjRBEMRtztd8e8pDbgBI/nPIP4dQ2fsy7664cxwBSFZze9PtPPKU9RzVouJVnl+pzNraWvL80qVLxToXERG9vREjRmDLli0qC9DUr18frVu3RmJi4ht7I4tjyJAhWLBgAWxtbVXmzn/55ZeoXr06QkJC8M8//6Bq1apwd3fH//3f/xV5zP79+2Pv3r3o0KEDkpKSEBoaisDAQEkdPT09HD9+HJMnT0b37t3x+vVrODk5Yc2aNQCApUuXYtiwYWjdujUsLCwwffp0pKSkFPt9vXr1Ch9//DECAwPF26+MGjUKhw8fhr+/P3799Vdoa2vj559/Rp06dSSrpiYnJ6v05r2Jqakpjh8/juDgYDRt2hQWFhaYPXs2Ro0aVehxHR0dcfDgQcybNw8eHh7Q0tJCkyZNcOzYMcntuhQKBTZv3ozAwEBoa2urnHvdunXIysqSDH8GgDlz5ojzcvv27Yv169cjJCQEn332GRo0aIA9e/YUOKe0NDGhJCIiIiIqZXn3ZSxKYGAgQkJCEBERIa6yCuT+YB4TE1NqPUsNGzaU/AivTCaTYfz48Rg/fnyB+9u3b1/ga+VyueR+lXny17W1tS2wHpDby3nq1ClJWXBwsOR5UUNg9fX1cePGDZXyn3/+WfJ8xYoVmD17tqQsMDBQJQEuDhcXF8ntR/Ir6LidO3dWWfgoPy0tLcmCf/kVdyjwsGHDVHq1yxoTSiIiIiIiDTAwMMCWLVsko0ji4+OxY8cOxMXFqcwDpJJLSEhAv379MGjQIE2H8t5iQlnJcZgo0X9KMuRVec5CcW/rUdZDipOSksRtU1NTyT7lFfMeP34sbhd1/zAiIip7+ReKqVGjBiwsLPDdd98VutALFZ+FhQWmTZum6TDeayValCckJATNmzeHsbExatSoAV9fX5Wxx69evUJwcDDMzc1hZGSE/v37qyyvS/Q+YzshIiIidQmCgPj4eAwePFjToZRL7du3h6+vr6bDICUlSijPnj2L4OBgXLhwASdOnEB2dja6dOmCtLQ0sc7EiRNx8OBB7Nq1C2fPnkVMTAz69etX6oETlVdsJ0RERERlgwll+VOiIa/Hjh2TPN+8eTNq1KiByMhItGvXDsnJydi4cSO2b9+Ojh07AgBCQ0PRsGFDXLhwAa1atSq9yInKKbYTIiIiIqos3moOZd6S93k3Ko2MjER2dja8vb3FOo6OjqhTpw4iIiIK/KKcmZkpmUdUkqWCiSqC0mgnANvKu1Dc23oA0lt7lJfbpijPk5TL5ZJ98fHx4rbyPb7y3zaEiIiIqCRKNORVmUKhwIQJE+Dp6YnGjRsDyL0Xm56ensqXMktLy0Lv0xYSEgJTU1PxYWNjo25IROVOabUTgG2FiIiIiMoftRPK4OBgXL9+HTt27HirAGbMmIHk5GTxUdT9V4gqmtJqJwDbChERERGVP2oNeR07diwOHTqEX3/9FbVr1xbLrayskJWVhaSkJEnvy9OnTwtdml4ul6sMzSJ6H5RmOwHYVt6Fsr6tR36vX78Wtw0MDAo9nqGhobhd1FBbXV1dcTs7O1uyTzl+5R8jinvLEyIiIqKClKiHUhAEjB07Fvv27cOpU6dQt25dyf6mTZtCV1cX4eHhYll0dDQePnwIDw+P0omYqJxjOyEiIiKiyqJEPZTBwcHYvn07fv75ZxgbG4vzvUxNTWFgYABTU1MMHz4ckyZNgpmZGUxMTDBu3Dh4eHhw5UqqNNhOiIiIiKiyKFFCuW7dOgC5939RFhoaisDAQADAsmXLoKWlhf79+yMzMxM+Pj5Yu3ZtqQRLVBGwnVBxJSQkiNtubm7i9vXr1yX1lFeb9fT0FLfzD3k1NzcXt58/f17ovhcvXojbRS0ERURERPQmJUooBUF4Yx19fX2sWbMGa9asUTsoooqM7YSIiIiIKgu1V3klIiIiIiKiyo0JJREREREREalFrduGEKkj/1BQmUz21scsjWMQaYryPEflOY7Kcyvzs7a2FrcvXbok2VfcOZSpqaniNm8bQkRERG+DPZRERERERESkFiaUREREREREpBYOeSUi0pCkpCRx29TUVNzOysqS1Hv8+LG4bWVlVejxqlatKm4r32oEyF1ZOI+9vb24nf/WI0REREQlwR5KIiIiIiIiUgsTSiIiIiIiIlILh7wSEWmI8tBWuVwubsfHx0vqKRQKcVt5ldf89PT0xO3MzEzJPgsLiwJfwyGvRERE9DbYQ0lERERERERqYUJJREREREREamFCSURERERERGphQklERERERERqYUJJREREREREamFCSURERERERGphQklERERERERqYUJJREREREREamFCSURERERERGphQklERERERERqYUJJREREREREamFCSURERERERGphQklEREREpCH+/v5YuHBhmR1fJpNh//79Fe7YpWnz5s2oWrWqpEwmk+HBgwfFPsbnn3+OcePGlW5g7wkmlEREREREpSwwMBAymQwymQx6enpwcHDA/Pnz8fr1a7HOlStXcOTIEXz22WcajFR9sbGx6Nat2zs739y5c+Hm5vbOzqdsypQpCAsLwz///FPi1z58+BA9evRAlSpVUKNGDUydOlXyOSjIggUL0Lp1a1SpUkUlGQZyPzuDBg2CjY0NDAwM0LBhQ6xYsUJSR/kzqPxo1KhRgedctGgRZDIZJkyYUKL3V6KEct26dXBxcYGJiQlMTEzg4eGBo0ePivtfvXqF4OBgmJubw8jICP3798fTp09LFBBRRcd2QkRERADQtWtXxMbG4s6dO5g8eTLmzp2Lr7/+Wty/atUqDBw4EEZGRhqMsuSysrIAAFZWVpDL5RqO5t2wsLCAj48P1q1bV6LX5eTkoEePHsjKysLvv/+OsLAwbN68GbNnzy7ydVlZWRg4cCBGjx5d4P7IyEjUqFEDW7duxY0bNzBz5kzMmDEDq1evFuusWLECsbGx4uPRo0cwMzPDwIEDVY538eJFbNiwAS4uLiV6f0AJE8ratWtj0aJFiIyMxF9//YWOHTuiT58+uHHjBgBg4sSJOHjwIHbt2oWzZ88iJiYG/fr1K3FQRBUZ2wkREREBgFwuh5WVFWxtbTF69Gh4e3vjwIEDAHITjd27d6NXr15i/fnz56Nx48Yqx3Fzc8OsWbPUjiMhIQF9+/ZFlSpVUL9+fTGGPGfPnkWLFi0gl8tRs2ZNfP7555IetPbt22Ps2LGYMGGCmFgB0iGvc+fOLbA3bPPmzQCAzMxMfPbZZ6hRowb09fXRpk0bXLx4UTzHmTNnIJPJEB4ejmbNmqFKlSpo3bo1oqOjAeQOW503bx6uXLmicuylS5fC2dkZhoaGsLGxwZgxY5Camlrs63P79m1UqVIF27dvF8t++uknGBgY4ObNm2JZr169sGPHjmIfFwCOHz+OmzdvYuvWrXBzc0O3bt3w5ZdfYs2aNWJiXpB58+Zh4sSJcHZ2LnD/sGHDsGLFCnh5ecHe3h4ff/wxgoKCsHfvXrGOqakprKysxMdff/2FFy9eICgoSHKs1NRUDBkyBN9//z2qVatWovcHlDCh7NWrF7p374769evjgw8+wIIFC2BkZIQLFy4gOTkZGzduxNKlS9GxY0c0bdoUoaGh+P3333HhwoUSB0ZUUbGdEBERUUEMDAzEJOLq1atITk5Gs2bNxP3Dhg3DrVu3JInW5cuXcfXqVTEJ2LZtG4yMjIp8/Pbbb5Lzzps3Dx9++CGuXr2K7t27Y8iQIUhMTAQAPHnyBN27d0fz5s1x5coVrFu3Dhs3bsRXX30lOUZYWBj09PRw/vx5rF+/XuW9TZkyRdIb9s0336BKlSri+5s2bRr27NmDsLAwXLp0CQ4ODvDx8RHjyDNz5kx8++23+Ouvv6Cjo4Nhw4YBAPz8/DB58mQ0atRIPIefnx8AQEtLCytXrsSNGzcQFhaGU6dOYdq0acX+uzg6OuKbb77BmDFj8PDhQzx+/BiffvopFi9eDCcnJ7FeixYt8PjxY8ncSzs7O8ydO7fQY0dERMDZ2RmWlpZimY+PD1JSUsTOhtKSnJwMMzOzQvdv3LgR3t7esLW1lZQHBwejR48e8Pb2Vuu8Omq9Crm/quzatQtpaWnw8PBAZGQksrOzJYE4OjqiTp06iIiIQKtWrQo8TmZmJjIzM8XnKSkp6oZEVO6UVjsB2FaIiIgqKkEQEB4ejl9++UVc2OXff/+FtrY2atSoIdarXbs2fHx8EBoaiubNmwMAQkNDxV4oAOjduzdatmxZ5Plq1aoleR4YGIhBgwYBABYuXIiVK1fizz//RNeuXbF27VrY2Nhg9erVkMlkcHR0RExMDKZPn47Zs2dDSyu3/6l+/fpYsmRJoefMS2YB4MKFC/jiiy8QFhaGxo0bIy0tDevWrcPmzZvFOZfff/89Tpw4gY0bN2Lq1KnicRYsWAAvLy8AuQvh9OjRA69evYKBgQGMjIygo6MDKysrybmV5/zZ2dnhq6++wqeffoq1a9cWeZ2UjRkzBkeOHMHHH38MPT09NG/eXGURHmtrawC5fzs7OzsAQL169WBhYVHocePi4iTJJADxeVxcXLHje5Pff/8dO3fuxOHDhwvcHxMTg6NHj0p6YQFgx44duHTpkuRHjJIqcUJ57do1eHh44NWrVzAyMsK+ffvg5OSEqKgo6OnpqUwatbS0LPJihYSEYN68eSUOnKg8K+12ArCtEBERVTSHDh2CkZERsrOzoVAoMHjwYLE3KyMjA3K5HDKZTPKakSNHYtiwYVi6dCm0tLSwfft2LFu2TNxvbGwMY2PjEsWhPC/O0NAQJiYmePbsGQDg1q1b8PDwkMTh6emJ1NRUPH78GHXq1AEANG3atFjnevjwIXx9fTFlyhR8+OGHAIB79+4hOzsbnp6eYj1dXV20aNECt27dKjTWmjVrAgCePXsmxlGQkydPIiQkBLdv30ZKSgpev36NV69eIT09HVWqVClW3ACwadMmfPDBB9DS0sKNGzdU/jYGBgYAgPT0dLEsPDy82McvK9evX0efPn0wZ84cdOnSpcA6YWFhqFq1Knx9fcWyR48eYfz48Thx4gT09fXVPn+JV3lt0KABoqKi8Mcff2D06NEICAiQjC0uqRkzZiA5OVl8PHr0SO1jEZUXpd1OALYVIiKiiqZDhw6IiorCnTt3kJGRgbCwMBgaGgLIXeQlPT1dZR5dr169IJfLsW/fPhw8eBDZ2dkYMGCAuF+dIa+6urqS5zKZDAqFokTvJS/uoqSlpaF3797w8PDA/PnzS3T8PMqx5iV0RcX64MED9OzZEy4uLtizZw8iIyOxZs0aAChyjmJBrly5grS0NKSlpSE2NlZlf97w3OrVqxf7mFZWViqLL+Y9z9/Tqo6bN2+iU6dOGDVqFL744osC6wiCgE2bNsHf3x96enpieWRkJJ49ewZ3d3fo6OhAR0cHZ8+excqVK6Gjo4OcnJxixVDiHsq8ZY+B3F8qLl68iBUrVsDPzw9ZWVlISkqS9L48ffq0yIsll8srzepQVHmUdjsB2FaIiIgqGkNDQ/H7QH55t7+4efOm5FYYOjo6CAgIQGhoKPT09PDRRx+JPWOAekNei9KwYUPs2bMHgiCICdz58+dhbGyM2rVrF/s4giDg448/hkKhwP/+9z9J7169evXE+Zd58/eys7Nx8eLFEt2iQk9PTyXJiYyMhEKhwLfffisOz/3pp5+Kfcw8iYmJCAwMxMyZMxEbG4shQ4bg0qVLkmt//fp16OrqFnrbjYJ4eHhgwYIFePbsmTi8+cSJEzAxMZHMz1THjRs30LFjRwQEBGDBggWF1jt79izu3r2L4cOHS8o7deqEa9euScqCgoLg6OiI6dOnQ1tbu1hxqD2HMo9CoUBmZiaaNm0KXV1dhIeHo3///gCA6OhoPHz4EB4eHm97GqIKje2EiIiIlFWvXh3u7u44d+6cyr0VR4wYgYYNGwLITe6UqTPktShjxozB8uXLMW7cOIwdOxbR0dGYM2cOJk2aJCZoxTF37lycPHkSx48fR2pqqrjKqqmpKQwNDTF69GhMnToVZmZmqFOnDpYsWYL09HSVJKcodnZ2uH//PqKiolC7dm0YGxvDwcEB2dnZWLVqFXr16lXookFv8umnn8LGxgZffPEFMjMz0aRJE0yZMkXs7QSA3377DW3btpUkmZ06dULfvn0xduzYAo/bpUsXODk5wd/fH0uWLEFcXBy++OILBAcHix0Ff/75J4YOHYrw8HDxx4CHDx8iMTERDx8+RE5ODqKiogAADg4OMDIywvXr19GxY0f4+Phg0qRJ4tQpbW1tlR7UjRs3omXLliorCBsbG6uUGRoawtzcvMDVhgtTooRyxowZ6NatG+rUqYOXL19i+/btOHPmDH755ReYmppi+PDhmDRpEszMzGBiYoJx48bBw8OjyIVGiN43bCdERERUHCNGjMCWLVtUkpH69eujdevWSExMfGNv5NuqVasWjhw5gqlTp8LV1RVmZmYYPnx4ocMnC3P27FmkpqaidevWkvLQ0FAEBgZi0aJFUCgU8Pf3x8uXL9GsWTP88ssvJbpNRf/+/bF371506NABSUlJ4rGXLl2KxYsXY8aMGWjXrh1CQkIwdOjQYh93y5YtOHLkCC5fviwO/dy6dSvatGmDnj17igsJ7dixQ2VF13v37iEhIaHQY2tra+PQoUMYPXo0PDw8YGhoiICAAMmQ4PT0dERHRyM7O1ssmz17NsLCwsTnTZo0AQCcPn0a7du3x+7duxEfH4+tW7di69atYj1bW1vJKrTJycnYs2cPVqxYUezrUVIyQRCE4lYePnw4wsPDERsbC1NTU7i4uGD69Ono3LkzgNwbtk+ePBk//vgjMjMz4ePjg7Vr15ZofHBKSgpMTU1L/k4qCeU/V/6JwuVd/o9aRYs/v+TkZJiYmKiUv4t2AvzXVgYNGiQZD1+ZnD59WvJc+R9n5RsBZ2RkSOrdu3evwNe8a8rxFxY7II3/XcaufA8y5V9jAUjmluSfV2Nvb4/MzEwsW7as0HbyruS1k6ioqFL9RZ+oNLx8+RJubm4abyekORkZGWjQoAF27twpGakkCALq16+PMWPGYNKkSRqM8P0lk8lw//59cbXWNzl69CgmT56Mq1evQkfnrQd5vldKdDU2btxY5H59fX2sWbNG0jVMVNmwnRAREVFxGBgYYMuWLZIervj4eOzYsQNxcXEqN6AnzUlLS0NoaCiTyQLwihARERERaUj79u0lz2vUqAELCwt89913JRoOSmVLeaVdkmJCSURERERUTpRgNhq9hTlz5qjcF5zUw4SSiIgKpDwEK/8KhJcvXxa388/9atCgQYnvb0ZERPQu5V9ch9RX/LWAiYiIiIiIiJQwoSQiIiIiIiK1cMgrkZKKfFsWotL2/Plzcdvc3Fyy7++//xa3XV1dJfv09PQ45JWIiKiSYA8lERERERERqYUJJREREREREamFQ16JiilvOGxKSgpMTU01HA1R2UtKShK383/mX758WWA9gENeiYiIKhP2UBIREREREZFamFASERERERGRWphQEhERERERkVo4h5KIiAqUlZUlbsvl8kLrZWRkSJ6bmZmplBEREdH7iT2UREREREREpBYmlERERERERKQWDnklIqK3kn84bEJCAl69eqWhaIiIiOhdYg8lERERERERqYUJJREREREREamFQ16JiDREV1dX3M7Ozha3LSwsJPUePXokbsfExJR9YERERETFxB5KIiIiIiIiUgsTSiIiIiIiIlILE0oiIiIiIiJSy1sllIsWLYJMJsOECRPEslevXiE4OBjm5uYwMjJC//798fTp07eNk6jCYjuhwpibm4uP58+fiw/l8rzPSN4jLi5OfJQ1XV1d8ZGdnS15KKtSpYrkERsb+07iIyIiIs1TO6G8ePEiNmzYABcXF0n5xIkTcfDgQezatQtnz55FTEwM+vXr99aBElVEbCdERERE9D5TK6FMTU3FkCFD8P3336NatWpieXJyMjZu3IilS5eiY8eOaNq0KUJDQ/H777/jwoULpRY0UUXAdkJERERE7zu1bhsSHByMHj16wNvbG1999ZVYHhkZiezsbHh7e4tljo6OqFOnDiIiItCqVau3j5gqLJlMpukQ3im2E3oTc3Nzcfv58+cFlgO5P07keZe3DSksvvxq1qwpeR4TE6MyLJaIiIjeTyVOKHfs2IFLly7h4sWLKvvi4uKgp6eHqlWrSsotLS0LnU+TmZmJzMxM8XlKSkpJQyIqd0q7nQBsK0RERERU/pRoyOujR48wfvx4bNu2Dfr6+qUS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\n","text/plain":"
"},"metadata":{},"output_type":"display_data"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA5QAAAD7CAYAAAAVfNtaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABSPUlEQVR4nO3dd1gU1/s28HtpC9IUQZoKKkQsgGBFVNSgWBMSVGJBwK5oYo/+bKiJGJNYYovJV1FjjTV2JVgSFY1BsUussYGKSq/CvH/wMtnZBYQVXJT7c117XbNnZmeeGeYAz54z58gEQRBAREREREREVEpamg6AiIiIiIiI3k1MKImIiIiIiEgtTCiJiIiIiIhILUwoiYiIiIiISC1MKImIiIiIiEgtTCiJiIiIiIhILUwoiYiIiIiISC1MKImIiIiIiEgtTCiJiIiIiIhILUwoiYiIiIiISC1MKImIiIiIiEgtTCiJiIiIiIhILUwoiYiIiIiISC1MKImIiIiIiEgtTCiJiIiIiIhILUwoiYiIiIiISC1MKImIiIiIiEgtTCiJiIiIiIhILUwoy0hoaChkMplan127di1kMhnu3btXtkEpuHfvHmQyGdauXVtuxyB6244fPw6ZTIbjx4+/9WMHBQXB3t7+rR+XiIiIqCKp9Anl1atXMWDAANja2kIul8PGxgb9+/fH1atXNR2aRhT8g759+3ZNh0Ll6Pbt2xg+fDjq1q0LfX19mJiYwNPTE0uWLEFGRoamw3uvtG/fHo0bN9Z0GERERETlolInlDt37oS7uzsiIyMRHByMFStWYPDgwTh27Bjc3d2xa9euEu9r+vTpav8jHhAQgIyMDNjZ2an1eaLS2L9/P5ydnfHrr7+iZ8+eWLp0KcLCwlC7dm1MmjQJX3zxhaZDJCIiIqJ3hI6mA9CU27dvIyAgAHXr1sUff/wBCwsLcd0XX3yBtm3bIiAgAJcuXULdunWL3E9aWhoMDQ2ho6MDHR31Lqe2tja0tbXV+ixRady9exefffYZ7OzscPToUVhbW4vrQkJCcOvWLezfv1+DERIRERHRu6TStlB+++23SE9Px08//SRJJgHA3Nwcq1atQlpaGhYsWCCWFzwnee3aNfTr1w/VqlVDmzZtJOsUZWRk4PPPP4e5uTmMjY3x0Ucf4dGjR5DJZAgNDRW3K+wZSnt7e/To0QMnT55EixYtoK+vj7p162L9+vWSY7x48QITJ06Es7MzjIyMYGJigq5du+LixYtldKX+O7d//vkHAwYMgKmpKSwsLDBjxgwIgoAHDx7g448/homJCaysrPD9999LPp+dnY2ZM2eiadOmMDU1haGhIdq2bYtjx46pHOv58+cICAiAiYkJqlatisDAQFy8eLHQ5z9v3LiBXr16wczMDPr6+mjWrBn27NlTZuf9PlqwYAFSU1OxevVqSTJZwMHBQdJC+erVK8ydOxf16tWDXC6Hvb09/u///g9ZWVmSz5Xkfv37778hk8mwbt06leMePnwYMpkM+/btE8suXLiArl27wsTEBEZGRvjwww9x5syZYs9v9OjRMDIyQnp6usq6vn37wsrKCrm5uWLZwYMH0bZtWxgaGsLY2Bjdu3cvtLv77t270bhxY+jr66Nx48al6r1QGJlMhtGjR2Pbtm1o2LAhDAwM4OHhgcuXLwMAVq1aBQcHB+jr66N9+/Yqz1f/+eef6N27N2rXrg25XI5atWph3LhxhfaSKDiGYuyFPf+Zl5eHxYsXo1GjRtDX14elpSWGDx+Oly9fvtG5EhER0fut0iaUe/fuhb29Pdq2bVvo+nbt2sHe3r7Q1prevXsjPT0d8+bNw9ChQ4s8RlBQEJYuXYpu3brhm2++gYGBAbp3717iGG/duoVevXqhU6dO+P7771GtWjUEBQVJ/uG9c+cOdu/ejR49emDhwoWYNGkSLl++DC8vLzx+/LjExyoJf39/5OXlYf78+WjZsiW++uorLF68GJ06dYKtrS2++eYbODg4YOLEifjjjz/EzyUnJ+N///sf2rdvj2+++QahoaF49uwZfHx8EBMTI26Xl5eHnj17YvPmzQgMDMTXX3+NuLg4BAYGqsRy9epVtGrVCtevX8eUKVPw/fffw9DQEL6+vm/8z/77bO/evahbty5at25dou2HDBmCmTNnwt3dHYsWLYKXlxfCwsLw2WefqWz7uvu1WbNmqFu3Ln799VeVz27duhXVqlWDj48PgPyfb9u2bXHx4kVMnjwZM2bMwN27d9G+fXucPXu2yHj9/f2RlpamUm/T09Oxd+9e9OrVS+wN8Msvv6B79+4wMjLCN998gxkzZuDatWto06aNJIE7cuQI/Pz8IJPJEBYWBl9fXwQHB+Pvv/8u0TUsyp9//okJEyYgMDAQoaGhuH79Onr06IHly5fjhx9+wKhRozBp0iRERUVh0KBBks9u27YN6enpGDlyJJYuXQofHx8sXboUAwcOlGy3f/9++Pv7Q1dXF2FhYfj0008xePBgREdHq8QzfPhwTJo0SXyWNjg4GBs3boSPjw9ycnLe6FyJiIjoPSZUQomJiQIA4eOPPy52u48++kgAICQnJwuCIAizZs0SAAh9+/ZV2bZgXYHo6GgBgDB27FjJdkFBQQIAYdasWWJZeHi4AEC4e/euWGZnZycAEP744w+x7OnTp4JcLhcmTJgglmVmZgq5ubmSY9y9e1eQy+XCnDlzJGUAhPDw8GLP+dixYwIAYdu2bSrnNmzYMLHs1atXQs2aNQWZTCbMnz9fLH/58qVgYGAgBAYGSrbNysqSHOfly5eCpaWlMGjQILFsx44dAgBh8eLFYllubq7QsWNHldg//PBDwdnZWcjMzBTL8vLyhNatWwuOjo7FnmNllZSUVKL7vkBMTIwAQBgyZIikfOLEiQIA4ejRo2JZSe/XqVOnCrq6usKLFy/EsqysLKFq1aqSe8HX11fQ09MTbt++LZY9fvxYMDY2Ftq1ayeWFdyvx44dEwQh/x6wtbUV/Pz8JDH/+uuvkvhSUlKEqlWrCkOHDpVsFx8fL5iamkrKmzRpIlhbWwuJiYli2ZEjRwQAgp2dXdEX8P/z8vISGjVqJCkDIMjlckmdX7VqlQBAsLKyEn/nCEL+NVP+/ZCenq5ynLCwMEEmkwn//vuvWObs7CzUrFlTSElJEcuOHz+uEvuff/4pABA2btwo2eehQ4cKLS8rdnZ2goWFhZCdnS2WHT16VAAgfPHFF2V2nGPHjgn6+vqCq6ur4OzsLHh6egoXL15Ue3+zZs1SK76lS5dKfjcqmzBhgrB582ZBEARh5cqVwoIFC9SMMP+cDx48WOT6ffv2Ce7u7oKenl6ZXusCgYGBwqJFi8p0nwCEly9fluk+lU2YMKHc7veizJ07V6hbt65Qt25d4f/+7/+K3O7rr78WPvjgA0Emkwm7du2SrGvRooXg6uoquLq6Co0aNRIAvNE9TkRUGpWyhTIlJQUAYGxsXOx2BeuTk5Ml5SNGjHjtMQ4dOgQAGDVqlKR8zJgxJY6zYcOGkhZUCwsL1K9fH3fu3BHL5HI5tLTyf4y5ubl4/vw5jIyMUL9+fZw/f77ExyqJIUOGiMva2tpo1qwZBEHA4MGDxfKqVauqxKitrQ09PT0A+a2QL168wKtXr9CsWTNJjIcOHYKurq6k1VdLSwshISGSOF68eIGjR4+iT58+SElJQUJCAhISEvD8+XP4+Pjg5s2bePToUZme+/ug4D5+3X1f4MCBAwCA8ePHS8onTJgAACqtgCW5X/39/ZGTk4OdO3eKZUeOHEFiYiL8/f0B5N/HR44cga+vr+T5ZWtra/Tr1w8nT55UqZMFZDIZevfujQMHDiA1NVUs37p1K2xtbcUu6hEREUhMTETfvn3F+ychIQHa2tpo2bKl2B07Li4OMTExCAwMhKmpqbi/Tp06oWHDhq+7hMX68MMPJd1OW7ZsCQDw8/OT/IwKyhWvo4GBgbiclpaGhIQEtG7dGoIg4MKFCwCAx48f4/Llyxg4cCCMjIzE7b28vODs7CyJZdu2bTA1NUWnTp0k16Np06YwMjIqtHt6Waldu7akq/rq1avRrFmzMj9O/fr1ERMTg0uXLuHTTz9FcHBwmR/jTTx69AgHDhwQ68GIESMwadIktfd3/Phx8e9QYRwdHbFmzZo3Osa76NWrV8Wunzx5MkJDQyVd48vTH3/8gc2bN+PSpUu4du0aDh8+XORz7N7e3jh48CDatWunsu7s2bOIiYlBTEwMQkND0bhxY7i4uJR3+EREACppl9eCf9YKEsuiFJV41qlT57XH+Pfff6GlpaWyrYODQ4njrF27tkpZtWrVJM805eXlYdGiRXB0dIRcLoe5uTksLCxw6dIlJCUllfhY6sRjamoKfX19mJubq5QrP3e1bt06uLi4QF9fH9WrV4eFhQX2798vifHff/+FtbU1qlSpIvms8jW7desWBEHAjBkzYGFhIXnNmjULAPD06dM3Pt/3jYmJCYDX3/cFCu5h5etvZWWFqlWr4t9//5WUl+R+dXV1hZOTE7Zu3SqWbd26Febm5ujYsSMA4NmzZ0hPT0f9+vVV9tegQQPk5eXhwYMHRcbt7++PjIwMMUlJTU3FgQMH0Lt3b/E555s3bwIAOnbsqHIPHTlyRLx/Cs7R0dFR5TiFxVcahdUnAKhVq1ah5YrX8f79+wgKCoKZmRmMjIxgYWEBLy8vABDrVEHshf3OUS67efMmkpKSUKNGDZXrkZqaWq71KTg4GGvWrBFjP3PmDLp06SKuv3z5Mtq0aQN3d3c0bNgQX331lbhu6NChGD16NID8L5rq1asn6W5flC5duiA2NhZA/vO77u7ucHFxgZeXF65duyZu9+2336JRo0ZwdnZG//79i/yd+t1336FFixZwd3dHly5dxGufkpICf39/1K9fH23atBGfkS3MmjVrxK7VQP6z62PHjgWQ/5y9r6+vuO2+ffvQvn17APk/O09PT7i6usLZ2RnTp09HTEwMfvzxR2zcuBFNmjTBnDlzVI73wQcfwNXV9bWDyQ0dOhTfffed+P7u3buwsrJCTk4OIiMj4eHhATc3NzRq1AirV68udB+K5wIAy5YtQ1BQkPi+qOtXmBUrVqBFixaoU6cOwsPDxfKbN2+ie/fuaN68OVxcXLBs2TJxnUwmw6xZs9C8eXNMnToVKSkpGDp0KFq0aAEXFxcMGzYM2dnZAIAaNWqgXr16OHLkSLHXpaxs3boVAQEBMDQ0hFwux6BBg7B58+ZCt23RokWxgwQWWL16teSLXiKi8lYpR3k1NTWFtbU1Ll26VOx2ly5dgq2trfiPeAHF1oHyVNTIr4IgiMvz5s3DjBkzMGjQIMydOxdmZmbQ0tLC2LFjkZeXV+7xlCTGDRs2ICgoCL6+vpg0aRJq1KgBbW1thIWF4fbt26WOo+C8Jk6cKD5zp6w0iXtlYWJiAhsbG1y5cqVUn1MebKooJbkXgPyE7+uvv0ZCQgKMjY2xZ88e9O3bV+1RkpW1atUK9vb2+PXXX9GvXz/s3bsXGRkZYssP8N899Msvv8DKykplH2UVS3GKul6vu465ubno1KkTXrx4gS+//BJOTk4wNDTEo0ePEBQUpFa9z8vLQ40aNbBx48ZC1ysPXFaWPD09sWLFCjx+/Bh79uxB7969JdfA3t4ekZGRkMvlyMjIQOvWreHt7Y1WrVph6dKlaNWqFbZt24b169djyJAhhbbeKNuyZQuaNm2Kp0+fol+/fjh+/DicnZ2xceNG9OrVC1evXsWhQ4ewZs0aREVFoWrVqhg2bBimTJmClStXSva1adMmxMbGIioqCtra2vjll18watQo7N+/H3PmzIFcLseNGzeQnJyMVq1aiS3Oyo4fP45x48aV+votW7YMPXr0wNSpUwHkJ9ZmZmYYMWIEEhMTsXjx4lLvU1FwcDCGDRuGiRMnAshPbvv37w9dXV24u7vj5MmT0NbWxosXL+Dm5gYfHx/UrFmzxPsv7voVRi6X46+//sKNGzfQvHlzBAQEQCaToW/fvtiwYQOcnJyQnp4uXuvmzZsDyK9X586dAwAMGzYMbdu2xc8//wxBEDB06FAsWbJEbK318PBAZGQkunbtWmzssbGxkt8ritzc3CQJb1Hu378v9pwA8u/3LVu2vPZzRXnw4AFOnDiBX375Re19EBGVVqVMKAGgR48e+Pnnn3Hy5EnJL/MCf/75J+7du4fhw4ertX87Ozvk5eXh7t27ktaNW7duqR1zYbZv344OHTqofDOcmJio0nKoKdu3b0fdunWxc+dOSXJS0JpYwM7ODseOHUN6erqklVL5mhV8Q6urqwtvb+9yjPz906NHD/z000+IioqCh4dHsdsW3MM3b95EgwYNxPInT54gMTFR7XlT/f39MXv2bOzYsQOWlpZITk6WDPJjYWGBKlWqiC1Iim7cuAEtLS2VVjxlffr0wZIlS5CcnIytW7fC3t4erVq1EtfXq1cPQH5rRHH3UME5FrRoKiosvrfh8uXL+Oeff7Bu3TrJIDwRERGS7QpiL+x3jnJZvXr18Pvvv8PT0/OtfWGmKCAgAGvXrsXu3buxceNGSWKbkZGBUaNGISYmBlpaWnjw4AFiYmLQqlUr6OvrY9u2bWjWrBk8PDwwZcqUIo8RGxuLJk2aAMhvnVu3bh3Onj0LZ2dnsQtw//79ERISgkePHuH333+Hv78/qlatCgAYOXIkevfurbLf3bt349y5c2jatCkASLpKRkZGYtGiRZDJZDA1NUW/fv2K/BLt4cOHsLS0LNV1A/IHkJs0aRJSU1Ph5eVV5r8TW7dujVevXuHcuXNo1qwZ1q9fj7179wLIH5V78ODB+Oeff6Cjo4Pnz5/jypUrpUooi7t+henfvz8AwMnJCTo6OoiPj0dycjKuXr0q+T2SkpKCa9euiQml4sBWu3fvRlRUFBYuXAgg/x5T/BLDyspK0lJdlIJu1BXJ2rVr0aNHjwrz95+IKodK2eUVACZNmgQDAwMMHz4cz58/l6x78eIFRowYgSpVqqj9fElBy9mKFSsk5UuXLlUv4CJoa2urtABt27atQj1DWPCHWjHOs2fPIioqSrJdwWiSP//8s1iWl5eH5cuXS7arUaMG2rdvj1WrViEuLk7leM+ePSvL8N8rkydPhqGhIYYMGYInT56orL99+zaWLFkCAOjWrRsAqLRwFPwTVpoRixU1aNAAzs7O2Lp1K7Zu3Qpra2tJq5K2tjY6d+6M3377TTLa6pMnT7Bp0ya0adNGpdeAMn9/f2RlZWHdunU4dOgQ+vTpI1nv4+MDExMTzJs3r9ARTAvuIWtrazRp0gTr1q2TdHeMiIgo0T+c5aGw+iQIgvhzK2BjY4PGjRtj/fr1kudJT5w4odL1sk+fPsjNzcXcuXNVjvfq1SskJiaW4RmoGjhwIH744Qfo6+urdC/+v//7P5ibm+PChQu4ePEi2rdvj8zMTHF9bGwsDA0N8fTpU7HbYmEK/vmPiYnBr7/+qjJtyusU1VIvCAKmTp0q7vvy5ctFdm0trrW/SpUqkvNSpKOjI0m0FLfz8/PDqVOnUL9+fbG1sqwFBwcjPDwcx48fh7m5ORo3bgwg/znPgq68MTEx+OCDDwo9h+LiL831AwB9fX1xWVtbG69evYIgCDAzMxP3ERMTg7t370pGCFd8jlgQBOzYsUPcNjY2FqtWrZLEV5IvVgq+pCjsVdQzuq1bt0aTJk3EluratWtLuvjeu3ev0McHSkIQBISHh7O7KxG9dZW2hdLR0RHr1q1D//794ezsjMGDB6NOnTq4d+8eVq9ejYSEBGzevFlsySitpk2bws/PD4sXL8bz58/RqlUrnDhxAv/88w+AkncjfJ0ePXpgzpw5CA4ORuvWrXH58mVs3LixRM9ZvC09evTAzp078cknn6B79+64e/cufvzxRzRs2FDyj66vry9atGiBCRMm4NatW3BycsKePXvw4sULANJrtnz5crRp0wbOzs4YOnQo6tatiydPniAqKgoPHz4s03k43yf16tXDpk2b4O/vjwYNGmDgwIFo3LgxsrOzcfr0aWzbtk18tsnV1RWBgYH46aefkJiYCC8vL/z1119Yt24dfH190aFDB7Xj8Pf3x8yZM6Gvr4/BgweLA0sV+OqrrxAREYE2bdpg1KhR0NHRwapVq5CVlSWZG7Yo7u7ucHBwwLRp05CVlaXSLc3ExAQrV65EQEAA3N3d8dlnn8HCwgL379/H/v374enpKT6DFRYWhu7du6NNmzYYNGgQXrx4gaVLl6JRo0aS+/dtcXJyQr169TBx4kQ8evQIJiYm2LFjR6HzRc6bNw8ff/wxPD09ERwcjJcvX2LZsmVo3LixJHYvLy8MHz4cYWFhiImJQefOnaGrq4ubN29i27ZtWLJkCXr16lVu52RjY4OwsDA4OTmprHv58iUaNGgAHR0dxMbGIiIiQvwC4v79+xg1ahR+//13LFu2DGPHjlXpklqcVq1a4fLly7hy5QoaN26MLVu2wNbWFra2tvD29saECRMwfvx4mJiYYNWqVejcubPKPnx9ffH999+Lc+Lm5OTgypUrcHNzg7e3N8LDw9GuXTukpKRg8+bNYouZMhcXF8TGxhY6lZWDgwMuXbqEjIwM6OrqYtOmTeK6mzdvol69ehg4cCBatGghTglkYmJS7LOIpREQEABXV1c8f/5c0tL38uVL2NnZQSaT4Y8//ijy966DgwP279+P3NxcZGVlYceOHeIzyMVdv5KqX78+TExMEB4eLiZyt27dgpmZGczMzFS29/X1xTfffINVq1ZBR0cHL1++xPPnz8VHJa5fvw5XV9cSHbe0LZSnT5+WvO/duzdCQkIwZswY6OjoYM2aNZJ5qkvj6NGjePXqFTp16qTW54mI1PbWx5WtYC5duiT07dtXsLa2FnR1dQUrKyuhb9++wuXLl1W2LZg+49mzZ0WuU5SWliaEhIQIZmZmgpGRkeDr6yvExsYKACRTbRQ1bUj37t1VjuPl5SV4eXmJ7zMzM4UJEyYI1tbWgoGBgeDp6SlERUWpbFcW04Yon3dgYKBgaGhYaIyK0yTk5eUJ8+bNE+zs7AS5XC64ubkJ+/btEwIDA1WmXXj27JnQr18/wdjYWDA1NRWCgoKEU6dOCQCELVu2SLa9ffu2MHDgQMHKykrQ1dUVbG1thR49egjbt28v9hxJEP755x9h6NChgr29vaCnpycYGxsLnp6ewtKlSyVTseTk5AizZ88W6tSpI+jq6gq1atUSpk6dKtlGEEp+vxa4efOmAEAAIJw8ebLQGM+fPy/4+PgIRkZGQpUqVYQOHToIp0+flmyjPG2IomnTpgkABAcHhyKvw7FjxwQfHx/B1NRU0NfXF+rVqycEBQUJf//9t2S7HTt2CA0aNBDkcrnQsGFDYefOnYXev4UpatqQkJAQSVlBHf32228LPUfFOnnt2jXB29tbMDIyEszNzYWhQ4cKFy9eLLSOb9myRXBychLkcrnQuHFjYc+ePYKfn5/g5OSkEutPP/0kNG3aVDAwMBCMjY0FZ2dnYfLkycLjx49fe57qsLOzEy5cuKBSrjgtx/nz54VGjRoJzs7Ogq+vr/DRRx8JixYtEnJycgQPDw9h7dq1giDk/y50d3dX+T0hCPnX0NXVtdAYDh48KLi5uQnOzs5Cu3bthKtXr4rrFixYIDRs2FBo3Lix0K9fP3HqGOVpQ5YsWSK4uLgILi4uQsOGDYXvvvtOEARBSE5OFvr06SN88MEHgqenpzBs2LAipw3Zs2eP0KtXL8k1UJx2asSIEULdunUFT09PYfLkyWK9mjdvntCwYUOhSZMmgouLi7B161ZBEAThzp07QpMmTQRXV1dh9uzZKsf7/fffBVtbW8HY2FgwMjISbG1thd9++63Q2ARBELp16ybo6+tLpu04cuSI4ODgILi6ugqBgYGCh4eHOJ2F4rQhWVlZwqeffio4OjoKHTp0EEaOHCm5DkVdP2VQmjakevXq4t/NW7duCT169BCcnZ2Fhg0bCu3atRMePnxY6OdSUlKEkJAQ8b5yc3MTIiIiBEHI/3vl6Ogo3Lt3r8hrUdYKfsfWqVNHmDJlilh+7tw5oWvXruL7uXPnCra2toKenp5QvXp1wdbWVnj69Km4vm/fvsLMmTPfWtxERAVkgqDUX5LKVUxMDNzc3LBhwwbxWRAq3u7du/HJJ5/g5MmT8PT01HQ4RO+8Jk2awMLCQuW5S9KcvLw8tGjRArt370bNmjUxatQo2NraYtq0aZoOrVI5dOgQNmzYgA0bNmg6FCKid0alfYbybcjIyFApW7x4MbS0tEo0EmFlpHzNcnNzsXTpUpiYmMDd3V1DURG9m3JyclTm3Tt+/Lj4LCJVHFpaWli1ahXu3buHoKAgnDlzBgEBAZoOq9JJSkoqUbd6IiL6D1soy9Hs2bMRHR2NDh06QEdHBwcPHsTBgwcxbNgwyQAA9J8hQ4YgIyMDHh4eyMrKws6dO3H69GnMmzdPHBafiErm3r178Pb2xoABA2BjY4MbN27gxx9/hKmpKa5cuYLq1atrOkQiIiJ6xzGhLEcRERGYPXs2rl27htTUVNSuXRsBAQGYNm3aW5nn7l20adMmfP/997h16xYyMzPh4OCAkSNHipOXE1HJJSUlYdiwYTh16hSePXsGQ0NDfPjhh5g/f77aA44RERERKWJCSURERERERGopt2coly9fDnt7e+jr66Nly5b466+/yutQRO8s1hMiIiIiepeVS0K5detWjB8/HrNmzcL58+fh6uoKHx8fPH36tDwOR/ROYj0hIiIiondduXR5bdmyJZo3by5ODJ6Xl4datWphzJgxmDJlSrGfzcvLw+PHj2FsbCyZyJ6oohAEASkpKbCxsYGWlvrfybxJPSnYnnWFKqqyqidvivWEKrKKUk+IiN5EmY8Mk52djejoaMmInFpaWvD29kZUVNRrP//48WPUqlWrrMMiKnMPHjxAzZo11frsm9YTgHWF3g1vUk/KAusJvQs0XU+IiN5EmSeUCQkJyM3NhaWlpaTc0tISN27cUNk+KysLWVlZ4nuOEUTvCmNjY7U/W9p6AhRdV3r16gVdXV3k5uZKttfW1haXnz9/LlmnON+ntbW1eidBb43iz1Lx52xmZibZzsDAQFyOj48v/8CKkZOTg+3bt79RPSkLBccfNWoU5HK5RmMhUpaVlYUVK1ZovJ4QEb0Jjc9dERYWhtmzZ2s6DKJSe9vd54qqK7q6utDT01OZwF5xahpdXV3JupycnCLXUcWj+LNU/DkrJ0iK7/X09Mo/sBLQdDfTguPL5XImlFRhabqeEBG9iTJPKM3NzaGtrY0nT55Iyp88eQIrKyuV7adOnYrx48eL75OTk9k9id57pa0nwOvrSlJSkmR7xUnrlf9ZSU5OFpcNDQ1LfwL0Vin+LBV/zsrz2Sq2UBIRERG9DWX+BLienh6aNm2KyMhIsSwvLw+RkZHw8PBQ2V4ul8PExETyInrflbaeAKwrRERERFTxlEuX1/HjxyMwMBDNmjVDixYtsHjxYqSlpSE4OLg8Dkf0TmI9ISIiIqJ3XbkklP7+/nj27BlmzpyJ+Ph4NGnSBIcOHVIZgISoMmM9ISIiIqJ3XbkNyjN69GiMHj26vHYPgCPCvq8q0+AEZVlPirtu6q6jioc/LyIiIqpIOIsuERERERERqYUJJREREREREalF4/NQvgl2/SL6j7a2dpHrlKcGUdy2uM9RxaP488rMzNRgJERERERsoSQiIiIiIiI1MaEkIiIiIiIitTChJCIiIiIiIrW8089QEtF/DAwMilyXkpIieZ+dnS0u5+TklFtMVDaSk5PFZcWfl6mpqSbCISIiIhKxhZKIiIiIiIjUwoSSiIiIiIiI1MIur0TvCT09vSLXmZubF/ue3g9xcXGaDoGIiIgqGbZQEhERERERkVqYUBIREREREZFamFASERERERGRWphQEhERERERkVqYUBIREREREZFamFASERERERGRWjhtCBERvdarV68k7w0MDMRl5elKDA0NkZOT81biIiIiIs1iCyURERERERGphQklERERERERqYVdXomIiqDYzVNHR/rrMiEhQVxOT08Xl21sbMo/MA1ISkqSvK9evbq4XLVqVck6HR0daGtrv42wiIiISMPYQklERERERERqYUJJREREREREamGXV6IiCIIgeS+TyTQUyfvjXetCqhiTubm5ZJ3iuTx//lxc1tPTK/H+dXV1xWXFUVGVj1WlShVxWXlE1bdF+f5PTEwUl5OTkyXrzMzM3kZIREREVAGUuoXyjz/+QM+ePWFjYwOZTIbdu3dL1guCgJkzZ8La2hoGBgbw9vbGzZs3yypeoncC6wkRERERVQalTijT0tLg6uqK5cuXF7p+wYIF+OGHH/Djjz/i7NmzMDQ0hI+PDzIzM984WKJ3BesJEREREVUGpe7y2rVrV3Tt2rXQdYIgYPHixZg+fTo+/vhjAMD69ethaWmJ3bt347PPPnuzaIneEawnRERERFQZlOkzlHfv3kV8fDy8vb3FMlNTU7Rs2RJRUVH8R/kdoPzcYGVWXs9MVuZ6ojj1hOK0E4D0eis+k2doaFj+gRVBMV7F5x2V1ynGq/i84+tYWFgUuj/l5zAVr4GmnuVVngYkLy9PXFb+GWVmZkqeCSUiIqL3V5kmlPHx8QAAS0tLSbmlpaW4TllWVhaysrLE98qDOxC9b9SpJwDrChERERFVPBqfNiQsLAympqbiq1atWpoOiahCYl0hIiIiooqmTFsoraysAABPnjyBtbW1WP7kyRM0adKk0M9MnToV48ePF98nJye/V/8oswvpfzjtRj516gnwftSV4u6BotZp8r5RntpEkbGxsbisOL1IcZ9RptiNVPFzyt1LFd8rr3tbDAwMJO8Vu7Qqnj8A1KxZE1paGv++koiIiN6CMv2LX6dOHVhZWSEyMlIsS05OxtmzZ+Hh4VHoZ+RyOUxMTCQvoveZOvUEYF0hIiIiooqn1C2UqampuHXrlvj+7t27iImJgZmZGWrXro2xY8fiq6++gqOjI+rUqYMZM2bAxsYGvr6+ZRk3UYXGekJERERElUGpE8q///4bHTp0EN8XdMELDAzE2rVrMXnyZKSlpWHYsGFITExEmzZtcOjQIejr65dd1EQVHOsJEREREVUGpU4o27dvX+xzgTKZDHPmzMGcOXPeKLD3BZ8brJxYTwpX3PN/ilNPVIRnBgHpc5LKz0a+fPlSXFacQqM0z00XNbVGSkqK5L25uflrP1PelH+XZWdni8s1a9aUrLO2tpaMSExERETvL46aQERERERERGphQklERERERERqKdNpQ4iIiqM89YQixW6eit0pNdXFE4Bk6gvlOKpWrVrocmno6emJy6ampuKyYhdX5feavB4lFRcXJ/kZEhER0fuLLZRERERERESkFiaUREREREREpBZ2eSWit0axi6cyxW6dyl0+K7u4uDhNh0BERERUKLZQEhERERERkVqYUBIREREREZFamFASERERERGRWphQEhERERFpSEBAAObNm6fpMMqMTCbD7t27y2x/9vb2WLx4sfg+NDQUQUFBJf58QkICatSogYcPH5ZZTCTFhJKIiIiIqIwFBQVBJpNBJpNBT08PDg4OmDNnDl69eiVuc/HiRRw4cACff/65BiNVT2hoKJo0aaJSHhcXh65du779gIpgbm6OgQMHYtasWWWyv0uXLqFt27bQ19dHrVq1sGDBgmK3v3jxIvr27YtatWrBwMAADRo0wJIlSyTbxMXFoV+/fvjggw+gpaWFsWPHquzn6tWr8PPzg729PWQymSTJLhAaGirecwUvJyenNzndEmFCSURERERUDrp06YK4uDjcvHkTEyZMQGhoKL799ltx/dKlS9G7d28YGRlpMMrSEQRBkhQrs7Kyglwuf4sRvV5wcDA2btyIFy9evNF+kpOT0blzZ9jZ2SE6OhrffvstQkND8dNPPxX5mejoaNSoUQMbNmzA1atXMW3aNEydOhXLli0Tt8nKyoKFhQWmT58OV1fXQveTnp6OunXrYv78+bCysiryeI0aNUJcXJz4OnnypPonXEJMKImIiIiIyoFcLoeVlRXs7OwwcuRIeHt7Y8+ePQCA3NxcbN++HT179hS3nzNnDho3bqyynyZNmmDGjBmlPn6/fv3g7+8vKcvJyYG5uTnWr18PAMjLy0NYWBjq1KkDAwMDuLq6Yvv27eL2x48fh0wmw8GDB9G0aVPI5XJs2LABs2fPxsWLF8WWsLVr1wJQ7fL68OFD9O3bF2ZmZjA0NESzZs1w9uxZAMDt27fx8ccfw9LSEkZGRmjevDl+//33Up3joEGD4OLigqysLABAdnY23NzcMHDgQHGbRo0awcbGBrt27SrVvpVt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KJuIiSo41hMiIiIiqixK1UIZEhKCTZs24bfffoOxsbH4vJepqSkMDAxgamqKwYMHY/z48TAzM4OJiQnGjBkDDw8PjlxJlQbrCRERERFVFqVKKFeuXAkgf/4XReHh4QgKCgIALFq0CFpaWvDz80NWVhZ8fHywYsWKMgmW6F3AekJERERElUWpEkpBEF67jb6+PpYvX47ly5erHRTRu4z1hIiIiIgqizeah5KIiIiIiIgqLyaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERESkFiaUREREREREpBYmlERERERERKQWJpRERERERBoSEBCAefPmldv+ZTIZdu/e/c7tuyytXbsWVatWlZTJZDLcu3evxPuYMmUKxowZU7aBvSeYUBIRERERlbGgoCDIZDLIZDLo6enBwcEBc+bMwatXr8RtLl68iAMHDuDzzz/XYKTqi4uLQ9euXd/a8UJDQ9GkSZO3djxFEydOxLp163Dnzp1Sf/b+/fvo3r07qlSpgho1amDSpEmS+0DZ8ePHxXtH+XXu3Dlxu8OHD6NVq1YwNjaGhYUF/Pz8VJLkjRs3wtXVFVWqVIG1tTUGDRqE58+fi+vXrl2rcgx9ff1SnV+pEsqVK1fCxcUFJiYmMDExgYeHBw4ePCiuz8zMREhICKpXrw4jIyP4+fnhyZMnpQqI6F3HekJEREQA0KVLF8TFxeHmzZuYMGECQkND8e2334rrly5dit69e8PIyEiDUZZednY2AMDKygpyuVzD0bwd5ubm8PHxwcqVK0v1udzcXHTv3h3Z2dk4ffo01q1bh7Vr12LmzJlFfqZ169aIi4uTvIYMGYI6deqgWbNmAIC7d+/i448/RseOHRETE4PDhw8jISEBn376qbifU6dOYeDAgRg8eDCuXr2Kbdu24a+//sLQoUMlxzMxMZEc699//y3VOZYqoaxZsybmz5+P6Oho/P333+jYsSM+/vhjXL16FQAwbtw47N27F9u2bcOJEyfw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YkVZH4boncZ6QkRERETvgzdOKI8fPy55r6+vj+XLl2P58uVvumt6R1XEaUY03R24MtcTxa6hit0pFbuCAkB6erq4bGNj88bHVTzWixcvJOsU79GMjIxCl1/n+fPn4rJil9oGDRpItlM8dk5OjmSdYpdXxetU2BQjZam4YxW1Tnk7xeurvM7c3FwyIjERERG9v9Sah5KIiIiIiIiICSURERERERGppcyfoaSK4W12O1XuTqrp7qVUsSiOIqo4uqjyfZKcnCwul/Uop8ojmZqbm4vLdnZ24nJ8fLxkO8UuqcVR3E75WLdu3RKX69WrJ1lnZmYmLqempha6XB4Uu6sqH0ux+2qVKlXEZeXzet1Iscoj6xIREdH7iS2UREREREREpBYmlERERERERKQWJpRERERERESkFj5DWcYq4pQZ5a2ynDOfDVVPUdetuOtZ1tda8ZlBZcbGxuKy8lQmxX2uKMqxm5qaisvKzxUqPr/4NqcNSUlJKfJYBgYG4rLiubzNnxcRERG9O9hCSURERERERGphQklERERERERqYZfXMsauX0RS2trahZYrTw2iuF1Rn1GXYrdWQNqV9eXLl+JyXl6eZDt1unMrT8OheCzlc7ayshKX3dzcSn2s8vb06VNxubififK6zMxM5OTklFtcREREVHGwhZKIiIiIiIjUwoSSiIiIiIiI1MIur0RUrhRHDVWkONIoIB0Btay7S2ppSb87U9x/1apVC10uK1WqVCn0uABw//79Mj/e25KcnCwuK5+XqampyjUnIiKi9xP/4hMREREREZFamFASERERERGRWphQEhERERERkVr4DCURlSs9Pb1Cy83NzYt9T0REREQVH1soiYiIiIiISC1MKImIiIiIiEgtTCiJiIiIiIhILUwoiYiIiIiISC1MKImIiIiIiEgtTCiJiIiIiIhILUwoiYiIiIiISC1MKImIiIiIiEgtOpoOQJkgCJoOgahENH2vFhw/JydHo3EQFabgvqwo9SQrK0ujcRAVpuC+1HQ9ISJ6ExUuoUxJSdF0CEQlkpKSAlNTU40eHwC2b9+usRiIXqei1JMVK1ZoLAai19F0PSEiehMyoYJ9LZaXl4fHjx9DEATUrl0bDx48gImJiabD0qjk5GTUqlWL1+L/0/T1EAQBKSkpsLGxgZaW5nqN5+XlITY2Fg0bNuS98f9p+t6oSDR9LSpSPXn8+DGMjY0hk8k0FgdRYSpKPSEiehMVroVSS0sLNWvWRHJyMgDAxMSk0v9jWIDXQkqT16MifJOspaUFW1tbALw3lPF6/If1JP9vClFFVRHqCRHRm+DXYURERERERKQWJpRERERERESklgqbUMrlcsyaNQtyuVzToWgcr4UUr8d/eC2keD3+w2tBREREb0OFG5SHiIiIiIiI3g0VtoWSiIiIiIiIKjYmlERERERERKQWJpRERERERESklgqbUC5fvhz29vbQ19dHy5Yt8ddff2k6pHIXFhaG5s2bw9jYGDVq1ICvry9iY2Ml22RmZiIkJATVq1eHkZER/Pz88OTJEw1F/PbMnz8fMpkMY8eOFcsq67VQxHrCeqKI9YSIiIjetgqZUG7duhXjx4/HrFmzcP78ebi6usLHxwdPnz7VdGjl6sSJEwgJCcGZM2cQERGBnJwcdO7cGWlpaeI248aNw969e7Ft2zacOHECjx8/xqeffqrBqMvfuXPnsGrVKri4uEjKK+O1UMR6wnqiiPWEiIiINEKogFq0aCGEhISI73NzcwUbGxshLCxMg1G9fU+fPhUACCdOnBAEQRASExMFXV1dYdu2beI2169fFwAIUVFRmgqzXKWkpAiOjo5CRESE4OXlJXzxxReCIFTOa6GM9SQf6wnrCREREWlOhWuhzM7ORnR0NLy9vcUyLS0teHt7IyoqSoORvX1JSUkAADMzMwBAdHQ0cnJyJNfGyckJtWvXfm+vTUhICLp37y45Z6ByXgtFrCf/YT1hPSEiIiLN0dF0AMoSEhKQm5sLS0tLSbmlpSVu3Lihoajevry8PIwdOxaenp5o3LgxACA+Ph56enqoWrWqZFtLS0vEx8drIMrytWXLFpw/fx7nzp1TWVfZroUy1pN8rCesJ0RERKRZFS6hpHwhISG4cuUKTp48qelQNOLBgwf44osvEBERAX19fU2HQxUU6wnrCREREWlWhevyam5uDm1tbZVRCJ88eQIrKysNRfV2jR49Gvv27cOxY8dQs2ZNsdzKygrZ2dlITEyUbP8+Xpvo6Gg8ffoU7u7u0NHRgY6ODk6cOIEffvgBOjo6sLS0rDTXojCsJ6wnAOsJERERaV6FSyj19PTQtGlTREZGimV5eXmIjIyEh4eHBiMrf4IgYPTo0di1axeOHj2KOnXqSNY3bdoUurq6kmsTGxuL+/fvv3fX5sMPP8Tly5cRExMjvpo1a4b+/fuLy5XlWhSG9YT1BGA9ISIiIs2rkF1ex48fj8DAQDRr1gwtWrTA4sWLkZaWhuDgYE2HVq5CQkKwadMm/PbbbzA2NhafcTI1NYWBgQFMTU0xePBgjB8/HmZmZjAxMcGYMWPg4eGBVq1aaTj6smVsbCw+E1fA0NAQ1atXF8sry7UoCusJ6wnrCREREWlahUwo/f398ezZM8ycORPx8fFo0qQJDh06pDIAyftm5cqVAID27dtLysPDwxEUFAQAWLRoEbS0tODn54esrCz4+PhgxYoVbznSiqGyXwvWk/aSctaTwvFaEBERUXmSCYIgaDoIIiIiIiIievdUuGcoiYiIiIiI6N3AhJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjUwoSSiIiIiIiI1MKEkoiIiIiIiNTChJKIiIiIiIjU8v8A8zGO6WUQgBYAAAAASUVORK5CYII=\n","text/plain":"
"},"metadata":{},"output_type":"display_data"}]}},"ed53a993099641bb86c8d7a10fc17bdb":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"IntSliderModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"IntSliderModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"IntSliderView","continuous_update":true,"description":"horizontal","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_5f1c8af64c254ffdb40ba8499cac6ca8","max":999,"min":500,"orientation":"horizontal","readout":true,"readout_format":"d","step":1,"style":"IPY_MODEL_1140e90db2fc4b9c91cbbe362767d65d","value":500}},"f7e38cbf0fa84263916f1c8dbcf4c53c":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}}}}},"nbformat":4,"nbformat_minor":0} diff --git a/notebooks/testnb.ipynb b/notebooks/testnb.ipynb new file mode 100644 index 0000000..28864d9 --- /dev/null +++ b/notebooks/testnb.ipynb @@ -0,0 +1,124 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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fTp69+6Nvn37YuXKlaioqDDM4iYiIiKi+slcXdA6yAutg7zqvFf73PKMogpk1ATL2rCZUaREXpkKZVXVOJ9divPZ9fcYBnjKEOl/U8D00wfMKH8PRPi6Q2bmcXOTg+TkyZORn5+PV199FTk5OYiNjcWOHTvqTMAhIiIiosa7+bnlvVr413m/Uq1FZrG+9/JazXC5/vtKXCtWorSqGoUVahRWqJGYeaOe8wOh3m6GcGkUOP09EOrtZvKSRk3q/3z66acbHMomIiIiIvNzl0nQLkRR71N/AKCkUlMTMm8OmpWG4Fmp0RoeMXksre7xri4Cwn31s8yD5bpG1eQcixwREREROTgfdyl8InzQJcKnznuiKKKwQl0nXF6r6eHMulEJjVY03LupU1lg1jYRERER2R9BEBDoJUeglxw9ov3qvK/Vicgrq0JmzUzzS9fysGjl7c/LIElERETk5CQuAsJ83BHm446+rfxR2tYbi25/GGxgyUsiIiIiskcMkkRERETUJAySRERERNQkDJJERERE1CQMkkRERETUJAySRERERNQkDJJERERE1CQMkkRERETUJAySRERERNQkDJJERERE1CQMkkRERETUJAySRERERNQkDJJERERE1CQMkkRERETUJAySRERERNQkDJJERERE1CQMkkRERETUJAySRERERNQkDJJERERE1CQMkkRERETUJAySRERERNQkDJJERERE1CQMkkRERETUJAySRERERNQkDJJERERE1CSuzX1BURQBAKWlpc19abPTaDRQKpUoLS2FVCq1djn0F2wf28W2sV1sG9vG9rFdjtY2tTmtNrc1pNmDZFlZGQAgKiqquS9NRERERCYoKyuDj49Pg+8L4u2ippnpdDpcv34dCoUCgiA056XNrrS0FFFRUcjMzIS3t7e1y6G/YPvYLraN7WLb2Da2j+1ytLYRRRFlZWUIDw+Hi0vDd0I2e4+ki4sLIiMjm/uyFuXt7e0Q/9E4KraP7WLb2C62jW1j+9guR2qbW/VE1uJkGyIiIiJqEgZJIiIiImoSBsk7IJfLsXjxYsjlcmuXQvVg+9guto3tYtvYNraP7XLWtmn2yTZERERE5BjYI0lERERETcIgSURERERNwiBJRERERE3CIElERERETcIgeRuffPIJWrZsCTc3N/Tr1w/Hjh275f7fffcdOnToADc3N3Tt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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Plotting\n", + "plt.figure(figsize=(8, 6))\n", + "plt.plot(np.linspace(0.001, 1.1, 500), -np.log(x), label=' -log(P(y|x))')\n", + "plt.ylim(-0.5, 6),plt.xlim(-0.1, 1.1),plt.xlabel('P(y|x)')\n", + "plt.legend(),plt.grid(True)\n", + "\n", + "plt.plot(0.9, -np.log(0.9), 'ro', label='-log(P(y=horizontal,x))')\n", + "plt.plot(0.1, -np.log(0.1), 'bo', label='-log(P(y=vertical,x))')\n", + "plt.legend(),plt.show();" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# NB 03\n", + "\n", + "## Do not worry about this cell, just move the sliders.\n", + "import scipy.signal\n", + "from skimage.measure import block_reduce # For max pooling\n", + "import ipywidgets as widgets\n", + "\n", + "# Kernel from model\n", + "plt.figure(figsize=(10, 3))\n", + "plt.subplot(1, 2, 1)\n", + "plt.imshow(np.random.rand(25).reshape(5, 5),\"gray\") ,plt.title('Randomly initalized weights')\n", + "plt.subplot(1, 2, 2)\n", + "conv_filter=np.squeeze(model.get_weights()[0], axis=2)\n", + "plt.imshow(conv_filter[:,:,0],\"gray\"),plt.title('Learned Kernel (weights) , by model'),plt.show();\n", + "print(\"\\n---------Move the sliders to inspect different vertical and horizontal images from the valset and their predictions:------------------\\n\")\n", + "\n", + "def scale_convolution_map(conv_map, min_val=-3, max_val=3):\n", + " clipped_conv_map = np.clip(conv_map, min_val, max_val)\n", + " scaled_conv_map = (clipped_conv_map - min_val) / (max_val - min_val)\n", + " return scaled_conv_map\n", + "\n", + "def plot_conv(img):\n", + " convolved_image = scipy.signal.convolve2d(img.squeeze(), conv_filter.squeeze(), mode='same')\n", + " scaled_conv_image = scale_convolution_map(convolved_image + model.get_weights()[1])\n", + " max_pooled_image = block_reduce(convolved_image + model.get_weights()[1], block_size=(50, 50), func=np.max)\n", + " scaled_max_pooled_image = scale_convolution_map(max_pooled_image)\n", + " \n", + " plt.figure(figsize=(20, 5)) # Adjust the figure size as needed\n", + " plt.subplot(1, 6, 1)\n", + " plt.imshow(img, \"gray\", vmin=0, vmax=1),plt.title('Original Image')\n", + " plt.subplot(1, 6, 2)\n", + " plt.imshow(scaled_conv_image, \"gray\", vmin=0, vmax=1),plt.title('Convolved Image')\n", + " plt.subplot(1, 6, 3),plt.imshow(scaled_max_pooled_image, \"gray\", vmin=0, vmax=1)\n", + " plt.title(f'Max Pooled = {max_pooled_image[0][0]:.2f}'),plt.xticks([]), plt.yticks([])\n", + " plt.subplot(1, 6, 4),plt.axis('off')\n", + " pred = model.predict(img.reshape(1, 50, 50, 1), verbose=0)\n", + " text_info = f'''\n", + " P(y=vertical|x): {pred[0][0]:.4f}\n", + " P(y=horizontal|x): {pred[0][1]:.4f}\n", + " \n", + " \n", + " -log(P(y=vertical|x)): {-np.log(pred[0][0]):.4f}\n", + " -log(P(y=horizontal|x)): {-np.log(pred[0][1]):.4f}\n", + " '''\n", + " plt.text(0, 0.5, text_info, ha='left', va='center')\n", + " plt.subplot(1, 6, 5)\n", + " x_values = np.linspace(0.001, 1.1, 500)\n", + " plt.plot(x_values, -np.log(x_values), label='-log(P(y|x))')\n", + " plt.ylim(-0.5, 6),plt.xlim(-0.1, 1.1),plt.xlabel('P(y|x)')\n", + " plt.plot(pred[0][0], -np.log(pred[0][0]), 'bo', label='-log(P(y=vertical|x))')\n", + " plt.plot(pred[0][1], -np.log(pred[0][1]), 'ro', label='-log(P(y=horizontal|x))')\n", + " plt.legend(),plt.grid(True), plt.tight_layout(),plt.show();\n", + "\n", + "def inspect_preds(horizontal,vertical):\n", + " plot_conv(X_val[horizontal,:,:,0])\n", + " plot_conv(X_val[vertical,:,:,0])\n", + "\n", + "horizontal_slider = widgets.IntSlider(min=0, max=num_images_val//2-1, step=1, value=0, description='vertical ')\n", + "vertical_slider = widgets.IntSlider(min=num_images_val//2, max=num_images_val-1, step=1, value=0, description='horizontal')\n", + "widgets.interact(inspect_preds, horizontal=horizontal_slider, vertical=vertical_slider);" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "dlcourse", + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}