similarity_nn_training.ipynb 123 KB
Newer Older
Jan Rudolf's avatar
Jan Rudolf committed
1 2 3 4
{
 "cells": [
  {
   "cell_type": "code",
5
   "execution_count": 24,
Jan Rudolf's avatar
Jan Rudolf committed
6 7 8 9 10 11 12
   "metadata": {},
   "outputs": [],
   "source": [
    "from audio_classification.preprocess import preprocess\n",
    "\n",
    "from sklearn import preprocessing\n",
    "from sklearn.model_selection import train_test_split\n",
13 14 15
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "import os\n",
Jan Rudolf's avatar
Jan Rudolf committed
16 17 18 19 20 21 22 23 24 25
    "import umap\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import tensorflow as tf\n",
    "import tensorflow_addons as tfa\n",
    "from tensorflow import keras\n",
    "from tensorflow.keras import backend as K\n",
    "from tensorflow.keras import Model\n",
    "from tensorflow.keras.utils import plot_model\n",
26
    "from tensorflow.keras.layers import Input, ZeroPadding2D, Conv2D, BatchNormalization, Activation, Dense, add, MaxPool2D, Dropout, GlobalMaxPool2D"
Jan Rudolf's avatar
Jan Rudolf committed
27 28 29 30 31 32 33 34 35 36
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "NUMBER_OF_MFCCS = 13\n",
    "CLIP_SIZE = 1290\n",
37 38 39 40 41 42 43 44 45
    "SAMPLE_SHAPE = (NUMBER_OF_MFCCS, CLIP_SIZE, 1)\n",
    "\n",
    "MODEL_FOLDER = os.path.join('models', 'siamese')\n",
    "MODEL_PATH = os.path.join(MODEL_FOLDER, 'model.h5')\n",
    "KNN_SAMPLES_PATH = os.path.join(MODEL_FOLDER, 'data.npy')\n",
    "KNN_LABELS_PATH = os.path.join(MODEL_FOLDER, 'labels.npy')\n",
    "\n",
    "if not os.path.isdir(MODEL_FOLDER):\n",
    "    os.makedirs(MODEL_FOLDER)"
Jan Rudolf's avatar
Jan Rudolf committed
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cached features found\n"
     ]
    }
   ],
   "source": [
62 63
    "data, similarity = preprocess(NUMBER_OF_MFCCS)\n",
    "\n",
Jan Rudolf's avatar
Jan Rudolf committed
64 65 66 67 68 69 70 71 72 73
    "le = preprocessing.LabelEncoder()\n",
    "transformed = le.fit_transform(data['label'])\n",
    "l = []\n",
    "for index, row in data.iterrows():\n",
    "    arr = np.load(row['file'])\n",
    "    l.append(arr[:, :CLIP_SIZE])\n",
    "    \n",
    "X = np.expand_dims(np.stack(l), axis=3)\n",
    "y = np.array(transformed)\n",
    "\n",
74 75
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, stratify=y, random_state=666)\n",
    "X_train, X_valid, y_train, y_valid = train_test_split(X_train, y_train, stratify=y_train, random_state=666)\n",
Jan Rudolf's avatar
Jan Rudolf committed
76 77
    "\n",
    "train_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(32)\n",
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
    "valid_dataset = tf.data.Dataset.from_tensor_slices((X_valid, y_valid)).batch(32)\n",
    "test_dataset = tf.data.Dataset.from_tensor_slices((X_test, y_test)).batch(32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "if not os.path.isdir(MODEL_FOLDER):\n",
    "    os.makedirs(MODEL_FOLDER)\n",
    "\n",
    "class CustomMetricCallback(keras.callbacks.Callback):\n",
    "    def __init__(self, patience, verbose = 0, save_best = True):\n",
    "        super(keras.callbacks.Callback, self).__init__()\n",
    "        self.patience = patience\n",
    "        self.verbose = verbose\n",
    "        self.save_best = save_best\n",
    "        self.best_val_score = -float('inf')\n",
    "        self.last_improvement = 0\n",
    "\n",
    "\n",
    "    def on_epoch_end(self, epoch, logs={}):\n",
    "        train_features = np.asarray(self.model.predict(train_dataset))\n",
    "        valid_features = np.asarray(self.model.predict(valid_dataset))\n",
    "        \n",
    "        knn = KNeighborsClassifier(n_neighbors=12)\n",
    "        knn.fit(train_features, y_train)\n",
    "        \n",
    "        train_pred = knn.predict(train_features)\n",
    "        valid_pred = knn.predict(valid_features)\n",
    "        \n",
    "        train_score = accuracy_score(y_train, train_pred)\n",
    "        valid_score = accuracy_score(y_valid, valid_pred)\n",
    "        \n",
    "        if self.verbose > 0:\n",
    "            print(f', acc: {train_score}, val_acc: {valid_score}')\n",
    "            \n",
    "        if self.save_best and self.best_val_score < valid_score:\n",
    "            print(f'Best improved: {self.best_val_score} -> {valid_score}. Saving model to {MODEL_FOLDER}')\n",
    "            self.best_val_score = valid_score\n",
    "            self.last_improvement = epoch\n",
    "            self.model.save(MODEL_PATH, overwrite=True)\n",
    "            \n",
    "            np.save(KNN_SAMPLES_PATH, train_features)\n",
    "            np.save(KNN_LABELS_PATH, y_train)\n",
    "        else:\n",
    "            print(f'Score did not improve')\n",
    "            \n",
    "        if self.patience is not None and epoch - self.last_improvement > self.patience:\n",
    "            print(f'Score did not improve for {self.patience} epochs. Stopping')\n",
    "            self.model.stop_training = True"
Jan Rudolf's avatar
Jan Rudolf committed
131 132 133 134 135 136 137 138
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
139
   "outputs": [],
Jan Rudolf's avatar
Jan Rudolf committed
140 141 142 143 144
   "source": [
    "def res_block_2l(block_number, input_block, filters, strides = 1):\n",
    "    block_name = 'block' + str(block_number) + '_'\n",
    "\n",
    "    y = Conv2D(\n",
145
    "        filters=filters,\n",
Jan Rudolf's avatar
Jan Rudolf committed
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
    "        kernel_size=3,\n",
    "        strides=strides, \n",
    "        padding='same', \n",
    "        name=block_name + 'conv_1'\n",
    "    )(input_block)\n",
    "    y = BatchNormalization(name=block_name + 'bn_1')(y)\n",
    "    y = Activation('relu', name=block_name + 'activation_1')(y)\n",
    "\n",
    "    y = Conv2D(\n",
    "        filters=filters, \n",
    "        kernel_size=3, \n",
    "        padding='same',\n",
    "        name=block_name + 'conv_2'\n",
    "    )(y)\n",
    "    y = BatchNormalization(name=block_name + 'bn_2')(y)\n",
    "\n",
    "    if strides != 1:\n",
    "        z = Conv2D(kernel_size=1, filters=filters, strides=strides, name=block_name + 'conv_S')(input_block)\n",
    "        z = BatchNormalization(name=block_name + 'bn_S')(z)\n",
    "    else:\n",
    "        z = input_block\n",
    "    x = add([z, y], name=block_name + 'add')\n",
    "    return Activation('relu', name=block_name + 'activation_after')(x)\n",
    "\n",
    "\n",
    "inp = Input(shape=SAMPLE_SHAPE, name='embedding_input')\n",
    "\n",
    "x = Conv2D(filters=32, kernel_size=3, padding='same', name='conv_first')(inp)\n",
    "x = BatchNormalization(name='bn_first')(x)\n",
    "x = Activation('relu')(x)\n",
    "\n",
    "x = res_block_2l(1, x, 32)\n",
    "x = res_block_2l(2, x, 64, 2)\n",
    "x = res_block_2l(3, x, 64)\n",
180 181 182
    "x = res_block_2l(4, x, 64)\n",
    "x = res_block_2l(5, x, 128, 2)\n",
    "x = res_block_2l(6, x, 128)\n",
Jan Rudolf's avatar
Jan Rudolf committed
183 184 185
    "\n",
    "x = GlobalMaxPool2D()(x)\n",
    "\n",
186 187
    "x = Dense(128, name='dense_1', activation='relu')(x)\n",
    "x = Dropout(0.1)(x)\n",
Jan Rudolf's avatar
Jan Rudolf committed
188 189 190
    "x = Dense(128, name='dense_2')(x)\n",
    "\n",
    "model = Model(inp, x, name='embedding_model')\n",
191
    "\n",
Jan Rudolf's avatar
Jan Rudolf committed
192 193
    "model.compile(\n",
    "    optimizer=tf.keras.optimizers.Nadam(),\n",
194 195 196
    "    loss=tfa.losses.TripletSemiHardLoss()\n",
    ")\n",
    "#model.summary()"
Jan Rudolf's avatar
Jan Rudolf committed
197 198 199 200 201 202
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
203
    "scrolled": true
Jan Rudolf's avatar
Jan Rudolf committed
204 205 206 207 208 209
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542
      "Epoch 1/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.3694, acc: 0.51, val_acc: 0.37\n",
      "Best improved: -inf -> 0.37. Saving model to models/siamese\n",
      "19/19 [==============================] - 16s 854ms/step - loss: 0.3694\n",
      "Epoch 2/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.2748, acc: 0.43666666666666665, val_acc: 0.275\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 776ms/step - loss: 0.2748\n",
      "Epoch 3/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.2405, acc: 0.49833333333333335, val_acc: 0.37\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 779ms/step - loss: 0.2405\n",
      "Epoch 4/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.1568, acc: 0.49833333333333335, val_acc: 0.355\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 776ms/step - loss: 0.1568\n",
      "Epoch 5/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.1772, acc: 0.59, val_acc: 0.455\n",
      "Best improved: 0.37 -> 0.455. Saving model to models/siamese\n",
      "19/19 [==============================] - 15s 791ms/step - loss: 0.1772\n",
      "Epoch 6/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.2355, acc: 0.5833333333333334, val_acc: 0.475\n",
      "Best improved: 0.455 -> 0.475. Saving model to models/siamese\n",
      "19/19 [==============================] - 15s 799ms/step - loss: 0.2355\n",
      "Epoch 7/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0972, acc: 0.6066666666666667, val_acc: 0.49\n",
      "Best improved: 0.475 -> 0.49. Saving model to models/siamese\n",
      "19/19 [==============================] - 15s 789ms/step - loss: 0.0972\n",
      "Epoch 8/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0934, acc: 0.6033333333333334, val_acc: 0.545\n",
      "Best improved: 0.49 -> 0.545. Saving model to models/siamese\n",
      "19/19 [==============================] - 15s 786ms/step - loss: 0.0934\n",
      "Epoch 9/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0860, acc: 0.63, val_acc: 0.53\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 786ms/step - loss: 0.0860\n",
      "Epoch 10/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.1013, acc: 0.6633333333333333, val_acc: 0.56\n",
      "Best improved: 0.545 -> 0.56. Saving model to models/siamese\n",
      "19/19 [==============================] - 15s 795ms/step - loss: 0.1013\n",
      "Epoch 11/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.1038, acc: 0.6283333333333333, val_acc: 0.565\n",
      "Best improved: 0.56 -> 0.565. Saving model to models/siamese\n",
      "19/19 [==============================] - 15s 787ms/step - loss: 0.1038\n",
      "Epoch 12/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0886, acc: 0.6833333333333333, val_acc: 0.56\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 795ms/step - loss: 0.0886\n",
      "Epoch 13/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0779, acc: 0.675, val_acc: 0.54\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 797ms/step - loss: 0.0779\n",
      "Epoch 14/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0745, acc: 0.6816666666666666, val_acc: 0.605\n",
      "Best improved: 0.565 -> 0.605. Saving model to models/siamese\n",
      "19/19 [==============================] - 15s 794ms/step - loss: 0.0745\n",
      "Epoch 15/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0760, acc: 0.71, val_acc: 0.61\n",
      "Best improved: 0.605 -> 0.61. Saving model to models/siamese\n",
      "19/19 [==============================] - 15s 792ms/step - loss: 0.0760\n",
      "Epoch 16/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0637, acc: 0.7166666666666667, val_acc: 0.55\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 774ms/step - loss: 0.0637\n",
      "Epoch 17/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0610, acc: 0.715, val_acc: 0.585\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 807ms/step - loss: 0.0610\n",
      "Epoch 18/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0612, acc: 0.7333333333333333, val_acc: 0.6\n",
      "Score did not improve\n",
      "19/19 [==============================] - 16s 841ms/step - loss: 0.0612\n",
      "Epoch 19/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0557, acc: 0.7183333333333334, val_acc: 0.55\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 779ms/step - loss: 0.0557\n",
      "Epoch 20/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0524, acc: 0.7, val_acc: 0.55\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 778ms/step - loss: 0.0524\n",
      "Epoch 21/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0588, acc: 0.7616666666666667, val_acc: 0.59\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 791ms/step - loss: 0.0588\n",
      "Epoch 22/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0407, acc: 0.7566666666666667, val_acc: 0.62\n",
      "Best improved: 0.61 -> 0.62. Saving model to models/siamese\n",
      "19/19 [==============================] - 15s 796ms/step - loss: 0.0407\n",
      "Epoch 23/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0537, acc: 0.7883333333333333, val_acc: 0.62\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 782ms/step - loss: 0.0537\n",
      "Epoch 24/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0501, acc: 0.805, val_acc: 0.6\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 780ms/step - loss: 0.0501\n",
      "Epoch 25/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0446, acc: 0.775, val_acc: 0.59\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 780ms/step - loss: 0.0446\n",
      "Epoch 26/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0464, acc: 0.79, val_acc: 0.585\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 781ms/step - loss: 0.0464\n",
      "Epoch 27/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0372, acc: 0.7783333333333333, val_acc: 0.56\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 783ms/step - loss: 0.0372\n",
      "Epoch 28/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0322, acc: 0.8133333333333334, val_acc: 0.59\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 784ms/step - loss: 0.0322\n",
      "Epoch 29/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0303, acc: 0.805, val_acc: 0.57\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 797ms/step - loss: 0.0303\n",
      "Epoch 30/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0328, acc: 0.8333333333333334, val_acc: 0.575\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 790ms/step - loss: 0.0328\n",
      "Epoch 31/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0285, acc: 0.8116666666666666, val_acc: 0.565\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 800ms/step - loss: 0.0285\n",
      "Epoch 32/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0262, acc: 0.8116666666666666, val_acc: 0.59\n",
      "Score did not improve\n",
      "19/19 [==============================] - 16s 845ms/step - loss: 0.0262\n",
      "Epoch 33/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0242, acc: 0.8033333333333333, val_acc: 0.63\n",
      "Best improved: 0.62 -> 0.63. Saving model to models/siamese\n",
      "19/19 [==============================] - 16s 833ms/step - loss: 0.0242\n",
      "Epoch 34/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0268, acc: 0.83, val_acc: 0.63\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 787ms/step - loss: 0.0268\n",
      "Epoch 35/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0252, acc: 0.8333333333333334, val_acc: 0.6\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 781ms/step - loss: 0.0252\n",
      "Epoch 36/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0260, acc: 0.8333333333333334, val_acc: 0.625\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 804ms/step - loss: 0.0260\n",
      "Epoch 37/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0285, acc: 0.8583333333333333, val_acc: 0.625\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 784ms/step - loss: 0.0285\n",
      "Epoch 38/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0291, acc: 0.8233333333333334, val_acc: 0.62\n",
      "Score did not improve\n",
      "19/19 [==============================] - 14s 755ms/step - loss: 0.0291\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 39/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0169, acc: 0.8516666666666667, val_acc: 0.575\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 705ms/step - loss: 0.0169\n",
      "Epoch 40/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0153, acc: 0.8583333333333333, val_acc: 0.605\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 706ms/step - loss: 0.0153\n",
      "Epoch 41/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0134, acc: 0.8433333333333334, val_acc: 0.57\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 704ms/step - loss: 0.0134\n",
      "Epoch 42/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0117, acc: 0.84, val_acc: 0.6\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 703ms/step - loss: 0.0117\n",
      "Epoch 43/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0154, acc: 0.8533333333333334, val_acc: 0.595\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 705ms/step - loss: 0.0154\n",
      "Epoch 44/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0168, acc: 0.85, val_acc: 0.58\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 706ms/step - loss: 0.0168\n",
      "Epoch 45/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0200, acc: 0.8683333333333333, val_acc: 0.585\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 709ms/step - loss: 0.0200\n",
      "Epoch 46/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0146, acc: 0.87, val_acc: 0.605\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 705ms/step - loss: 0.0146\n",
      "Epoch 47/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0120, acc: 0.8883333333333333, val_acc: 0.62\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 705ms/step - loss: 0.0120\n",
      "Epoch 48/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0046, acc: 0.8733333333333333, val_acc: 0.615\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 708ms/step - loss: 0.0046\n",
      "Epoch 49/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0106, acc: 0.8883333333333333, val_acc: 0.64\n",
      "Best improved: 0.63 -> 0.64. Saving model to models/siamese\n",
      "19/19 [==============================] - 14s 717ms/step - loss: 0.0106\n",
      "Epoch 50/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0117, acc: 0.895, val_acc: 0.605\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 706ms/step - loss: 0.0117\n",
      "Epoch 51/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0111, acc: 0.89, val_acc: 0.62\n",
      "Score did not improve\n",
      "19/19 [==============================] - 14s 719ms/step - loss: 0.0111\n",
      "Epoch 52/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0107, acc: 0.8783333333333333, val_acc: 0.615\n",
      "Score did not improve\n",
      "19/19 [==============================] - 14s 735ms/step - loss: 0.0107\n",
      "Epoch 53/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0111, acc: 0.875, val_acc: 0.63\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 708ms/step - loss: 0.0111\n",
      "Epoch 54/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0067, acc: 0.8783333333333333, val_acc: 0.61\n",
      "Score did not improve\n",
      "19/19 [==============================] - 14s 715ms/step - loss: 0.0067\n",
      "Epoch 55/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0114, acc: 0.8533333333333334, val_acc: 0.605\n",
      "Score did not improve\n",
      "19/19 [==============================] - 14s 750ms/step - loss: 0.0114\n",
      "Epoch 56/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0099, acc: 0.8683333333333333, val_acc: 0.61\n",
      "Score did not improve\n",
      "19/19 [==============================] - 14s 717ms/step - loss: 0.0099\n",
      "Epoch 57/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0183, acc: 0.88, val_acc: 0.61\n",
      "Score did not improve\n",
      "19/19 [==============================] - 14s 737ms/step - loss: 0.0183\n",
      "Epoch 58/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0109, acc: 0.875, val_acc: 0.665\n",
      "Best improved: 0.64 -> 0.665. Saving model to models/siamese\n",
      "19/19 [==============================] - 14s 755ms/step - loss: 0.0109\n",
      "Epoch 59/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0175, acc: 0.8416666666666667, val_acc: 0.68\n",
      "Best improved: 0.665 -> 0.68. Saving model to models/siamese\n",
      "19/19 [==============================] - 14s 733ms/step - loss: 0.0175\n",
      "Epoch 60/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0175, acc: 0.8516666666666667, val_acc: 0.58\n",
      "Score did not improve\n",
      "19/19 [==============================] - 14s 713ms/step - loss: 0.0175\n",
      "Epoch 61/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0170, acc: 0.8733333333333333, val_acc: 0.625\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 708ms/step - loss: 0.0170\n",
      "Epoch 62/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0081, acc: 0.8883333333333333, val_acc: 0.595\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 707ms/step - loss: 0.0081\n",
      "Epoch 63/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0081, acc: 0.8533333333333334, val_acc: 0.64\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 705ms/step - loss: 0.0081\n",
      "Epoch 64/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0085, acc: 0.8683333333333333, val_acc: 0.59\n",
      "Score did not improve\n",
      "19/19 [==============================] - 13s 704ms/step - loss: 0.0085\n",
      "Epoch 65/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0081, acc: 0.8683333333333333, val_acc: 0.585\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 774ms/step - loss: 0.0081\n",
      "Epoch 66/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0108, acc: 0.8683333333333333, val_acc: 0.64\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 813ms/step - loss: 0.0108\n",
      "Epoch 67/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0099, acc: 0.875, val_acc: 0.61\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 779ms/step - loss: 0.0099\n",
      "Epoch 68/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0080, acc: 0.8866666666666667, val_acc: 0.61\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 777ms/step - loss: 0.0080\n",
      "Epoch 69/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0096, acc: 0.8966666666666666, val_acc: 0.595\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 777ms/step - loss: 0.0096\n",
      "Epoch 70/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0073, acc: 0.8816666666666667, val_acc: 0.585\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 783ms/step - loss: 0.0073\n",
      "Epoch 71/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0101, acc: 0.9, val_acc: 0.58\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 810ms/step - loss: 0.0101\n",
      "Epoch 72/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0083, acc: 0.89, val_acc: 0.62\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 786ms/step - loss: 0.0083\n",
      "Epoch 73/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0056, acc: 0.8733333333333333, val_acc: 0.595\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 780ms/step - loss: 0.0056\n",
      "Epoch 74/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0064, acc: 0.8916666666666667, val_acc: 0.62\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 781ms/step - loss: 0.0064\n",
      "Epoch 75/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0094, acc: 0.89, val_acc: 0.6\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 786ms/step - loss: 0.0094\n",
      "Epoch 76/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0132, acc: 0.8933333333333333, val_acc: 0.605\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 800ms/step - loss: 0.0132\n",
      "Epoch 77/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0116, acc: 0.8866666666666667, val_acc: 0.625\n",
      "Score did not improve\n",
      "19/19 [==============================] - 15s 775ms/step - loss: 0.0116\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 78/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0155, acc: 0.895, val_acc: 0.61\n",
      "Score did not improve\n",
      "19/19 [==============================] - 16s 862ms/step - loss: 0.0155\n",
      "Epoch 79/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0144, acc: 0.89, val_acc: 0.615\n",
      "Score did not improve\n",
      "19/19 [==============================] - 17s 900ms/step - loss: 0.0144\n",
      "Epoch 80/1000\n",
      "19/19 [==============================] - ETA: 0s - loss: 0.0088, acc: 0.8583333333333333, val_acc: 0.61\n",
      "Score did not improve\n",
      "Score did not improve for 20 epochs. Stopping\n",
      "19/19 [==============================] - 17s 899ms/step - loss: 0.0088\n"
Jan Rudolf's avatar
Jan Rudolf committed
543 544 545 546 547 548 549
     ]
    }
   ],
   "source": [
    "tf.config.run_functions_eagerly(True)\n",
    "history = model.fit(\n",
    "    train_dataset,\n",
550 551
    "    epochs=1000,\n",
    "    callbacks=[CustomMetricCallback(patience=20, verbose=1)]\n",
Jan Rudolf's avatar
Jan Rudolf committed
552 553 554 555 556
    ")"
   ]
  },
  {
   "cell_type": "code",
557
   "execution_count": 11,
Jan Rudolf's avatar
Jan Rudolf committed
558 559 560 561 562
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
563 564 565 566
    "model = tf.keras.models.load_model(MODEL_PATH, compile=False)\n",
    "\n",
    "train_features = model.predict(train_dataset)\n",
    "\n",
Jan Rudolf's avatar
Jan Rudolf committed
567 568 569
    "knn = KNeighborsClassifier(n_neighbors=12)\n",
    "knn.fit(train_features, y_train)\n",
    "\n",
570 571
    "train_predictions = knn.predict(train_features)\n",
    "\n",
Jan Rudolf's avatar
Jan Rudolf committed
572 573 574 575 576 577
    "test_features = model.predict(test_dataset)\n",
    "test_predictions = knn.predict(test_features)"
   ]
  },
  {
   "cell_type": "code",
578
   "execution_count": 12,
Jan Rudolf's avatar
Jan Rudolf committed
579 580 581 582 583 584
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603
      "=== TRAIN ===\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "       blues       0.77      0.92      0.84        60\n",
      "   classical       0.98      1.00      0.99        60\n",
      "     country       0.77      0.85      0.81        60\n",
      "       disco       0.78      0.85      0.82        60\n",
      "      hiphop       0.77      0.77      0.77        60\n",
      "        jazz       0.92      0.95      0.93        60\n",
      "       metal       0.89      0.98      0.94        60\n",
      "         pop       0.93      0.83      0.88        60\n",
      "      reggae       0.79      0.70      0.74        60\n",
      "        rock       0.81      0.57      0.67        60\n",
      "\n",
      "    accuracy                           0.84       600\n",
      "   macro avg       0.84      0.84      0.84       600\n",
      "weighted avg       0.84      0.84      0.84       600\n",
      "\n",
      "=== TEST ===\n",
Jan Rudolf's avatar
Jan Rudolf committed
604 605
      "              precision    recall  f1-score   support\n",
      "\n",
606 607 608 609 610 611 612 613 614 615
      "       blues       0.71      0.75      0.73        20\n",
      "   classical       0.94      0.85      0.89        20\n",
      "     country       0.52      0.70      0.60        20\n",
      "       disco       0.67      0.40      0.50        20\n",
      "      hiphop       0.50      0.65      0.57        20\n",
      "        jazz       0.71      0.75      0.73        20\n",
      "       metal       0.73      0.95      0.83        20\n",
      "         pop       0.75      0.75      0.75        20\n",
      "      reggae       0.47      0.40      0.43        20\n",
      "        rock       0.42      0.25      0.31        20\n",
Jan Rudolf's avatar
Jan Rudolf committed
616
      "\n",
617 618 619
      "    accuracy                           0.65       200\n",
      "   macro avg       0.64      0.65      0.63       200\n",
      "weighted avg       0.64      0.65      0.63       200\n",
Jan Rudolf's avatar
Jan Rudolf committed
620 621 622 623 624
      "\n"
     ]
    },
    {
     "data": {
625 626 627 628 629 630 631 632 633 634 635 636 637
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
Jan Rudolf's avatar
Jan Rudolf committed
638 639 640 641 642 643 644 645 646 647 648 649
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report, plot_confusion_matrix\n",
650 651 652 653 654 655 656 657
    "print('=== TRAIN ===')\n",
    "print(classification_report(y_train, train_predictions, target_names=le.classes_))\n",
    "disp = plot_confusion_matrix(knn, train_features, y_train,\n",
    "                             display_labels=le.classes_,\n",
    "                             cmap=plt.cm.Blues)\n",
    "disp.ax_.set_title('Train confusion matrix');\n",
    "\n",
    "print('=== TEST ===')\n",
Jan Rudolf's avatar
Jan Rudolf committed
658 659 660 661
    "print(classification_report(y_test, test_predictions, target_names=le.classes_))\n",
    "disp = plot_confusion_matrix(knn, test_features, y_test,\n",
    "                             display_labels=le.classes_,\n",
    "                             cmap=plt.cm.Blues)\n",
662
    "disp.ax_.set_title('Test confusion matrix');"
Jan Rudolf's avatar
Jan Rudolf committed
663 664 665 666
   ]
  },
  {
   "cell_type": "code",
667
   "execution_count": 13,
Jan Rudolf's avatar
Jan Rudolf committed
668 669 670 671 672 673 674 675 676
   "metadata": {},
   "outputs": [],
   "source": [
    "fit = umap.UMAP()\n",
    "u = fit.fit_transform(train_features)"
   ]
  },
  {
   "cell_type": "code",
677
   "execution_count": 30,
Jan Rudolf's avatar
Jan Rudolf committed
678 679 680 681
   "metadata": {},
   "outputs": [
    {
     "data": {
682
      "image/png": "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\n",
Jan Rudolf's avatar
Jan Rudolf committed
683 684 685 686 687 688 689 690 691 692 693
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
694 695 696
    "scatter = plt.scatter(u[:,0], u[:,1], c=y_train, cmap='tab10')\n",
    "plt.title('UMAP embedding')\n",
    "handles, labels = scatter.legend_elements()\n",
Jan Rudolf's avatar
Jan Rudolf committed
697
    "\n",
698
    "plt.legend(handles, le.classes_);"
Jan Rudolf's avatar
Jan Rudolf committed
699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}