diff --git a/Conversion IRMAS/conversion_mel_IRMAS b/Conversion IRMAS/conversion_mel_IRMAS
deleted file mode 100644
index 923b44851886b7721d010c051ddda3c2ba3cb3c3..0000000000000000000000000000000000000000
--- a/Conversion IRMAS/conversion_mel_IRMAS	
+++ /dev/null
@@ -1 +0,0 @@
-{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"conversion_mel_IRMAS","provenance":[],"collapsed_sections":[],"toc_visible":true,"mount_file_id":"1obbS6-vX1z--9i1mMt84W34a1OqQO8Dw","authorship_tag":"ABX9TyPpHeWmgS16jAN/ZFzmeKZ4"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","metadata":{"id":"zQQC4ApGdNxA","executionInfo":{"status":"ok","timestamp":1618244287875,"user_tz":-120,"elapsed":828,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}}},"source":["import scipy\n","import os\n","from scipy.io import wavfile\n","from scipy import signal\n","import matplotlib.pyplot as plt\n","import numpy as np\n","import os\n","import librosa\n","import librosa.display\n","\n","\n","import librosa\n","import numpy\n","\n","\n","\n","# settings\n","hop_length = 512 # number of samples per time-step in spectrogram\n","n_mels = 256 # number of bins in spectrogram. Height of image\n","time_steps = 256 # number of time-steps. Width of image\n"],"execution_count":31,"outputs":[]},{"cell_type":"code","metadata":{"id":"2Y62suo5gFCc","executionInfo":{"status":"ok","timestamp":1618244288081,"user_tz":-120,"elapsed":431,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}}},"source":["data_path = './drive/MyDrive/Automatant-Musique/Data_IRMAS/IRMAS-TrainingData'\n","data_converted_path = './drive/MyDrive/Automatant-Musique/Data_converted_train_IRMAS'\n","lst_instru = ['org','cel','cla','sax','flu','gac','gel','pia','tru','vio','voi']\n","\n","train_img = []\n","train_label = []\n","\n","\n","LIMIT = False\n","num_limit = 10 # max is 100"],"execution_count":32,"outputs":[]},{"cell_type":"code","metadata":{"id":"jz5Z5PUCvhdA","executionInfo":{"status":"ok","timestamp":1618244288903,"user_tz":-120,"elapsed":541,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}}},"source":["def index(intru):\n","\n","  for i in range(len(lst_instru)):\n","    if instru == lst_instru[i]:\n","      return i\n","\n","def scale_minmax(X, min=0.0, max=1.0):\n","    X_std = (X - X.min()) / (X.max() - X.min())\n","    X_scaled = X_std * (max - min) + min\n","    return X_scaled\n","\n","def spectrogram_image(y, sr, out, hop_length, n_mels):\n","    # use log-melspectrogram\n","    mels = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=n_mels,\n","                                            n_fft=hop_length*2, hop_length=hop_length)\n","    mels = numpy.log(mels + 1e-9) # add small number to avoid log(0)\n","\n","    # min-max scale to fit inside 8-bit range\n","    img = scale_minmax(mels, 0, 255).astype(numpy.uint8)\n","    img =np.expand_dims(img, axis=2)\n","\n","    train_img.append(img)\n","    train_label.append(index(instru))\n","    \n","\n","def save_img(data_path, instru, wavfile):\n","\n","  x_path = './drive/MyDrive/Automatant-Musique/Data_IRMAS/IRMAS-TrainingData' + '/' + instru + '/' + wavfile\n","  x_save_path = './drive/MyDrive/Automatant-Musique/Data_converted_train_IRMAS' + '/' + instru + '/' + wavfile[:-3] + \"png\"\n","\n","  y, sr = librosa.load(x_path, offset=1.0, duration=2.0)\n","\n","  # extract a fixed length window\n","  start_sample = 0 # starting at beginning\n","  length_samples = time_steps*hop_length\n","  window = y\n","\n","  \n","  # convert to PNG\n","  spectrogram_image(window, sr=sr, out=x_save_path, hop_length=hop_length, n_mels=n_mels)\n"],"execution_count":33,"outputs":[]},{"cell_type":"code","metadata":{"id":"soaiQoJbtbSQ","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1618245214678,"user_tz":-120,"elapsed":924867,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}},"outputId":"5ca52630-1cc3-41fa-b70d-c654737612d5"},"source":["\n","for instru in os.listdir(data_path):\n","  print(instru)\n","  for wavfile in os.listdir(data_path + '/' + instru):\n","    if wavfile[-3:] != 'wav':\n","      continue\n","    \n","    save_img(data_converted_path, instru, wavfile)\n","\n"],"execution_count":34,"outputs":[{"output_type":"stream","text":["cla\n","org\n","vio\n","pia\n","sax\n","cel\n","gac\n","flu\n","gel\n","tru\n","voi\n",".ipynb_checkpoints\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"VAIlPGE9ZbDZ","executionInfo":{"status":"ok","timestamp":1618245726173,"user_tz":-120,"elapsed":2121,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}},"outputId":"86517ad6-d98b-4402-8402-469e064a95ea"},"source":["train_img = np.array(train_img)\n","print(np.shape(train_img))\n","np.save('./drive/MyDrive/Automatant-Musique/Data_converted_train_IRMAS/train_images.npy', train_img)\n","np.save('./drive/MyDrive/Automatant-Musique/Data_converted_train_IRMAS/train_labels.npy', train_label)"],"execution_count":35,"outputs":[{"output_type":"stream","text":["(6705, 256, 87, 1)\n"],"name":"stdout"}]}]}
diff --git a/Conversion IRMAS/model_cnn_Irmas.ipynb b/Conversion IRMAS/model_cnn_Irmas.ipynb
deleted file mode 100644
index fd35d41663d10332d1177057c2501a4cbb65e851..0000000000000000000000000000000000000000
--- a/Conversion IRMAS/model_cnn_Irmas.ipynb	
+++ /dev/null
@@ -1 +0,0 @@
-{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"model_cnn_Irmas.ipynb","provenance":[],"collapsed_sections":[],"mount_file_id":"1DuF3hx36f4ONUIrGeA_5ShcKKYX3LWOS","authorship_tag":"ABX9TyO00U++WkD9tE+x2wevBaC2"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"code","metadata":{"id":"BJUjd3ETZmi2","executionInfo":{"status":"ok","timestamp":1618251722624,"user_tz":-120,"elapsed":2422,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}}},"source":["import tensorflow as tf\n","import numpy as np\n","\n","from tensorflow import keras\n","\n","from tensorflow.keras import layers, models, losses\n","from tensorflow.keras.models import Model\n","import keras_preprocessing \n","\n","import matplotlib.pyplot as plt\n","import matplotlib\n","\n","from PIL import Image\n","import os\n","from sklearn.utils import shuffle\n"],"execution_count":1,"outputs":[]},{"cell_type":"code","metadata":{"id":"lLE1RB_BiAvW","executionInfo":{"status":"ok","timestamp":1618251795796,"user_tz":-120,"elapsed":496,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}}},"source":["shape_image = (256,87,1)\n","data_converted_path = './drive/MyDrive/Automatant-Musique/Data_converted_train_IRMAS'\n","lst_instru = ['org','cel','cla','sax','flu','gac','gel','pia','tru','vio','voi']\n","nb_instru = len(lst_instru)"],"execution_count":2,"outputs":[]},{"cell_type":"code","metadata":{"id":"Zm4V2uwH99Wg","executionInfo":{"status":"ok","timestamp":1618251797370,"user_tz":-120,"elapsed":945,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}}},"source":["def index(num):\n","\n","  if num == 0:\n","    return [1,0,0,0,0,0,0,0,0,0,0]\n","\n","  elif num == 1:\n","    return [0,1,0,0,0,0,0,0,0,0,0]\n","\n","  elif num == 2:\n","    return [0,0,1,0,0,0,0,0,0,0,0]\n","\n","  elif num == 3:\n","    return [0,0,0,1,0,0,0,0,0,0,0]\n","\n","  elif num == 4:\n","    return [0,0,0,0,1,0,0,0,0,0,0]\n","  \n","  elif num == 5:\n","    return [0,0,0,0,0,1,0,0,0,0,0]\n","  \n","  elif num == 6:\n","    return [0,0,0,0,0,0,1,0,0,0,0]\n","  \n","  elif num == 7:\n","    return [0,0,0,0,0,0,0,1,0,0,0]\n","\n","  elif num == 8:\n","    return [0,0,0,0,0,0,0,0,1,0,0]\n","\n","  elif num == 9:\n","    return [0,0,0,0,0,0,0,0,0,1,0]\n","  \n","  elif num == 10:\n","    return [0,0,0,0,0,0,0,0,0,0,1]\n","  \n","  return None\n","\n","def vect(label):\n","  vect_label = []\n","\n","  for num in label:\n","    vect_label.append(index(num))\n","\n","  return np.array(vect_label)"],"execution_count":3,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Rdg3S08xiJwX","executionInfo":{"status":"ok","timestamp":1618251802789,"user_tz":-120,"elapsed":5121,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}},"outputId":"265ba3dc-7010-47dd-e6fa-ade2ac11d57e"},"source":["train_label, train_images = shuffle(np.load('./drive/MyDrive/Automatant-Musique/Data_converted_train_IRMAS/train_labels.npy'), np.load('./drive/MyDrive/Automatant-Musique/Data_converted_train_IRMAS/train_images.npy'))\n","\n","print(np.shape(train_images))\n","\n","train_label = vect(train_label)\n","\n","test_labels, test_images = train_label[6000:6705], train_images[6000:6705]\n","train_labels, train_images = train_label[:6000], train_images[:6000]\n","\n","print(np.shape(train_images))\n"],"execution_count":4,"outputs":[{"output_type":"stream","text":["(6705, 256, 87, 1)\n","(6000, 256, 87, 1)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"VHomcRxLik6y","executionInfo":{"status":"ok","timestamp":1618251980176,"user_tz":-120,"elapsed":432,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}},"outputId":"3898aa62-3936-4911-9d1d-bab625f3e814"},"source":["model_cnn = keras.models.Sequential()\n","model_cnn.add(keras.layers.Conv2D(32, 3, activation = 'relu', padding = 'same', input_shape = shape_image))\n","model_cnn.add(keras.layers.BatchNormalization())\n","model_cnn.add(keras.layers.MaxPooling2D())\n","model_cnn.add(keras.layers.Conv2D(64, 3, activation = 'relu', padding = 'same'))\n","model_cnn.add(keras.layers.BatchNormalization())\n","model_cnn.add(keras.layers.MaxPooling2D())\n","model_cnn.add(keras.layers.Conv2D(128, 3, activation = 'relu', padding = 'same'))\n","model_cnn.add(keras.layers.BatchNormalization())\n","model_cnn.add(keras.layers.MaxPooling2D())\n","model_cnn.add(keras.layers.Conv2D(256, 3, activation = 'relu', padding = 'same'))\n","model_cnn.add(keras.layers.BatchNormalization())\n","model_cnn.add(keras.layers.MaxPooling2D())\n","\n","\n","model_cnn.add(keras.layers.Flatten(input_shape = shape_image))\n","model_cnn.add(keras.layers.Dense(64, activation='relu'))\n","model_cnn.add(keras.layers.Dense(nb_instru, activation ='softmax'))\n","\n","model_cnn.summary()"],"execution_count":7,"outputs":[{"output_type":"stream","text":["Model: \"sequential_1\"\n","_________________________________________________________________\n","Layer (type)                 Output Shape              Param #   \n","=================================================================\n","conv2d_3 (Conv2D)            (None, 256, 87, 32)       320       \n","_________________________________________________________________\n","batch_normalization_3 (Batch (None, 256, 87, 32)       128       \n","_________________________________________________________________\n","max_pooling2d_3 (MaxPooling2 (None, 128, 43, 32)       0         \n","_________________________________________________________________\n","conv2d_4 (Conv2D)            (None, 128, 43, 64)       18496     \n","_________________________________________________________________\n","batch_normalization_4 (Batch (None, 128, 43, 64)       256       \n","_________________________________________________________________\n","max_pooling2d_4 (MaxPooling2 (None, 64, 21, 64)        0         \n","_________________________________________________________________\n","conv2d_5 (Conv2D)            (None, 64, 21, 128)       73856     \n","_________________________________________________________________\n","batch_normalization_5 (Batch (None, 64, 21, 128)       512       \n","_________________________________________________________________\n","max_pooling2d_5 (MaxPooling2 (None, 32, 10, 128)       0         \n","_________________________________________________________________\n","flatten_1 (Flatten)          (None, 40960)             0         \n","_________________________________________________________________\n","dense_2 (Dense)              (None, 64)                2621504   \n","_________________________________________________________________\n","dense_3 (Dense)              (None, 11)                715       \n","=================================================================\n","Total params: 2,715,787\n","Trainable params: 2,715,339\n","Non-trainable params: 448\n","_________________________________________________________________\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"tivVn9X8j_zo","executionInfo":{"status":"ok","timestamp":1618252283386,"user_tz":-120,"elapsed":118884,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}},"outputId":"7ee5b8cf-c558-4f14-f130-bc0c06519e69"},"source":["model_cnn.compile(optimizer = 'Adam', loss = tf.keras.losses.CategoricalCrossentropy(), metrics = ['accuracy'])\n","#SparseCategoricalCrossentropy ne fonctionne pas, pb logits et label dim\n","\n","train_images = np.array(train_images)\n","test_images = np.array(test_images)\n","test_labels = np.array(test_labels)\n","train_labels = np.array(train_labels)\n","\n","history = model_cnn.fit(train_images, train_labels, epochs = 20, validation_data = (test_images, test_labels))\n"],"execution_count":11,"outputs":[{"output_type":"stream","text":["Epoch 1/20\n","188/188 [==============================] - 7s 32ms/step - loss: 0.8608 - accuracy: 0.6921 - val_loss: 4.1454 - val_accuracy: 0.2809\n","Epoch 2/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.7915 - accuracy: 0.7282 - val_loss: 2.5450 - val_accuracy: 0.4411\n","Epoch 3/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.7402 - accuracy: 0.7463 - val_loss: 3.7460 - val_accuracy: 0.3660\n","Epoch 4/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.7273 - accuracy: 0.7601 - val_loss: 2.7690 - val_accuracy: 0.4525\n","Epoch 5/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.7068 - accuracy: 0.7618 - val_loss: 3.5838 - val_accuracy: 0.3773\n","Epoch 6/20\n","188/188 [==============================] - 6s 32ms/step - loss: 0.6409 - accuracy: 0.7822 - val_loss: 3.8081 - val_accuracy: 0.3872\n","Epoch 7/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.6467 - accuracy: 0.7876 - val_loss: 4.2032 - val_accuracy: 0.3872\n","Epoch 8/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.5913 - accuracy: 0.8029 - val_loss: 4.0078 - val_accuracy: 0.3702\n","Epoch 9/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.5861 - accuracy: 0.8070 - val_loss: 3.0717 - val_accuracy: 0.4270\n","Epoch 10/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.6195 - accuracy: 0.7882 - val_loss: 3.1771 - val_accuracy: 0.4184\n","Epoch 11/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.5372 - accuracy: 0.8250 - val_loss: 3.4834 - val_accuracy: 0.4099\n","Epoch 12/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.4904 - accuracy: 0.8423 - val_loss: 2.9262 - val_accuracy: 0.4184\n","Epoch 13/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.4642 - accuracy: 0.8550 - val_loss: 17.2489 - val_accuracy: 0.3319\n","Epoch 14/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.4383 - accuracy: 0.8613 - val_loss: 3.7113 - val_accuracy: 0.4142\n","Epoch 15/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.4332 - accuracy: 0.8632 - val_loss: 4.9130 - val_accuracy: 0.4057\n","Epoch 16/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.3346 - accuracy: 0.8886 - val_loss: 4.0616 - val_accuracy: 0.4525\n","Epoch 17/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.3199 - accuracy: 0.9003 - val_loss: 3.9002 - val_accuracy: 0.4482\n","Epoch 18/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.3085 - accuracy: 0.9057 - val_loss: 3.8370 - val_accuracy: 0.4468\n","Epoch 19/20\n","188/188 [==============================] - 6s 30ms/step - loss: 0.3479 - accuracy: 0.8922 - val_loss: 6.5073 - val_accuracy: 0.2865\n","Epoch 20/20\n","188/188 [==============================] - 6s 31ms/step - loss: 0.4420 - accuracy: 0.8569 - val_loss: 4.2696 - val_accuracy: 0.4525\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"zTyFS3RMkVvl","colab":{"base_uri":"https://localhost:8080/","height":283},"executionInfo":{"status":"ok","timestamp":1618252358683,"user_tz":-120,"elapsed":1087,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}},"outputId":"3d3932e8-dedf-4c94-fcc0-65007a097e17"},"source":["plt.plot(history.history['accuracy'], label='accuracy')\n","plt.plot(history.history['val_accuracy'], label='val_accuracy')\n","plt.xlabel('Epoch')\n","plt.ylabel('Accuracy')\n","plt.ylim([0, 1])\n","plt.legend(loc='lower right')\n","plt.show()"],"execution_count":12,"outputs":[{"output_type":"display_data","data":{"image/png":"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xx13XEt/+rS0NADefvttnnvuuZb3paamHnTfc+bMITIyEoDy8nIuv/xyNmzYgIhQX1/fst9rr72WqKiofY536aWX8tRTTzFv3jyWLFnCk08+2UW/cdexRGCM6fHee+893n77bZYsWUJCQgIzZ85k0qRJfPnllwHvw7/bZet++H369Gl5/p//+Z985zvf4eWXX2bLli3MnDnzgPudN28eZ555JnFxccyZM6clUXQn1lhsjOnxysvLSU1NJSEhgS+//JKlS5dSU1PDBx98wObNmwFaqoZOOukkHnjggZb3NlcNpaen88UXX9DU1HTAOvzy8nIyM93UKo8//njL+pNOOom//vWvLQ3KzccbPHgwgwcP5q677mLevHld90t3IUsExpgeb/bs2TQ0NDB69Ghuu+02ZsyYwYABA5g/fz7nnXceEydOZO7cuQD84he/oKysjHHjxjFx4kQWL14MwN13380ZZ5zBMcccw6BBg9o91q233srPfvYzJk+evE8voquuuoohQ4YwYcIEJk6cyDPPPNPy2iWXXEJ2djajR4/26BPoHFHVUMdwSHJycjQ3NzfUYRhjfL744otuW8B1F9dffz2TJ0/myiuvDMrx2vqbiMhyVc1pa/vuV1lljDG9yNSpU+nTpw9//OMfQx1KuywRGGOMh5YvXx7qEA7K2giMMSbMWSIwxpgwZ4nAGGPCnCUCY4wJc5YIjDEmzFkiMMaElcTExFCH0O1Y91FjTNd5/TbYsbpr95kxHk69u2v32Q00NDR0m3GH7IrAGNOj3XbbbfuMHXTnnXdy1113MWvWLKZMmcL48eP517/+FdC+qqqq2n3fk08+2TJ8xKWXXgpAYWEh5557LhMnTmTixIl8/PHHbNmyhXHjxrW87w9/+AN33nknADNnzuSmm24iJyeHe++9l1dffZXp06czefJkTjzxRAoLC1vimDdvHuPHj2fChAm89NJLPProo9x0000t+3344Ye5+eabO/y57UNVe9Rj6tSpaozpPtatWxfS43/22Wd63HHHtSyPHj1at27dquXl5aqqWlxcrIcffrg2NTWpqmqfPn3a3Vd9fX2b71uzZo2OGDFCi4uLVVW1pKREVVUvuOAC/dOf/qSqqg0NDbpr1y7dvHmzjh07tmWfv//97/WOO+5QVdXjjz9ef/jDH7a8Vlpa2hLXww8/rLfccouqqt56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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"B88dsvWw0Gk6","colab":{"base_uri":"https://localhost:8080/","height":801},"executionInfo":{"status":"ok","timestamp":1618252745967,"user_tz":-120,"elapsed":4099,"user":{"displayName":"guillaume ALLEGRE","photoUrl":"","userId":"15788823947103069938"}},"outputId":"29b12b17-f99f-45e1-d0c6-bbe8fde17f31"},"source":["from sklearn.metrics import confusion_matrix\n","\n","y_pred_vector = model_cnn(test_images)\n","y_pred = []\n","\n","for vect in y_pred_vector:\n","  i = 0\n","  M = vect[0]\n","  for j in range(1,10):\n","    if M < vect[j]:\n","      M = vect[j]\n","      i = j\n","  y_pred.append(i)\n","\n","\n","\n","y_pred = np.argmax(y_pred_vector, axis=1)\n","y_test = np.argmax(test_labels, axis=1)\n","cm = confusion_matrix(y_test, y_pred, normalize = 'true')\n","\n","\n","def show_confusion_matrix(matrix, labels):\n","    fig, ax = plt.subplots(figsize=(nb_instru,nb_instru))\n","    im = ax.imshow(matrix)\n","    \n","    N = len(labels)\n","\n","    # We want to show all ticks...\n","    ax.set_xticks(np.arange(N))\n","    ax.set_yticks(np.arange(N))\n","    # ... and label them with the respective list entries\n","    ax.set_xticklabels(labels)\n","    ax.set_yticklabels(labels)\n","\n","    # Rotate the tick labels and set their alignment.\n","    plt.setp(ax.get_xticklabels(), rotation=45, ha=\"right\",\n","             rotation_mode=\"anchor\")\n","\n","    # Loop over data dimensions and create text annotations.\n","    for i in range(N):\n","        for j in range(N):\n","            text = ax.text(j, i, round(cm[i, j],3),\n","                           ha=\"center\", va=\"center\", color=\"w\")\n","\n","    ax.set_title(\"Matrice de confusion\")\n","    fig.tight_layout()\n","    plt.show()\n","    \n","show_confusion_matrix(cm, lst_instru)"],"execution_count":18,"outputs":[{"output_type":"display_data","data":{"image/png":"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ExzoMgIuaa1eAwATXCXQJVQIdt/+QJdQMVSvGugKKo7cvEBXUDGEap8AICs30BVUCKZqSKBLqBj2H/z37JzLBnsCXUKFkJW7J9laG3m4ZQEP/5ExwTz0SZtAlxFwL7Y6nlt9/3O5G+t1ACj8Y0ugS6gQbKeOgS6hwnD9dKJ3yPxnKejWPtAlVAju738OdAkVgquF8gOA2bUn0CVUGN4WDf+6kQN8s2Lq9iMt07QfERERERGHUPgXEREREXEIhX8REREREYdQ+BcRERERcQiFfxERERERh1D4FxERERFxCIV/ERERERGHUPgXEREREXEIhX8REREREYdQ+BcRERERcQiFfxERERERh1D4FxERERFxCIV/ERERERGHUPgXEREREXEIhX8REREREYdQ+BcRERERcQiFfxERERERh1D4FxERERFxCIV/ERERERGHUPgXEREREXEIhX8REREREYdQ+BcRERERcQiFfxERERERh1D4FxERERFxCIV/ERERERGHUPgXEREREXEIhX8REREREYcICnQBZSGqWk86R9yKwc2WzE/ZkP663/LGNc6hY8RN7C1IBGBTxmy2Zn4KQJ96zxAW0oHkvFUs3XNz8Tpd695DneB2gCE7fzv/S5hKod1bXl0qVV0Hd2L8U9fgcrv4+pXveP/hT/2We6oEMeWNG2nZpRmZKVlMG/EkCduTAlTt39elTyvG3XUuLpdh7gcrmP3SQr/lHo+bWx8ZTsv2MWSm5zJj8rsk7E4DoGnraCbddyHVQkPwer1Mungm+fsLited+txIohuEccM5T5Znl0qV0/aHbj2aMf6mwbhchq+/WMWst5f5Le/QsRHjJw2kWfMoHpz6MUsWri9eNnDIyVwx8jQA3nnjB76ZuwaAGY9fRlh4KG63i19X7+CZJ+bi9dry69QJ6DrwZMY9dhUut4u5ry/k/cfm+C33VAnitlduoGXnpmSlZjHtypkk7EimRlgo97w7idZdmjH/7cU8O/nN4nWmfTaFsOhauIPcrF26gZk3v17hX4du3ZoxccIAXC4XX321ivdmxfotP7lDQyZMGECzZnV54MFPWbx4Q/Gyh2YMp127+vy6dhd33fVB8fNTppxNx5MbkZOzD4CHH/mCzZsTy6dDZcBpY0TX3i244fazcbsMX3/8E7NfXeK33ONxc9u0i2jZrj6ZGblMv202CXHp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4DU7SnV73fq35/oHLsbldjH/veXMemouV00Zxh+rtxM771c8wUFMmTmK5h0akJWey4zrXyF+ewr9L+7OpTcOKt4f3nnia5aXuNUnwMm9WnLR+AFlcqvPeYnP/WSt7Xq4ZccV/gGMMSOB24BC4BdgGwfC/zhgCpAE/AjUqEjhvyIri/BfGZVJ+K+EyiL8V0ZlEf4rq/IM/yKVRVmE/8qoLMJ/ZVXa4b+yOlr4P+4/8mWtfQN44wjLngPK9y8ViIiIiIjIMXHMff5FRERERJxO4V9ERERExCEU/kVEREREHELhX0RERETEIRT+RUREREQcQuFfRERERMQhFP5FRERERBxC4V9ERERExCEU/kVEREREHELhX0RERETEIRT+RUREREQcQuFfRERERMQhFP5FRERERBxC4V9ERERExCEU/kVEREREHELhX0RERETEIRT+RUREREQcQuFfRERERMQhFP5FRERERBxC4V9ERERExCEU/kVEREREHELhX0RERETEIRT+RUREREQcQuFfRERERMQhFP5FRERERBxC4V9ERERExCGCAl0AxmCCgwNdRcB5t+wIdAkVQs9bbwh0CRVC+p05gS6hQmh8ZWKgS6gwgho3DHQJFUJu2+hAl1AhVI3dGOgSpCKxgS6g4jDVQgJdQoWnI/8iIiIiIg6h8C8iIiIi4hAK/yIiIiIiDqHwLyIiIiLiEAr/IiIiIiIOofAvIiIiIuIQCv8iIiIiIg6h8C8iIiIi4hAK/yIiIiIiDqHwLyIiIiLiEAr/IiIiIiIOofAvIiIiIuIQCv8iIiIiIg6h8C8iIiIi4hAK/yIiIiIiDqHwLyIiIiLiEAr/IiIiIiIOofAvIiIiIuIQCv8iIiIiIg6h8P//7N13dBTVw8bx78wmBBISICQkBJCiNOlV6R3sBbChKAIWQOygoliQYn3lp9hFQcECdqRI74QigvROgPRNL4SUnfePxcCKAkKq83zO8Rx358713sm9s8/emR1FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJryKuwGFoXWvpgx7YyCmw2TBtOV888Ycj+3eZbwYNfVB6raoTVpiGhPumkLsESf+geUZ++XD1G9Vh4UzVvLuY5/n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2FXk5uZhuSxmTF7A+iU7CQqtwBfrXuDI/lhysnMBmPP5an79Zv05WvLvZDYMLdD6/uqK1nUY+UB3TNNg3sJtzPgmnMF3dWT3vhjWrt9Pg7qhvDz2ZvzL+5CdnUdiUgaDhn1K6xY1GT60G5YFhgE/zPmdOQsKb1GgXHghzI2eTXhg4m2YDpOFM9fw9f/NZeAzN7Lv98OEL9iKt48Xoz8YyqVNLiEtKYNJQz8kJsLJHU9cy22PXkPkwVNPQBnT7y1SnGlUqR7IqA+GUr6CL8nONP7voc+IL8AvRUaFgv8NQWmcG1mXFvxa6xVt6zBieE9M02D+gj+Y+eU67r2nE3v2RrN23X7q1w/l5Rf7Ur58WbJz8khKTOfeoVMB9yM9L6lRmXLlvElNPc7rb85n46ZDALz15gC+/HodGzceKvA2A5Q9EFeg9ZXG8QCw4PBbv1mWdeZjDDn/8N8HeB1wATnAMOAm4A4gBtgLRABTgLVAD8uyjhqG8TDQyrKse/6p7sII/1J6FUb4L40KI/yXRoUR/kurgg7/pVVhh//SojDCf2lUGOG/NCqM8F9aFXT4L63OFv7P6zn/lmX9Cvz6l7c3Ac/9TfF6p+339vk2UkRERERECtd/7jn/IiIiIiLy9xT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmvIq7AZZ/OU60b1LczSh2uX6O4m5CiXC8sr6PAlxyy7bibkKJcGJRzeJuQolRpldEcTehRPDNzinuJpQIuckpxd2EEsGrXLnibkKJUGbj3uJuQomRm5ZW3E0o8ZS0RERERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERs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f242478cjsM0WPhNOEf2xjDwyWvYu/UI6xdt59ev1zHq7buZuvp50pIzeWX4Z2ets1JIAE9OvgvTNDFMg1VzfmfD4h1n3aek0niw53hw5bl498kZTPz+cUyHycIZq4nYHcXdY25i7++HCZ+/hQVfrGT0R/fx2e+TSEvKYOLgDwG44b4ehNWpwp2jb+DO0TcA8MzNb5LiTGPIuFvo1v8KfHzLMGPnGyz4fBUzXvnpbE0pkUr7vDAu9AdqhmEcBloD1wGtLct6yDCMEOAnoBywABhhWdZZf23rX6G61bL9yAtqw39Jrp+juJtQIqRV03EACHlnbXE3oUTIXlSzuJtQYpTpVbJ/IFhUvKqGnruQDeRGxxR3E0oEjQc3V3rJ+/1kcXGllYxba4rbYuvb3yzLav132y545d+yrFon/3XayX+wLCsWuPK0Yk9daP0iIiIiIlKwCvqefxERERERKaEU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V//W/ReAAAgAElEQVRERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJryKuwHm8Rx8t0cVdzOKXXbtKsXdhBLB/4+U4m5CiZBX3A0oIcpeH1vcTSgxnjm4pbibUCJMuuH24m5CieBlau0OIDdS+QHAbNyguJtQYnglpRZ3E0qGY/+8SWcPERERERGbUPgXEREREbEJhX8REREREZtQ+BcRERERsQmFfxERERERm1D4FxERERGxCYV/ERERERGbUPgXEREREbEJhX8REREREZtQ+BcRERERsQmFfxERERERm1D4FxERERGxCYV/ERERERGbUPgXEREREbEJhX8REREREZtQ+BcRERERsQmFfxERERERm1D4FxERERGxCYV/ERERERGbUPgXEREREbEJhX8REREREZtQ+BcRERERsQmFfxERERERm1D4FxERERGxCYV/ERERERGbUPgXEREREbEJhX8RERER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vp3xRKzcxdLPNzHppZt57/tJ5GTlM/1Bd/9ys4/y5ftrmfHFeCwLNq3Zw8bV7gP/2IlX0G9oR/wq+/DR2sdZ9vkm5r7+vTe7+odcuHj34Gc82WY8JiY/HPmJuKOJ3Fz/Kg7kxnp8ETjdFbX7EVYphJvqXcFN9a4A4Jldr5NV4B4rewV3YequmWec/3xgt7FSGcLtQs0Qxv96U8MZGxtGQ2ApsBnoAuwCRgGLgQmWZW02DOMDoBcQB2QB31qW9cGZlhlgBlk9/C4/t+ovIJnDOv15IxsIXFghXhrldUXZ58/bEMqSo3Vzb5dQcaRk/HkbO6h+9g8dXoj83/d+gKgIcnqn/nkjG8ga0cPbJVQYyhFuy7Le23LyGdzfOZcz/4WWZY087Xf9fvvBsqzbz2GZIiIiIiJSxkrlPf8iIiIiIlLxndWZf8uyDgHn7/+1QkRERETExnTmX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJpzeLsDw88VsWM/bZXhd9Y8jvF1ChZBxSw9vl1Ah1Nid7e0SKgRr7yFvl1BhGPXqeLuEiiEtw9sVVAg5vdO8XUKFcMuew94uoUL4fGC8t0uoMFyFhd4uocLTmX8REREREZtQ+BcRERERsQmFfxERERERm1D4FxERERGxCYV/ERERERGbUPgXEREREbEJhX8REREREZtQ+BcRERERsQmFfxERERERm1D4FxERERGxCYV/ERERERGbUPgXEREREbEJhX8REREREZtQ+BcRERERsQmFfxERERERm1D4FxERERGxCYV/ERERERGbUPgXEREREbEJhX8REREREZtQ+BcRERERsQmFfxERERERm1D4FxERERGxCYV/ERERERGbUPgXEREREbEJhX8REREREZtQ+BcRERERsQmFfxERERERm1D4FxERERGxCae3CygLXS5pzj2PX4VpmixdsIn5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tyuoMDROup0Y3NXbJVQIlTdb3i6hQvh8QLi3S6gQdj0b6u0SKoxW03y9XULFsPfMk3TmX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGxC4V9ERERExCYU/kVEREREbELhX0RERETEJhT+RURERERsQuFfRERERMQmFP5FRERERGzC6e0CylPXwR2597U7MB0mS2b/wLwXvvaY7uPrZNKc8TTr0pjstBym3vwqyTEpXqr27+vZriEPj+iHaZp8s+YX5iza5DG9U4twHrq1H03rhTB51iJWbt4HQJeW9Xjo1r7F7RrUDmTym4tYs/UA//7HYDq1rEte/nEAnn53GXtjK/Y66t6lEePv7o9pmixaGsknn//sMb1927qMv6s/jRvV4pnnv2XN+igAmjauxUP3DcLf3w+Xy8VHn21g1do9ALz+0q1UruwLQM0a/uyOSuSJZ78q346dpS69m3PP5KsxTYOln29i/n9Xe0z38XEw4cXhNGsTTnZmPtMf/ITkhAwAGrUI4/6nr8e/aiVcLhf3D5tJwYlCnnt3DIEh1XA4HOzcEs0bT3+Ny2V5oXd/XZfL2nDP1JswHSZL565n/oxlHtN9fJ1MeOMOmnWoT3Z6HtP/+V+S49Jo3qkhD7wyEgADmPvSd/y0eDvBdWoy8Y07qBFSDSxY/NE6vnlnpRd6VnrsNFZqfCihfcOtS9+W3P3U9ZgOg6WfRfD5rB88pvv4Onj41ZE0a1eX7Ix8po+bw5H49OLpIXVq8PYPj/Hxq0v54p1VAFw7ti9DbumBZcGhPYm8MuETCo4Xlmu/zlbfOo34d/cBOAyTz/ZF8ubOCI/pI5p35LaWnSmyLPILTvDYhqXsy0qjQ3BtpvccAoCBwWuR61kWuxc/08H8y0fgazpxmgaLD0XxauR6b3TtrFyIx86/Hf4Nw6gDzLAsa1gp1FNmTNNk/MyxPDLoWVLj05m5cTobvt1M7O744jZDxl5GbmYutzcf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\n","text/plain":["<Figure size 792x792 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"oZg5e6qYXJjC"},"source":[""],"execution_count":null,"outputs":[]}]}
diff --git a/GAN.ipynb b/GAN.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..22e24a602692346b11da1ddad01aef0552c42e88
--- /dev/null
+++ b/GAN.ipynb
@@ -0,0 +1,790 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 0,
+  "metadata": {
+    "colab": {
+      "name": "Untitled8.ipynb",
+      "provenance": [],
+      "collapsed_sections": []
+    },
+    "kernelspec": {
+      "name": "python3",
+      "display_name": "Python 3"
+    },
+    "language_info": {
+      "name": "python"
+    },
+    "accelerator": "GPU"
+  },
+  "cells": [
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "xyRpZ_yV8T_d"
+      },
+      "source": [
+        "import numpy as np\n",
+        "import cv2\n",
+        "import os\n",
+        "import tensorflow as tf\n",
+        "from tensorflow import keras\n",
+        "import matplotlib.pyplot as plt\n"
+      ],
+      "execution_count": 1,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "hhzSwMSr3oRR",
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 337
+        },
+        "outputId": "196ec797-cc84-4db3-dc91-267573e3ebed"
+      },
+      "source": [
+        "import zipfile\n",
+        "with zipfile.ZipFile('/content/drive/MyDrive/images.zip', 'r') as zip_ref:\n",
+        "    zip_ref.extractall('/content/drive/MyDrive/images')"
+      ],
+      "execution_count": 2,
+      "outputs": [
+        {
+          "output_type": "error",
+          "ename": "KeyboardInterrupt",
+          "evalue": "ignored",
+          "traceback": [
+            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+            "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
+            "\u001b[0;32m<ipython-input-2-e0f11cb67143>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mzipfile\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mzipfile\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mZipFile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'/content/drive/MyDrive/images.zip'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'r'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mzip_ref\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m     \u001b[0mzip_ref\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextractall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'/content/drive/MyDrive/images'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+            "\u001b[0;32m/usr/lib/python3.7/zipfile.py\u001b[0m in \u001b[0;36mextractall\u001b[0;34m(self, path, members, pwd)\u001b[0m\n\u001b[1;32m   1634\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1635\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mzipinfo\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mmembers\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1636\u001b[0;31m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_extract_member\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzipinfo\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpwd\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1637\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1638\u001b[0m     \u001b[0;34m@\u001b[0m\u001b[0mclassmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;32m/usr/lib/python3.7/zipfile.py\u001b[0m in \u001b[0;36m_extract_member\u001b[0;34m(self, member, targetpath, pwd)\u001b[0m\n\u001b[1;32m   1688\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1689\u001b[0m         \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmember\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpwd\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpwd\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msource\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1690\u001b[0;31m              \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtargetpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"wb\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1691\u001b[0m             \u001b[0mshutil\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopyfileobj\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msource\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1692\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
+          ]
+        }
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "gHIQBacF78oP"
+      },
+      "source": [
+        "def make_dataset(image_path, output_path):\n",
+        "    dataset = []\n",
+        "    n = 0\n",
+        "    for image_path in os.scandir(image_path):\n",
+        "        try :\n",
+        "            n += 1\n",
+        "            print(n)\n",
+        "            img = cv2.imread(os.path.abspath(image_path))\n",
+        "            img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n",
+        "            if len(np.unique(img)) > 1:\n",
+        "                img = np.reshape(np.array(img).astype('float32')/255.0,(106,106,1))\n",
+        "                dataset.append(img)\n",
+        "        except :\n",
+        "            pass\n",
+        "    np.save(output_path, dataset)\n"
+      ],
+      "execution_count": 2,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "gkPtwpJZ8HoV",
+        "colab": {
+          "base_uri": "https://localhost:8080/"
+        },
+        "outputId": "cc378011-bc24-428f-aeea-54eb25879d43"
+      },
+      "source": [
+        "make_dataset('/content/drive/MyDrive/images/images','/content/drive/MyDrive/data.npy')"
+      ],
+      "execution_count": null,
+      "outputs": [
+        {
+          "output_type": "stream",
+          "text": [
+            "1\n",
+            "2\n",
+            "3\n",
+            "4\n",
+            "5\n",
+            "6\n",
+            "7\n",
+            "8\n",
+            "9\n",
+            "10\n",
+            "11\n",
+            "12\n",
+            "13\n",
+            "14\n",
+            "15\n",
+            "16\n",
+            "17\n",
+            "18\n",
+            "19\n",
+            "20\n",
+            "21\n",
+            "22\n",
+            "23\n",
+            "24\n",
+            "25\n",
+            "26\n",
+            "27\n",
+            "28\n",
+            "29\n",
+            "30\n",
+            "31\n",
+            "32\n",
+            "33\n",
+            "34\n",
+            "35\n",
+            "36\n",
+            "37\n",
+            "38\n",
+            "39\n",
+            "40\n",
+            "41\n",
+            "42\n",
+            "43\n",
+            "44\n",
+            "45\n",
+            "46\n",
+            "47\n",
+            "48\n",
+            "49\n",
+            "50\n",
+            "51\n",
+            "52\n",
+            "53\n",
+            "54\n",
+            "55\n",
+            "56\n",
+            "57\n",
+            "58\n",
+            "59\n",
+            "60\n",
+            "61\n",
+            "62\n",
+            "63\n",
+            "64\n",
+            "65\n",
+            "66\n",
+            "67\n",
+            "68\n",
+            "69\n",
+            "70\n",
+            "71\n",
+            "72\n",
+            "73\n",
+            "74\n",
+            "75\n",
+            "76\n",
+            "77\n",
+            "78\n",
+            "79\n",
+            "80\n",
+            "81\n",
+            "82\n",
+            "83\n",
+            "84\n",
+            "85\n",
+            "86\n",
+            "87\n",
+            "88\n",
+            "89\n",
+            "90\n",
+            "91\n",
+            "92\n",
+            "93\n",
+            "94\n",
+            "95\n",
+            "96\n",
+            "97\n",
+            "98\n",
+            "99\n",
+            "100\n",
+            "101\n",
+            "102\n",
+            "103\n",
+            "104\n",
+            "105\n",
+            "106\n",
+            "107\n",
+            "108\n",
+            "109\n",
+            "110\n",
+            "111\n",
+            "112\n",
+            "113\n",
+            "114\n",
+            "115\n",
+            "116\n",
+            "117\n",
+            "118\n",
+            "119\n",
+            "120\n",
+            "121\n",
+            "122\n",
+            "123\n",
+            "124\n",
+            "125\n",
+            "126\n",
+            "127\n",
+            "128\n",
+            "129\n",
+            "130\n",
+            "131\n",
+            "132\n",
+            "133\n",
+            "134\n",
+            "135\n",
+            "136\n",
+            "137\n",
+            "138\n",
+            "139\n",
+            "140\n",
+            "141\n",
+            "142\n",
+            "143\n",
+            "144\n",
+            "145\n",
+            "146\n",
+            "147\n",
+            "148\n",
+            "149\n",
+            "150\n",
+            "151\n",
+            "152\n",
+            "153\n",
+            "154\n",
+            "155\n",
+            "156\n",
+            "157\n",
+            "158\n",
+            "159\n",
+            "160\n",
+            "161\n",
+            "162\n",
+            "163\n",
+            "164\n",
+            "165\n",
+            "166\n",
+            "167\n",
+            "168\n",
+            "169\n",
+            "170\n",
+            "171\n",
+            "172\n",
+            "173\n",
+            "174\n",
+            "175\n",
+            "176\n",
+            "177\n",
+            "178\n",
+            "179\n",
+            "180\n",
+            "181\n",
+            "182\n",
+            "183\n",
+            "184\n",
+            "185\n",
+            "186\n",
+            "187\n",
+            "188\n",
+            "189\n",
+            "190\n",
+            "191\n",
+            "192\n",
+            "193\n",
+            "194\n",
+            "195\n",
+            "196\n",
+            "197\n",
+            "198\n",
+            "199\n",
+            "200\n",
+            "201\n",
+            "202\n",
+            "203\n",
+            "204\n",
+            "205\n"
+          ],
+          "name": "stdout"
+        }
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "06j66SR685GV"
+      },
+      "source": [
+        "X_train = np.load('/content/drive/MyDrive/data.npy')"
+      ],
+      "execution_count": 3,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/"
+        },
+        "id": "XGsyrHJyE44u",
+        "outputId": "d3195982-4cd3-4bd4-ae9b-cea51c930363"
+      },
+      "source": [
+        "print(np.shape(X_train[0]))\n",
+        "X_trainbis = []\n",
+        "for elt in X_train:\n",
+        "  X_trainbis.append(np.reshape(np.array(elt),(106,106,1)))\n",
+        "\n",
+        "print(np.shape(X_trainbis[0]))\n",
+        "X_train = X_trainbis\n",
+        "print(np.shape(X_train))"
+      ],
+      "execution_count": 4,
+      "outputs": [
+        {
+          "output_type": "stream",
+          "text": [
+            "(106, 106)\n",
+            "(106, 106, 1)\n",
+            "(14361, 106, 106, 1)\n"
+          ],
+          "name": "stdout"
+        }
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "RSUhhDGG3OSg"
+      },
+      "source": [
+        ""
+      ],
+      "execution_count": null,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "9TOVphw1C1rc"
+      },
+      "source": [
+        "batch_size = 16\n",
+        "noise_size = 256"
+      ],
+      "execution_count": 5,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "ORUv481Z9Ozk"
+      },
+      "source": [
+        "dataset=tf.data.Dataset.from_tensor_slices(X_train).shuffle(len(X_train))\n"
+      ],
+      "execution_count": 6,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "M9h5wcYV9nHs"
+      },
+      "source": [
+        "dataset=dataset.batch(batch_size,drop_remainder=True).prefetch(1)"
+      ],
+      "execution_count": 7,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "KbtRsv-G6kfB"
+      },
+      "source": [
+        "generator=keras.models.Sequential([\n",
+        "                                   keras.layers.Dense(15*15*128, use_bias=False, input_shape=(noise_size,)),\n",
+        "                                   keras.layers.Reshape((15,15,128)),\n",
+        "                                   keras.layers.BatchNormalization(),\n",
+        "                                   keras.layers.Conv2DTranspose(128,kernel_size=5,strides=(2,2),padding='same', activation='relu'),\n",
+        "                                   keras.layers.BatchNormalization(),\n",
+        "                                   keras.layers.Conv2DTranspose(64,kernel_size=5,strides=(2,2),padding='same', activation='relu'),\n",
+        "                                   keras.layers.BatchNormalization(),\n",
+        "                                   keras.layers.Conv2DTranspose(1,kernel_size=3,strides=(2,2),padding='same', activation='sigmoid'),\n",
+        "                                   keras.layers.BatchNormalization(),\n",
+        "                                   keras.layers.Cropping2D(7)\n",
+        "\n",
+        "])"
+      ],
+      "execution_count": 66,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "D8IJfMZ5999M"
+      },
+      "source": [
+        "generator.summary()"
+      ],
+      "execution_count": null,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "TACoJbBrBmug"
+      },
+      "source": [
+        "discriminator = keras.models.Sequential([\n",
+        "                                         keras.layers.Conv2D(64,5,(2,2), padding='same', input_shape=(106,106,1)),\n",
+        "                                         keras.layers.LeakyReLU(alpha=0.2),\n",
+        "                                         keras.layers.Dropout(0.2),\n",
+        "                                         keras.layers.Conv2D(128,5,(2,2),padding='same'),\n",
+        "                                         keras.layers.LeakyReLU(alpha=0.2),\n",
+        "                                         keras.layers.Conv2D(256,5,(2,2),padding='same'),\n",
+        "                                         keras.layers.LeakyReLU(alpha=0.2),\n",
+        "                                         keras.layers.Dropout(0.2),\n",
+        "                                         keras.layers.Flatten(),\n",
+        "                                         keras.layers.Dropout(0.5),\n",
+        "                                         keras.layers.Dense(1, activation='sigmoid')\n",
+        "])"
+      ],
+      "execution_count": 67,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "jM8R3ZZLCg0N"
+      },
+      "source": [
+        "discriminator.summary()"
+      ],
+      "execution_count": null,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "C4Y_8gTSDEk-"
+      },
+      "source": [
+        "gan=keras.models.Sequential([generator,discriminator])"
+      ],
+      "execution_count": 68,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "YIy1L5RSDF-9"
+      },
+      "source": [
+        "opt=keras.optimizers.Adam()\n",
+        "\n",
+        "def wasserstein_loss(y_true, y_pred):\n",
+        "\treturn keras.backend.mean(y_true * y_pred)\n",
+        "\n",
+        "discriminator.compile(loss='binary_crossentropy',optimizer=opt, metrics=['accuracy'])\n",
+        "discriminator.trainable=False\n",
+        "gan.compile(loss=\"binary_crossentropy\", optimizer=opt)"
+      ],
+      "execution_count": 69,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "yoF51nFFDR_F"
+      },
+      "source": [
+        "from google.colab.patches import cv2_imshow\n",
+        "def show():\n",
+        "  noisy=tf.random.normal(shape=[1,noise_size])\n",
+        "  img=generator(noisy)[0]\n",
+        "  cv2_imshow(np.abs(img)*255)\n",
+        "  cv2.waitKey(0)\n"
+      ],
+      "execution_count": 70,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "IkGeYQzpCn4G"
+      },
+      "source": [
+        "def train_gan(gan,dataset,batch_size,noise_size,n_epochs=50):\n",
+        "  generator, discriminator = gan.layers\n",
+        "\n",
+        "  for epoch in range(1,n_epochs+1):\n",
+        "    n=0\n",
+        "\n",
+        "    for X_batch in dataset:\n",
+        "    \n",
+        "      # training the discriminator (added label smoothing):\n",
+        "      noise=tf.random.normal(shape=[batch_size,noise_size])\n",
+        "      generated_images=generator(noise)\n",
+        "      X_fake_and_real=tf.concat([generated_images, X_batch], axis=0)\n",
+        "      y1=tf.constant([[0.2]]*batch_size+[[0.8]]*batch_size)\n",
+        "      if np.random.rand() < 0.1:\n",
+        "        y1=tf.constant([[1.]]*batch_size+[[0.]]*batch_size)\n",
+        "\n",
+        "      discriminator.trainable=True\n",
+        "      d_loss = discriminator.train_on_batch(X_fake_and_real, y1)\n",
+        "      \n",
+        "      # training the generator:\n",
+        "      noise=tf.random.normal(shape=[batch_size,noise_size])\n",
+        "      y2=tf.constant([[1.]]*batch_size)\n",
+        "      discriminator.trainable=False\n",
+        "      g_loss = gan.train_on_batch(noise, y2)\n",
+        "\n",
+        "      n+=1\n",
+        "      #print('done with batch ', n,'/', len(dataset))\n",
+        "      if n%100 == 0:\n",
+        "        show()\n",
+        "      \n",
+        "        print('d_loss = ',d_loss,'g_loss = ', g_loss)\n",
+        "        \n",
+        "     \n",
+        "    print(\"done with epoch:\",epoch)  \n",
+        "    \n",
+        "      "
+      ],
+      "execution_count": 71,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "0pB46dv7DI81",
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 811
+        },
+        "outputId": "5da869f4-3ca2-47e8-a5d4-4c34dbf281cf"
+      },
+      "source": [
+        "train_gan(gan,dataset,batch_size,noise_size,n_epochs=200)"
+      ],
+      "execution_count": 72,
+      "outputs": [
+        {
+          "output_type": "display_data",
+          "data": {
+            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGoAAABqCAIAAADbQ1PAAAACBElEQVR4nO3aTWrqUABA4SQ2/kx0IIILkAiiTlyA4CZclFsRB8EliDMdOJG4AsEVCMG8wYMilRbpsfb19XwjuSbmerjXIBrGcRzos6LvnsDPZj7EfIj5EPMh5kPMh5gPMR9iPsR8iPkQ8yHmQ8yHmA8xH2I+xHyI+RDzIeZDzIeYDzEf8ivyRVEUBMFkMpnP54995dA/aRC/YvV9HfMh5kPMh5gPMR9iPsR8iPkQ8yHmQ8yHmA8xH2I+xHyI+RDzIS/k5Eqlcj6fl8tlkiQfHzkejxuNRpqmQRCs1+t+v1+v14Mg6Ha7RVGEYVgUxd8jO51Os9ncbDZ5npO5PYe/dSCf3LxZlm2328dO5Sdy9SF3rb7Djden0jSdzWZRFGVZtlgsrs+K43g6nT54vv8YVx9y7533+ub4xuFwyPO81+vdjr8ZSZJkv9+XSqXb8dfHtVptNBqtVqs7J/a97lp9URRdLpdWq3U6na6jXL/t98b/b2G5XH5vWXHtdvt4PN6OD4fD3W73RRd9Jj/7EL+0IU/KNxgMqtXqc671TG5exM2LmA8xH2I+xHyI+RDzIeZDzIeYDzEfYj7EfIj5EPMh5kPMh5gPMR9iPsR8iPkQ8yHmQ8yHmA8xH2I+xHyI+RDzIeZDzIeYDzEfYj7EfIj5EPMh5kPMh5gPMR9iPsR8iPkQ8yF/ANQZYXWkNsaYAAAAAElFTkSuQmCC\n",
+            "text/plain": [
+              "<PIL.Image.Image image mode=RGB size=106x106 at 0x7FCA84A1C690>"
+            ]
+          },
+          "metadata": {
+            "tags": []
+          }
+        },
+        {
+          "output_type": "stream",
+          "text": [
+            "d_loss =  [1.187556505203247, 0.21875] g_loss =  1.4066319465637207\n"
+          ],
+          "name": "stdout"
+        },
+        {
+          "output_type": "display_data",
+          "data": {
+            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGoAAABqCAIAAADbQ1PAAAAB40lEQVR4nO3ZP4ryQBiA8THxX6ESEGyElOIlvJRn8w4ewdJGkIAvnsD4FcJi8RW7++zsutnn1wlhDA8zg+P0BoNB0mcVP/0Cv5v5EPMh5kPMh5gPMR9iPsR8SMZ8vV4v3+AvImO++/2eb/AX4eJFzIeYDzEfYj7EfIj5EPMh5kPMh7wr33q9TiktFouU0vF4rKoqIkajUUScTqeIOJ/PEbHZbKbT6duTD8PhMKXU7/dTF0/BPS8qCRcv8gX5LpdLSmm32+33+4jYbrcRUVUVH/n1/WfxFkXRtm3TNMvlsmmauq4Ph0Nd1xHx9kzbttfrdbVaRcR8Pn/nlz1G/rJ3fwHufYh7H2I+xHyI+RDzIeZDzIeYDzEf8h35xuPx88fJZJJSevy19dt5aEOyz77ZbFaWZVF0c5dw9iHdnBTfxnyI+RDzIeZDzPdhzz/CzPdhz7dd5kPMh3Q8X+7DYsfz5b6V73i+h7IsM438J/LdbrdMI/+JfPmYDzEfYj7EfIj5EPMh5kPMh5gPMR9iPsR8iPkQ8yHmQ8yHmA8xH2I+xHyI+RDzIeZDzIeYDzEfYj7EfIj5EPMh5kPMh5gPMR9iPsR8iPkQ8yHmQ8yHmA8xH2I+xHyI+RDzIeZDzIeYDzEfYj7kH6rpTGjVrJIkAAAAAElFTkSuQmCC\n",
+            "text/plain": [
+              "<PIL.Image.Image image mode=RGB size=106x106 at 0x7FCA849CDBD0>"
+            ]
+          },
+          "metadata": {
+            "tags": []
+          }
+        },
+        {
+          "output_type": "stream",
+          "text": [
+            "d_loss =  [0.6572858095169067, 0.0] g_loss =  0.9195984601974487\n",
+            "done with epoch: 83\n"
+          ],
+          "name": "stdout"
+        },
+        {
+          "output_type": "display_data",
+          "data": {
+            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGoAAABqCAIAAADbQ1PAAAAFXUlEQVR4nO2bvUvzThzA71pNY0t9LAjiUCdHFRQ3ZwVBFLdOLg4iRRwE/wZHxUnB1cnRrfgCrkURhw4dBUUUX1pbmov1fsPZ/GLzYppv2ibt9zM8xMsld88n33tNSimlBHFLqN0VCDaoDwTqA4H6QKA+EKgPBOoDgfpAoD4QqA8E6gOB+kCgPhCoDwTqAxEkfZzzbDabyWTaXZH/obhdCiEA0cc5F/+KA18RsOjjnPuqwibRNzk5yRhrfVWc4Ct3JHDR1y445zc3N1NTU3Xpvtanb6p+a7YCX+vzP6GLiwvGmA8HtSaxsbHx9vbGdJyfnyeTSXd3+xV9nHNFUWKxWLVa9ai2beP09HRubo4QwjmPRCJNKqUVjde02xKJnHNJkoaHhyuVytPTU/MqI5qX5/f3WB9jTJIkMe+RJElLVxQlEokY0/2J82HK41WHUCNJUp0j0XyM6c0mHo9zzh8eHrSebnd3V5Zl+6uEOxGwPT09dllPTk7obzY3NwkhqqqKP9Ua+mNTtDuYZk6n07TJhMNhcfD4+Li2ttbs4iillLRpKv/6+rq0tHR1ddX6oj2EOncnei7jQGZc4fm/d/OKBvQhRqiiKLIsGyOot7eXUsoYi0QiiqKIxO4JK4eEnp+f4/G4VIPUxkcRlZIkiamZ6aApxjJCyMfHh30xrlc1mUxmaGjI3bUtABsvCM/mfSsrK1owBp18Pq/NE+1zYvSBcBR9pVIpFPrJ6dXejJNnK3peY35mwHm5siwfHh5q96lUKoyxwcFBq/xW/19tEY3R55S65yQGWNTnHtv1MCHj4+O5XO7r68t1AV4NJt/f36FQSGzn+Gf62e3RF41Gy+Wy68v/iD49pmtb++Da39/f2trSX266G+gcSqmiKFblinvqT/1ZQ9M71KHdwXi226OvDvtHK8tyoVDQ/iyVSj/63O2atHL32FddngYlhKiqahW0PqyxOxp6Tew8MzZeEN5/YWXaVVutDerSXc9y2rXc9l30McaSyeT9/b19NtMR3MqgtkNeqVTS6fTR0ZGxUNPtOK0sq2pQxpgsy9qGqD63V31fJ/WhdZhHXzgcNn5o4GSFb3O27RIVRaG1N5DuvjvQv8UmXb7m9eRxUlVVHWY1zun16RqVSkX/Hvrt7S0Wi8EqSWyWuoyx1dVVrTuzWdU0OktljM3Pz5+dndnk6d7o84QG1ryN0t4PGsvlcjQatY9EK6wiNJFIiI/btDzdGH2ePNf+/v5CoRCAHyYYYYwVi0XXl2vubPboSS1CxXaWMVrF3kHD+qz2/t/f37W9KSfX/rlO4JxbvdOQJCkej+vvU5eH1b4nMa2zNmt5eXmxqYBontFo9PX11ao5d2Dj5ZxbbYJ4TiAbrz2UUjF9mZ6etsmmj27x6SZjLJfLNVyYb1FVdXl5WRx/fn7a5Ly9vaW/vyjUnyWEaPdxWG4qlbI6u7Cw8LNRSqmv9Vmxs7OjHTuPgIGBAX3+iYkJTbRI1KsnhBi//ySEZLPZ+nLdtZFAIOYozdsV73B9zaYDhw5vub6+tvkupav1iZY3Ojp6eXn5798/LV3va2xsTFVVRVEYY8fHx3VnsfGC6Njoa82v9DpWX2taVQD07e3tLS4uHhwcJBKJ2dlZQkgmk7m7uysWi4yx9fX1fD4/MzMzMjLS+t+FdmDfxxirVqt9fX0tKKsD9bWSADReP4P6QKA+EEHS53BgTaVS29vbza6MAIcOEEGKPh+C+kCgPhCoDwTqA4H6QKA+EKgPBOoDgfpAoD4QqA8E6gOB+kCgPhCoDwTqA4H6QKA+EKgPBOoDgfpAoD4QqA8E6gOB+kCgPhCoD8R/ubwfWSUse3EAAAAASUVORK5CYII=\n",
+            "text/plain": [
+              "<PIL.Image.Image image mode=RGB size=106x106 at 0x7FCA849CE490>"
+            ]
+          },
+          "metadata": {
+            "tags": []
+          }
+        },
+        {
+          "output_type": "stream",
+          "text": [
+            "d_loss =  [0.7750989198684692, 0.0] g_loss =  0.8812277317047119\n"
+          ],
+          "name": "stdout"
+        },
+        {
+          "output_type": "display_data",
+          "data": {
+            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGoAAABqCAIAAADbQ1PAAAADlElEQVR4nO2bPU7zQBCG17FNohT8NRTQ5gIIxAkooAqiQhQUdFyEM8ABoKSBCokj5AKIkpYOQjG7+YpBlomTYPuN4/WX96mMtdodPezM/mCCMAwNKUur7gCaDfVBUB8E9UFQHwSkbzQazSuOhgLpC4JgXnE0FCYvBPVBUB8E9UFQHwT1QVAfRDP0OefqDmEyXus7OjrSh1bL0zgDXpciePpbbQrUB1GDvouLC2OM/MY5lzzv7e3pXY7+OBwOt7a2/LzdYe2D+DX72u32yspKXaE0Ec4+iFy1zzlnrd3Z2THGbGxsxHGs+1itTd1ut9oYPYazD4IbFwjqg6A+COqDoD4I6oOgPgjqg6A+iAr13dzciEgVPae7rWiInEzVF0VR8geaondteha+vLyMoujPxjqKc259fV1Ezs/PtYcZg2q3g8Egea4LnnkhPKp96Vuct7e3GVmpbfARO50OeInN2QdRZ+GYCyKSlL/slKy6MlaYvDNS7PT0dFr7LMaY7e3tbGN9SAuKUlxfXy9gVZlP8nY6ne/v7z+b3d/fn52dlRtCfWWNTHtflNFoFMdx0ZLa+NonIicnJw8PD2a6xD+ltNtta22J0eesTwMNwzAIAq1KInJ1dXV7e5tuo+8L9axqDg8Pn5+f4zgeDofp9zPiqTSFGzP7kiR9fX3t9Xp5Wi4gqsJLh7U2OY2M1fjNzc1yQXS73cfHx36/b35/izZx8en1eiLy/v4+rTddOspFUhRPZ59zLvkobWxropXB5D7tJu1NBbnsqb6m4NGhLY2I3N3dJWVB81rf9/v9eR3acLyYfdbaMAy1en58fJhJhb/Vann4iW4BfYtc0ZpCgeRd5IqWzk3d0L68vGTbjLG/v5+zz3lRPnk1mq+vr9XV1TztNUPLjeUt5ZcOnYw53RljQHd6MTcYDLIXCjXixdIxX/REOPuKIU8n2Zdjx80wDP9DfYvE031fU6A+iKXbxKVrH74PW4rZd3BwkJxY0hf6T09PYM9cOiCWYvZVB/VBUB8E9f2gHxxlEZEZF2XU98Pu7u7E91EU6Z8Njo+Ps6fspV55ReTz83Ntba10D0utD4fJC0F9EA3WZ62t/T/0WfsgGjz7fID6IKgPgvogqA+C+iCoD4L6IKgPgvogqA+C+iCoD4L6IKgPgvogqA+C+iCoD4L6IKgPgvogqA+C+iCoD4L6IKgPgvogqA+C+iCoD4L6IKgP4h8xCL0yhEZreQAAAABJRU5ErkJggg==\n",
+            "text/plain": [
+              "<PIL.Image.Image image mode=RGB size=106x106 at 0x7FCA84A69D90>"
+            ]
+          },
+          "metadata": {
+            "tags": []
+          }
+        },
+        {
+          "output_type": "stream",
+          "text": [
+            "d_loss =  [0.9645572900772095, 0.375] g_loss =  1.0408233404159546\n"
+          ],
+          "name": "stdout"
+        },
+        {
+          "output_type": "error",
+          "ename": "KeyboardInterrupt",
+          "evalue": "ignored",
+          "traceback": [
+            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+            "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
+            "\u001b[0;32m<ipython-input-72-66e732ef45b3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtrain_gan\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgan\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mbatch_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mnoise_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mn_epochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m200\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+            "\u001b[0;32m<ipython-input-71-90f8208560ca>\u001b[0m in \u001b[0;36mtrain_gan\u001b[0;34m(gan, dataset, batch_size, noise_size, n_epochs)\u001b[0m\n\u001b[1;32m     16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     17\u001b[0m       \u001b[0mdiscriminator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrainable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m       \u001b[0md_loss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdiscriminator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_on_batch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_fake_and_real\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     19\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     20\u001b[0m       \u001b[0;31m# training the generator:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36mtrain_on_batch\u001b[0;34m(self, x, y, sample_weight, class_weight, reset_metrics, return_dict)\u001b[0m\n\u001b[1;32m   1826\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1827\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mreset_metrics\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1828\u001b[0;31m       \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_metrics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1829\u001b[0m     \u001b[0mlogs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msync_to_numpy_or_python_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlogs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1830\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mreturn_dict\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36mreset_metrics\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m   1765\u001b[0m     \"\"\"\n\u001b[1;32m   1766\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0mm\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1767\u001b[0;31m       \u001b[0mm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_state\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1768\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1769\u001b[0m   def train_on_batch(self,\n",
+            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/metrics.py\u001b[0m in \u001b[0;36mreset_state\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    258\u001b[0m       \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_states\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    259\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 260\u001b[0;31m       \u001b[0mbackend\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbatch_set_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvariables\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    261\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    262\u001b[0m   \u001b[0;34m@\u001b[0m\u001b[0mabc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabstractmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    204\u001b[0m     \u001b[0;34m\"\"\"Call target, and fall back on dispatchers if there is a TypeError.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    205\u001b[0m     \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 206\u001b[0;31m       \u001b[0;32mreturn\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    207\u001b[0m     \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mTypeError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    208\u001b[0m       \u001b[0;31m# Note: convert_to_eager_tensor currently raises a ValueError, not a\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/backend.py\u001b[0m in \u001b[0;36mbatch_set_value\u001b[0;34m(tuples)\u001b[0m\n\u001b[1;32m   3802\u001b[0m   \u001b[0;32mif\u001b[0m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecuting_eagerly_outside_functions\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3803\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtuples\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3804\u001b[0;31m       \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0massign\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype_numpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3805\u001b[0m   \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3806\u001b[0m     \u001b[0;32mwith\u001b[0m \u001b[0mget_graph\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mas_default\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/resource_variable_ops.py\u001b[0m in \u001b[0;36massign\u001b[0;34m(self, value, use_locking, name, read_value)\u001b[0m\n\u001b[1;32m    901\u001b[0m             (tensor_name, self._shape, value_tensor.shape))\n\u001b[1;32m    902\u001b[0m       assign_op = gen_resource_variable_ops.assign_variable_op(\n\u001b[0;32m--> 903\u001b[0;31m           self.handle, value_tensor, name=name)\n\u001b[0m\u001b[1;32m    904\u001b[0m       \u001b[0;32mif\u001b[0m \u001b[0mread_value\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    905\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_lazy_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0massign_op\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/gen_resource_variable_ops.py\u001b[0m in \u001b[0;36massign_variable_op\u001b[0;34m(resource, value, name)\u001b[0m\n\u001b[1;32m    140\u001b[0m     \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    141\u001b[0m       _result = pywrap_tfe.TFE_Py_FastPathExecute(\n\u001b[0;32m--> 142\u001b[0;31m         _ctx, \"AssignVariableOp\", name, resource, value)\n\u001b[0m\u001b[1;32m    143\u001b[0m       \u001b[0;32mreturn\u001b[0m \u001b[0m_result\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    144\u001b[0m     \u001b[0;32mexcept\u001b[0m \u001b[0m_core\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_NotOkStatusException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
+          ]
+        }
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "eA0-E6p_IgUp"
+      },
+      "source": [
+        "\n",
+        "show()"
+      ],
+      "execution_count": null,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/"
+        },
+        "id": "_HOBGEFGrKKz",
+        "outputId": "d0ec1f91-d8e5-440c-eaa7-fb73fe581e81"
+      },
+      "source": [
+        "gan.save(\"./content/gan_5\")"
+      ],
+      "execution_count": 73,
+      "outputs": [
+        {
+          "output_type": "stream",
+          "text": [
+            "INFO:tensorflow:Assets written to: ./content/gan_5/assets\n"
+          ],
+          "name": "stdout"
+        }
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "hdpwNe1lrWV6",
+        "colab": {
+          "base_uri": "https://localhost:8080/"
+        },
+        "outputId": "e6c8d7db-667b-483d-bf77-de05e0f23249"
+      },
+      "source": [
+        "gan=keras.models.load_model(\"/content/drive/MyDrive/gan_4\")"
+      ],
+      "execution_count": 32,
+      "outputs": [
+        {
+          "output_type": "stream",
+          "text": [
+            "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n"
+          ],
+          "name": "stdout"
+        }
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "R3q3PpxPB6vm"
+      },
+      "source": [
+        ""
+      ],
+      "execution_count": null,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "CBMpVfMbrXSx"
+      },
+      "source": [
+        "generator, discriminator =gan.layers"
+      ],
+      "execution_count": 74,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 123
+        },
+        "id": "M03cFWf8ebo8",
+        "outputId": "253bce32-da1b-4cc6-bedd-265e6c7becaa"
+      },
+      "source": [
+        "show()"
+      ],
+      "execution_count": 78,
+      "outputs": [
+        {
+          "output_type": "display_data",
+          "data": {
+            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGoAAABqCAIAAADbQ1PAAAAB0ElEQVR4nO3bwYqCQACA4dGpjE5Bx+gJOnXvMXu03iKI6FaDtAeXcA8rjb/Jxv7fyRwx+bHQEYuyLIP6sh1iPsR8iPkQ8yHmQ8yHjJQvxlgUxW+jzVCMcZyDGdBI+eq6fjwez4/7/b492gzVdT3OwQyoeN9dR4zxE4tkeWO+/8B2iPkQ8yHmQ8yHmA8xH2I+xHyI+ZCMfPP5/Hg8ttfEGKfTaUoppfTKHtqTLpvN5vWv/rMGu+dNKa1Wq+v1OsjePoVTBojtEPMhefk6Jtz/p7x87Ql3BX+8kPkQ8yHmQ8zX0263C951QLZDzIeYDzEfYj7EfN8mk8lzuaqqji0Ph8Nz6sQLF8R2iPkQ8yHmQ8yHmA8pmzcuZrNZCKGqKh8GZfG6D8ludzqdQgjb7fZ8Pr/heD7A/X6/3W7NsmffD5fLZblcvr69+RDbdWn+qTreVfTsQ2yHmA8xH2I+xHyI+RDzIeZDzIeYDzEfYr6emml58/XUvKNhvgzr9XqxWLTXOGGF2A4xH2I+xHyI+RDzIeZDzIeYDzEfYj7EfIj5EPMh5kPMh5gPMR9iPsR8iPkQ8yHmQ8yHmA8xH2I+xHyI+RDzIeZDzIeYDzEfYj7EfMgX19s6dG763QQAAAAASUVORK5CYII=\n",
+            "text/plain": [
+              "<PIL.Image.Image image mode=RGB size=106x106 at 0x7FCBA396E590>"
+            ]
+          },
+          "metadata": {
+            "tags": []
+          }
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/GAN/saved_model.pb b/GAN/saved_model.pb
new file mode 100644
index 0000000000000000000000000000000000000000..6d558d8c8d06573f4430770358aaf2e27cd51a7f
Binary files /dev/null and b/GAN/saved_model.pb differ
diff --git a/GAN/variables/variables.data-00000-of-00001 b/GAN/variables/variables.data-00000-of-00001
new file mode 100644
index 0000000000000000000000000000000000000000..ff2126bfeaebf86251025bf7c1d1d2feb2f9b060
Binary files /dev/null and b/GAN/variables/variables.data-00000-of-00001 differ
diff --git a/GAN/variables/variables.index b/GAN/variables/variables.index
new file mode 100644
index 0000000000000000000000000000000000000000..e204544356b1c75f83efa779d8a15bc82ea8136b
Binary files /dev/null and b/GAN/variables/variables.index differ
diff --git a/GAN_generated_images/test.png b/GAN_generated_images/test.png
new file mode 100644
index 0000000000000000000000000000000000000000..546581b0dc6e12a380b3f417f9e834d4339b8edf
Binary files /dev/null and b/GAN_generated_images/test.png differ
diff --git a/GAN_training_images/1.png b/GAN_training_images/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2a4460316f6484a09da3abd5a790f15de53d0e5
Binary files /dev/null and b/GAN_training_images/1.png differ
diff --git a/GAN_training_images/20.png b/GAN_training_images/20.png
new file mode 100644
index 0000000000000000000000000000000000000000..b697418a0af3dbfe71bbae0f005efff911827dbe
Binary files /dev/null and b/GAN_training_images/20.png differ
diff --git a/GAN_training_images/30.png b/GAN_training_images/30.png
new file mode 100644
index 0000000000000000000000000000000000000000..9c63b41b620495496f2d23f2c875711023784d00
Binary files /dev/null and b/GAN_training_images/30.png differ
diff --git a/GAN_training_images/40.png b/GAN_training_images/40.png
new file mode 100644
index 0000000000000000000000000000000000000000..25c82696e1ebcb0b47b9ae524208e386fb0c6a53
Binary files /dev/null and b/GAN_training_images/40.png differ
diff --git a/GAN_training_images/50.png b/GAN_training_images/50.png
new file mode 100644
index 0000000000000000000000000000000000000000..f5d556d7a39505a05c2cc57f91e13d62f5e872e1
Binary files /dev/null and b/GAN_training_images/50.png differ
diff --git a/GAN_training_images/70.png b/GAN_training_images/70.png
new file mode 100644
index 0000000000000000000000000000000000000000..bedfac4e88e799ac219a4824be5ba11e881711ea
Binary files /dev/null and b/GAN_training_images/70.png differ
diff --git a/GAN_training_images/80.png b/GAN_training_images/80.png
new file mode 100644
index 0000000000000000000000000000000000000000..a6358a73e8e4169cea0a16a2dad60485343d466e
Binary files /dev/null and b/GAN_training_images/80.png differ
diff --git a/dataset/convert2images.py b/dataset/convert2images.py
new file mode 100644
index 0000000000000000000000000000000000000000..2a228cb142940f3b31f4a8c2f81c3cdd97ff1d21
--- /dev/null
+++ b/dataset/convert2images.py
@@ -0,0 +1,19 @@
+import os
+from utils.img2midi import image2midi
+from utils.midi2img import midi2image
+
+
+def images_from_MIDI(dataset_path):
+    for subdir, dirs, files in os.walk(dataset_path):
+        for filename in files:
+            try:
+                path = os.path.join(subdir, filename)
+                path_bis = os.path.split(path)[-1]
+                print(path_bis)
+                midi2image(path, "./images/")
+            except:
+                pass
+
+
+if __name__ == '__main__':
+    images_from_MIDI("./MIDI")
diff --git a/dataset/convert_dataset.py b/dataset/convert_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..b65c5f76fdfb87d7b5d91661a7ea1081f25c2b25
--- /dev/null
+++ b/dataset/convert_dataset.py
@@ -0,0 +1,29 @@
+import os
+import numpy as np
+import cv2
+
+
+def make_dataset(image_path, output_path):
+    dataset = []
+    n = 0
+    for image_path in os.scandir(image_path):
+        try:
+            n += 1
+            print(n)
+            img = cv2.imread(os.path.abspath(image_path))
+            img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
+            if len(np.unique(img)) > 1:
+                img = np.reshape(np.array(img).astype(
+                    'float32')/255.0, (106, 106, 1))
+                dataset.append(img)
+        except:
+            pass
+    np.save(output_path, dataset)
+
+
+if __name__ == '__main__':
+    make_dataset("./images", "./test_bis.npy")
+    dataset = np.load("./test_bis.npy")
+    print(np.shape(dataset))
+    cv2.imshow('test', dataset[1000])
+    cv2.waitKey(0)
diff --git a/generated_midi/test.mid b/generated_midi/test.mid
new file mode 100644
index 0000000000000000000000000000000000000000..f6103485ca1baa88aef0580828e4dfaef1c628e7
Binary files /dev/null and b/generated_midi/test.mid differ
diff --git a/image_processing.py b/image_processing.py
new file mode 100644
index 0000000000000000000000000000000000000000..b88b6b5655495f0057d81f0a4c882af29dc62993
--- /dev/null
+++ b/image_processing.py
@@ -0,0 +1,19 @@
+import cv2
+import numpy as np
+
+
+def threshold_processing(path, output_path, value=128, ):
+    img = np.array(cv2.imread((path), cv2.IMREAD_GRAYSCALE))
+    _, img = cv2.threshold(img, value, 255, cv2.THRESH_BINARY)
+    cv2.imshow('test', img)
+    cv2.waitKey(0)
+    cv2.imwrite(output_path, img)
+
+
+def threshold_processing_img(img, value=128, ):
+    img = cv2.threshold(img, value, 255, cv2.THRESH_BINARY)
+    return img
+
+
+if __name__ == '__main__':
+    threshold_processing('./GAN_training_images/1.png', './test.png')
diff --git a/img2_midi_test.py b/img2_midi_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..93242f1a56c16ab1281a30304a03c84ad6e74fc2
--- /dev/null
+++ b/img2_midi_test.py
@@ -0,0 +1,16 @@
+from utils.img2midi import image2midi
+from utils.midi2img import midi2image
+import tensorflow as tf
+from tensorflow import keras
+import cv2
+import numpy as np
+
+gan = keras.models.load_model("./GAN")
+
+generator, discriminator = gan.layers
+
+img = generator(tf.random.normal(shape=[1, 256]))[0]
+
+cv2.imwrite('./GAN_generated_images/test.png', np.abs(img)*255)
+
+image2midi("./GAN_generated_images/test.png", './generated_midi/test.mid')
diff --git a/utils/__init__.py b/utils/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/utils/__pycache__/__init__.cpython-38.pyc b/utils/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..099e2e41a7e58694879ed2c2daeeb7f1086e6914
Binary files /dev/null and b/utils/__pycache__/__init__.cpython-38.pyc differ
diff --git a/utils/__pycache__/img2midi.cpython-38.pyc b/utils/__pycache__/img2midi.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1649d99e74195e3afb3709e736656fc3ec7c8fef
Binary files /dev/null and b/utils/__pycache__/img2midi.cpython-38.pyc differ
diff --git a/utils/__pycache__/midi2img.cpython-38.pyc b/utils/__pycache__/midi2img.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ea472a36009d9c84d5c77284e87892881ca87e8f
Binary files /dev/null and b/utils/__pycache__/midi2img.cpython-38.pyc differ
diff --git a/utils/img2midi.py b/utils/img2midi.py
new file mode 100644
index 0000000000000000000000000000000000000000..45315b251e883863d7df95f94a00b680241d783e
--- /dev/null
+++ b/utils/img2midi.py
@@ -0,0 +1,81 @@
+from PIL import Image
+import numpy as np
+from music21 import instrument, note, chord, stream
+
+lowerBoundNote = 21
+
+
+def column2notes(column):
+    notes = []
+    for i in range(len(column)):
+        if column[i] > 255/2:
+            notes.append(i+lowerBoundNote)
+    return notes
+
+
+resolution = 0.25
+
+
+def updateNotes(newNotes, prevNotes):
+    res = {}
+    for note in newNotes:
+        if note in prevNotes:
+            res[note] = prevNotes[note] + resolution
+        else:
+            res[note] = resolution
+    return res
+
+
+def image2midi(image_path, output_path):
+    with Image.open(image_path) as image:
+        im_arr = np.fromstring(image.tobytes(), dtype=np.uint8)
+        try:
+            im_arr = im_arr.reshape((image.size[1], image.size[0]))
+        except:
+            im_arr = im_arr.reshape((image.size[1], image.size[0], 3))
+            im_arr = np.dot(im_arr, [0.33, 0.33, 0.33])
+
+    """ convert the output from the prediction to notes and create a midi file
+        from the notes """
+    offset = 0
+    output_notes = []
+
+    # create note and chord objects based on the values generated by the model
+
+    prev_notes = updateNotes(im_arr.T[0, :], {})
+    for column in im_arr.T[1:, :]:
+        notes = column2notes(column)
+        # pattern is a chord
+        notes_in_chord = notes
+        old_notes = prev_notes.keys()
+        for old_note in old_notes:
+            if not old_note in notes_in_chord:
+                new_note = note.Note(
+                    old_note, quarterLength=prev_notes[old_note])
+                new_note.storedInstrument = instrument.Piano()
+                if offset - prev_notes[old_note] >= 0:
+                    new_note.offset = offset - prev_notes[old_note]
+                    output_notes.append(new_note)
+                elif offset == 0:
+                    new_note.offset = offset
+                    output_notes.append(new_note)
+                else:
+                    print(offset, prev_notes[old_note], old_note)
+
+        prev_notes = updateNotes(notes_in_chord, prev_notes)
+
+        # increase offset each iteration so that notes do not stack
+        offset += resolution
+
+    for old_note in prev_notes.keys():
+        new_note = note.Note(old_note, quarterLength=prev_notes[old_note])
+        new_note.storedInstrument = instrument.Piano()
+        new_note.offset = offset - prev_notes[old_note]
+
+        output_notes.append(new_note)
+
+    prev_notes = updateNotes(notes_in_chord, prev_notes)
+
+    midi_stream = stream.Stream(output_notes)
+
+    midi_stream.write('midi', output_path)
diff --git a/utils/midi2img.py b/utils/midi2img.py
new file mode 100644
index 0000000000000000000000000000000000000000..8e12d003a724779fc0b6250bde2e97efe4058edb
--- /dev/null
+++ b/utils/midi2img.py
@@ -0,0 +1,111 @@
+from music21 import converter, instrument, note, chord
+import json
+import sys
+import numpy as np
+from imageio import imwrite
+import cv2
+import os
+
+
+def extractNote(element):
+    return int(element.pitch.ps)
+
+
+def extractDuration(element):
+    return element.duration.quarterLength
+
+
+def get_notes(notes_to_parse):
+    """ Get all the notes and chords from the midi files in the ./midi_songs directory """
+    durations = []
+    notes = []
+    start = []
+
+    for element in notes_to_parse:
+        if isinstance(element, note.Note):
+            if element.isRest:
+                continue
+
+            start.append(element.offset)
+            notes.append(extractNote(element))
+            durations.append(extractDuration(element))
+
+        elif isinstance(element, chord.Chord):
+            if element.isRest:
+                continue
+            for chord_note in element.notes:
+                start.append(element.offset)
+                durations.append(extractDuration(element))
+                notes.append(extractNote(chord_note))
+
+    return {"start": start, "pitch": notes, "dur": durations}
+
+
+def midi2image(midi_path, image_path):
+    mid = converter.parse(midi_path)
+
+    instruments = instrument.partitionByInstrument(mid)
+
+    data = {}
+
+    try:
+        i = 0
+        for instrument_i in instruments.parts:
+            notes_to_parse = instrument_i.recurse()
+
+            if instrument_i.partName is None:
+                data["instrument_{}".format(i)] = get_notes(notes_to_parse)
+                i += 1
+            else:
+                data[instrument_i.partName] = get_notes(notes_to_parse)
+
+    except:
+        notes_to_parse = mid.flat.notes
+        data["instrument_0".format(i)] = get_notes(notes_to_parse)
+
+    resolution = 0.25
+
+    for instrument_name, values in data.items():
+        # https://en.wikipedia.org/wiki/Scientific_pitch_notation#Similar_systems
+        upperBoundNote = 127
+        lowerBoundNote = 21
+        maxSongLength = 106
+
+        index = 0
+        prev_index = 0
+        repetitions = 0
+        count = 0
+        while repetitions < 5:
+            if prev_index >= len(values["pitch"]):
+                break
+
+            matrix = np.zeros((upperBoundNote-lowerBoundNote, maxSongLength))
+
+            pitchs = values["pitch"]
+            durs = values["dur"]
+            starts = values["start"]
+
+            for i in range(prev_index, len(pitchs)):
+                pitch = pitchs[i]
+
+                dur = int(durs[i]/resolution)
+                start = int(starts[i]/resolution)
+
+                if dur+start - index*maxSongLength < maxSongLength:
+                    for j in range(start, start+dur):
+                        if j - index*maxSongLength >= 0:
+                            matrix[pitch-lowerBoundNote, j -
+                                   index*maxSongLength] = 255
+                else:
+                    prev_index = i
+                    break
+
+            cv2.imwrite(image_path + str(os.path.split(midi_path)
+                                         [-1])+str(instrument_name) + str(count)+".png", matrix)
+            index += 1
+            repetitions += 1
+            count += 1
+
+
+if __name__ == '__main__':
+    midi2image("MIDI/Albéniz/Aragon (Fantasia) Op.47 part 6.mid", "./images/")