diff --git a/.gitignore b/.gitignore
index e3b6fa2..75d959a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
.idea
/input
/output*
+/target
+/classes
\ No newline at end of file
diff --git a/2017-big-data.iml b/2017-big-data.iml
new file mode 100644
index 0000000..ce21085
--- /dev/null
+++ b/2017-big-data.iml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/answers.txt b/answers.txt
index 00fa802..e2a4bd1 100644
--- a/answers.txt
+++ b/answers.txt
@@ -1,3 +1,6 @@
-2. is 126420
-3. 41.602
-4. french 5742
+Stop words: 315 / 50111754
+Top 7 word: was 18390091
+Top 5 name: October 1072212
+
+Время выполняения без комбайнеров: 1 час 3 минуты
+Время выполнения с комбайнерами: 1 час 52 минут
\ No newline at end of file
diff --git a/autoencoder.ipynb b/autoencoder.ipynb
new file mode 100644
index 0000000..513c228
--- /dev/null
+++ b/autoencoder.ipynb
@@ -0,0 +1,294 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "autoencoder.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "accelerator": "GPU"
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "tOU8ff_RJ7zY",
+ "colab_type": "code",
+ "outputId": "3894c90e-508e-4144-9e1b-fd8c2c855f70",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 326
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pip install git+https://github.com/rcmalli/keras-vggface.git"
+ ],
+ "execution_count": 1,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Collecting git+https://github.com/rcmalli/keras-vggface.git\n",
+ " Cloning https://github.com/rcmalli/keras-vggface.git to /tmp/pip-req-build-xfo8xg7l\n",
+ "Requirement already satisfied (use --upgrade to upgrade): keras-vggface==0.5 from git+https://github.com/rcmalli/keras-vggface.git in /usr/local/lib/python3.6/dist-packages\n",
+ "Requirement already satisfied: numpy>=1.9.1 in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (1.16.3)\n",
+ "Requirement already satisfied: scipy>=0.14 in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (1.2.1)\n",
+ "Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (2.8.0)\n",
+ "Requirement already satisfied: pillow in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (4.3.0)\n",
+ "Requirement already satisfied: keras in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (2.2.4)\n",
+ "Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (1.12.0)\n",
+ "Requirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (3.13)\n",
+ "Requirement already satisfied: olefile in /usr/local/lib/python3.6/dist-packages (from pillow->keras-vggface==0.5) (0.46)\n",
+ "Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from keras->keras-vggface==0.5) (1.0.9)\n",
+ "Requirement already satisfied: keras-applications>=1.0.6 in /usr/local/lib/python3.6/dist-packages (from keras->keras-vggface==0.5) (1.0.7)\n",
+ "Building wheels for collected packages: keras-vggface\n",
+ " Building wheel for keras-vggface (setup.py) ... \u001b[?25ldone\n",
+ "\u001b[?25h Stored in directory: /tmp/pip-ephem-wheel-cache-yvofgm87/wheels/36/07/46/06c25ce8e9cd396dabe151ea1d8a2bc28dafcb11321c1f3a6d\n",
+ "Successfully built keras-vggface\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ZfPNLVe9JoyO",
+ "colab_type": "code",
+ "outputId": "37054b0a-5378-4fa4-f466-f52b16b4f1c3",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from keras.engine import Model\n",
+ "from keras.layers import Flatten, Dense, Input, Dropout, Reshape\n",
+ "from keras_vggface.vggface import VGGFace\n",
+ "from keras.utils import Sequence\n",
+ "from keras.callbacks import ModelCheckpoint\n",
+ "from keras.optimizers import Adam\n",
+ "import tensorflow as tf\n",
+ "from keras import backend as K"
+ ],
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Using TensorFlow backend.\n"
+ ],
+ "name": "stderr"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "-W3_Na-7Sx9u",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "import os\n",
+ "from glob import glob\n",
+ "import numpy as np\n",
+ "from google.colab import drive\n",
+ "import math"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "mIG0AxdaKaUb",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def get_model():\n",
+ " vgg_model = VGGFace(include_top=False, input_shape=(224, 224, 3), model='resnet50')\n",
+ " vgg_model.trainable = False\n",
+ " last_layer = vgg_model.get_layer('avg_pool').output\n",
+ " x = Flatten(name='flatten')(last_layer)\n",
+ " out = Dense(2048, activation='relu')(x)\n",
+ " encoder = Model(vgg_model.input, out, name=\"resnet50_faces_encoder\")\n",
+ " \n",
+ " input_encoded = Input(shape=(2048,))\n",
+ " flat_decoded = Dense(224*224*3, activation='relu')(input_encoded)\n",
+ " decoded = Reshape((224, 224, 3))(flat_decoded)\n",
+ " \n",
+ " decoder = Model(input_encoded, decoded)\n",
+ "\n",
+ " autoencoder = Model(vgg_model.input, decoder(encoder(vgg_model.input)))\n",
+ " autoencoder.compile(optimizer=Adam(lr=0.000001), loss='binary_crossentropy')\n",
+ " return encoder, autoencoder"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "-Tq1VVX-kSQc",
+ "colab_type": "code",
+ "outputId": "20b5f9d0-a0e6-435d-bf66-6c877836bdbc",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "drive.mount(\"/content/nsuprotivniy/\")\n",
+ "data_path = \"/content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/\""
+ ],
+ "execution_count": 5,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Drive already mounted at /content/nsuprotivniy/; to attempt to forcibly remount, call drive.mount(\"/content/nsuprotivniy/\", force_remount=True).\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "CDOcZhKPZGqX",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "class Generator(Sequence): \n",
+ " def __init__(self, batch_size = 2):\n",
+ " files = glob(os.path.join(data_path, \"*/*/cropped/*.npy\")) + glob(os.path.join(data_path, \"LCC_FASD_evaluation/cropped/*.npy\"))\n",
+ " self.batches = np.array_split(files, math.ceil(len(files) / batch_size))\n",
+ " \n",
+ " def __len__(self):\n",
+ " return len(self.batches)\n",
+ "\n",
+ " def __getitem__(self, idx):\n",
+ " X = np.array([np.load(path) for path in self.batches[idx]])\n",
+ " return X, X"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "22gRJnAuNtOu",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "gen = Generator()"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "eZkLM1f74371",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "model_path = os.path.join(data_path, \"autoencoder\")\n",
+ "if (not os.path.exists(model_path)):\n",
+ " os.mkdir(model_path)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "9KBbrZtrMlYt",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "checkpoints_path = os.path.join(model_path, \"checkpoints\")\n",
+ "if (not os.path.exists(checkpoints_path)):\n",
+ " os.mkdir(checkpoints_path)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "S_xR37tueCy1",
+ "colab_type": "code",
+ "outputId": "2ef79dbf-9a0b-40d8-9835-9afe412e4406",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 207
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "checkpoint_filename = \"autoencoder_model_weights.h5\"\n",
+ "checkpoint = [ModelCheckpoint(os.path.join(checkpoints_path, checkpoint_filename), verbose=1, period=5)]\n",
+ "encoder, autoencoder = get_model()\n",
+ "autoencoder.fit_generator(gen, epochs=100, verbose=1, callbacks=checkpoint)"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Colocations handled automatically by placer.\n",
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Use tf.cast instead.\n",
+ "Epoch 1/100\n",
+ "9414/9414 [==============================] - 3506s 372ms/step - loss: -1288.1002\n",
+ "Epoch 2/100\n",
+ " 245/9414 [..............................] - ETA: 46:07 - loss: -1884.6891"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "2n2ZjLk74b_Y",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "model_json = encoder.to_json()\n",
+ "with open(os.path.join(model_path, \"encoder.json\"), \"w\") as json_file:\n",
+ " json_file.write(model_json)\n",
+ " \n",
+ "encoder.save_weights(os.path.join(model_path, \"encoder.h5\"))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/evaluation.ipynb b/evaluation.ipynb
new file mode 100644
index 0000000..8d01504
--- /dev/null
+++ b/evaluation.ipynb
@@ -0,0 +1,1164 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "evaluation.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "accelerator": "GPU"
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "kTzsvD2dDLUs",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "4959d941-e3da-4c3a-9ebe-b2a184491504"
+ },
+ "cell_type": "code",
+ "source": [
+ "from keras.models import model_from_json\n",
+ "from glob import glob\n",
+ "import numpy as np\n",
+ "from os.path import join, exists\n",
+ "from os import mkdir\n",
+ "from google.colab import drive\n",
+ "from math import ceil"
+ ],
+ "execution_count": 1,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Using TensorFlow backend.\n"
+ ],
+ "name": "stderr"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "0jjw4SuNC2O5",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "a4d45e38-2569-41de-e9ed-e9c69e458aa9"
+ },
+ "cell_type": "code",
+ "source": [
+ "drive.mount(\"/content/nsuprotivniy/\")\n",
+ "model_path = \"/content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/model\"\n",
+ "data_path = \"/content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_evaluation/cropped\""
+ ],
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Drive already mounted at /content/nsuprotivniy/; to attempt to forcibly remount, call drive.mount(\"/content/nsuprotivniy/\", force_remount=True).\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "r60C8qz0IPup",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "output_path = \"/content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_evaluation/result\"\n",
+ "if (not exists(output_path)):\n",
+ " mkdir(output_path)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "Ta0P4O-gDUIM",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "class Generator():\n",
+ " def __init__(self, data_path, batch_size=8):\n",
+ " files = glob(join(data_path, \"*.npy\"))\n",
+ " self.batches = np.array_split(files, ceil(len(files) / batch_size))\n",
+ " \n",
+ " def len(self):\n",
+ " return len(self.batches)\n",
+ " \n",
+ " def get_batch(self, idx):\n",
+ " batch = self.batches[idx]\n",
+ " X = np.array([np.load(path) for path in batch])\n",
+ " file_names = [path.split(\"/\")[-1].split(\".npy\")[0] for path in batch]\n",
+ " return X, file_names\n",
+ " "
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "u72bKPhSG5BO",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "gen = Generator(data_path)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "W2Ue5JZ9793t",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 139
+ },
+ "outputId": "e870a799-eeab-4973-f5b9-da2e7fe8b445"
+ },
+ "cell_type": "code",
+ "source": [
+ "with open(join(model_path, 'model.json'), 'r') as f:\n",
+ " loaded_model_json = f.read()\n",
+ "model = model_from_json(loaded_model_json)\n",
+ "model.load_weights(join(model_path, \"model.h5\"))"
+ ],
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Colocations handled automatically by placer.\n",
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "awYN474EGDAi",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 16133
+ },
+ "outputId": "56a7414f-eb99-425d-af0b-745a547226dd"
+ },
+ "cell_type": "code",
+ "source": [
+ "for i in range(gen.len()):\n",
+ " X, file_names = gen.get_batch(i)\n",
+ " predicted = model.predict(X, verbose=1)\n",
+ " with open(join(output_path, \"prediction_result.txt\"), \"a\") as f:\n",
+ " for file, proba in zip(file_names, predicted):\n",
+ " f.write(\"{}; {}\\n\".format(file, proba))"
+ ],
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "8/8 [==============================] - 3s 388ms/step\n",
+ "8/8 [==============================] - 0s 4ms/step\n",
+ "8/8 [==============================] - 0s 4ms/step\n",
+ "8/8 [==============================] - 0s 4ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 7ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "8/8 [==============================] - 0s 6ms/step\n",
+ "7/7 [==============================] - 1s 87ms/step\n",
+ "7/7 [==============================] - 0s 7ms/step\n",
+ "7/7 [==============================] - 0s 7ms/step\n",
+ "7/7 [==============================] - 0s 7ms/step\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "KY_PXVhNKWi6",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ ""
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/nn.ipynb b/nn.ipynb
new file mode 100644
index 0000000..a12dd72
--- /dev/null
+++ b/nn.ipynb
@@ -0,0 +1,1198 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "nn.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "accelerator": "GPU"
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "tOU8ff_RJ7zY",
+ "colab_type": "code",
+ "outputId": "700c8464-a175-4003-92d1-3783ba4b1207",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 323
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pip install git+https://github.com/rcmalli/keras-vggface.git"
+ ],
+ "execution_count": 1,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Collecting git+https://github.com/rcmalli/keras-vggface.git\n",
+ " Cloning https://github.com/rcmalli/keras-vggface.git to /tmp/pip-req-build-y0sg0zwu\n",
+ "Requirement already satisfied: numpy>=1.9.1 in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (1.16.3)\n",
+ "Requirement already satisfied: scipy>=0.14 in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (1.2.1)\n",
+ "Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (2.8.0)\n",
+ "Requirement already satisfied: pillow in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (4.3.0)\n",
+ "Requirement already satisfied: keras in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (2.2.4)\n",
+ "Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (1.12.0)\n",
+ "Requirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from keras-vggface==0.5) (3.13)\n",
+ "Requirement already satisfied: olefile in /usr/local/lib/python3.6/dist-packages (from pillow->keras-vggface==0.5) (0.46)\n",
+ "Requirement already satisfied: keras-applications>=1.0.6 in /usr/local/lib/python3.6/dist-packages (from keras->keras-vggface==0.5) (1.0.7)\n",
+ "Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from keras->keras-vggface==0.5) (1.0.9)\n",
+ "Building wheels for collected packages: keras-vggface\n",
+ " Building wheel for keras-vggface (setup.py) ... \u001b[?25ldone\n",
+ "\u001b[?25h Stored in directory: /tmp/pip-ephem-wheel-cache-nxlkny61/wheels/36/07/46/06c25ce8e9cd396dabe151ea1d8a2bc28dafcb11321c1f3a6d\n",
+ "Successfully built keras-vggface\n",
+ "Installing collected packages: keras-vggface\n",
+ "Successfully installed keras-vggface-0.5\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ZfPNLVe9JoyO",
+ "colab_type": "code",
+ "outputId": "7c0bd369-3e86-4bb5-9f23-11b96433193e",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from keras.engine import Model\n",
+ "from keras.layers import Flatten, Dense, Input, Dropout\n",
+ "from keras_vggface.vggface import VGGFace\n",
+ "from keras.utils import Sequence\n",
+ "from keras.callbacks import ModelCheckpoint\n",
+ "from keras.optimizers import Adam\n",
+ "import tensorflow as tf\n",
+ "from keras import backend as K"
+ ],
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Using TensorFlow backend.\n"
+ ],
+ "name": "stderr"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "-W3_Na-7Sx9u",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "import os\n",
+ "from glob import glob\n",
+ "import numpy as np\n",
+ "from google.colab import drive\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.model_selection import KFold"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "BbNfWXNVbEcE",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def auc(y_true, y_pred):\n",
+ " auc = tf.metrics.auc(y_true, y_pred)[1]\n",
+ " K.get_session().run(tf.local_variables_initializer())\n",
+ " return auc"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "mIG0AxdaKaUb",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def get_model():\n",
+ " vgg_model = VGGFace(include_top=False, input_shape=(224, 224, 3), model='resnet50')\n",
+ " vgg_model.trainable = False\n",
+ " last_layer = vgg_model.get_layer('avg_pool').output\n",
+ " x = Flatten(name='flatten')(last_layer)\n",
+ " x = Dense(2048, activation='relu', name='dense_relu')(x)\n",
+ " x = Dropout(0.5, seed=17)(x)\n",
+ " out = Dense(1, activation='sigmoid', name='classifier')(x)\n",
+ " custom_vgg_model = Model(vgg_model.input, out)\n",
+ " custom_vgg_model.compile(optimizer=Adam(lr=0.000001), loss='binary_crossentropy', metrics=[auc])\n",
+ " return custom_vgg_model"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "-Tq1VVX-kSQc",
+ "colab_type": "code",
+ "outputId": "429d6279-a69d-4cf3-803b-ab2a35a3839b",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 122
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "drive.mount(\"/content/nsuprotivniy/\")\n",
+ "data_path = \"/content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training\""
+ ],
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdocs.test%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.photos.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fpeopleapi.readonly&response_type=code\n",
+ "\n",
+ "Enter your authorization code:\n",
+ "··········\n",
+ "Mounted at /content/nsuprotivniy/\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "vC_FMBXsuYY7",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "class KfoldGenerator(): \n",
+ " def __init__(self, batch_size=32, folds=10, split=0.1, seed=17):\n",
+ " spoof_path = glob(os.path.join(data_path, \"spoof/cropped/*.npy\"))\n",
+ " real_path = glob(os.path.join(data_path, \"real/cropped/*.npy\"))\n",
+ " X = np.concatenate((spoof_path, real_path))\n",
+ " y = np.concatenate((np.ones(len(spoof_path)), np.zeros(len(real_path))))\n",
+ " \n",
+ " np.random.seed(seed)\n",
+ " ids = np.random.permutation(len(X))\n",
+ " \n",
+ " if len(X) % batch_size != 0:\n",
+ " to_add = np.random.choice(ids, -len(X) % batch_size)\n",
+ " ids = np.concatenate((ids, to_add))\n",
+ " \n",
+ " X, y = X[ids], y[ids]\n",
+ " \n",
+ " X_batches = np.array(np.split(X, len(X) // batch_size))\n",
+ " y_batches = np.array(np.split(y, len(X) // batch_size))\n",
+ " \n",
+ " X_train, X_test, y_train, y_test = train_test_split(X_batches, y_batches, \n",
+ " test_size=split, \n",
+ " random_state=seed)\n",
+ " self.test = X_test, y_test\n",
+ " self.train = X_train, y_train\n",
+ " \n",
+ " kfold = KFold(n_splits=folds, random_state=seed)\n",
+ " self.train_folds = [(X_batches[train], y_batches[train], \n",
+ " X_batches[test], y_batches[test]) \n",
+ " for train, test in kfold.split(X_batches, y_batches)]\n",
+ "\n",
+ " def get_test(self):\n",
+ " return self.test\n",
+ " \n",
+ " def get_train(self):\n",
+ " return self.train\n",
+ " \n",
+ " def get_train_folds(self):\n",
+ " return self.train_folds"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "CDOcZhKPZGqX",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "class Generator(Sequence): \n",
+ " def __init__(self, X_batches, y_batches):\n",
+ " self.X_batches = X_batches\n",
+ " self.y_batches = y_batches\n",
+ " \n",
+ " def __len__(self):\n",
+ " return len(self.X_batches)\n",
+ "\n",
+ " def __getitem__(self, idx):\n",
+ " X = np.array([np.load(path) for path in self.X_batches[idx]])\n",
+ " y = self.y_batches[idx]\n",
+ " return X, y"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "22gRJnAuNtOu",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "kfoldgenrator = KfoldGenerator()"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "4rfu8Fl8bfij",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "metrics_path = os.path.join(data_path, \"metrics\")\n",
+ "if (not os.path.exists(metrics_path)):\n",
+ " os.mkdir(metrics_path)\n",
+ "def save_metric_fold(metrics, i):\n",
+ " with open(os.path.join(metrics_path, str(i) + \"_metrics\"), \"w\") as f:\n",
+ " f.write(\"fold {}: loss {}, auc {}\".format(i, metrics[0], metrics[1]))\n",
+ " \n",
+ "def save_metric(metrics):\n",
+ " with open(os.path.join(metrics_path, \"metrics\"), \"w\") as f:\n",
+ " f.write(\"loss {}, auc {}\".format(metrics[0], metrics[1]))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "9KBbrZtrMlYt",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "checkpoints_path = os.path.join(data_path, \"checkpoints\")\n",
+ "if (not os.path.exists(checkpoints_path)):\n",
+ " os.mkdir(checkpoints_path)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "qW6sWfyD5t6j",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "development_model_weights_path = \"/content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_development/checkpoints/final_model_weights.h5\""
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "LbMXUENBaJC8",
+ "colab_type": "code",
+ "outputId": "3bb927cc-da63-485f-adbd-bd717b88c043",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 10730
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "for i, (X_train, y_train, X_test, y_test) in enumerate(kfoldgenrator.get_train_folds()):\n",
+ " checkpoint_filename = \"fold_\" + str(i) + \"_weights.h5\"\n",
+ " checkpoint = [ModelCheckpoint(os.path.join(checkpoints_path, checkpoint_filename), verbose=1, period=5)]\n",
+ " train_gen = Generator(X_train, y_train)\n",
+ " model = get_model()\n",
+ " model.load_weights(development_model_weights_path)\n",
+ " model.fit_generator(train_gen, epochs=50, verbose=1, callbacks=checkpoint)\n",
+ " test_gen = Generator(X_test, y_test)\n",
+ " metrics = model.evaluate_generator(test_gen, verbose=1)\n",
+ " print(\"fold {}: loss {}, auc {}\".format(i, metrics[0], metrics[1]))\n",
+ " save_metric_fold(metrics, i)"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Colocations handled automatically by placer.\n",
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n",
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/metrics_impl.py:526: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Use tf.cast instead.\n",
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/metrics_impl.py:788: div (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Deprecated in favor of operator or tf.math.divide.\n",
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Use tf.cast instead.\n",
+ "Epoch 1/50\n",
+ "234/234 [==============================] - 1559s 7s/step - loss: 0.4047 - auc: 0.7944\n",
+ "Epoch 2/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.2477 - auc: 0.8553\n",
+ "Epoch 3/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.1849 - auc: 0.8903\n",
+ "Epoch 4/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 0.1389 - auc: 0.9136\n",
+ "Epoch 5/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 0.1112 - auc: 0.9297\n",
+ "\n",
+ "Epoch 00005: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_0_weights.h5\n",
+ "Epoch 6/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0879 - auc: 0.9419\n",
+ "Epoch 7/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0646 - auc: 0.9516\n",
+ "Epoch 8/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0535 - auc: 0.9591\n",
+ "Epoch 9/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 0.0426 - auc: 0.9651\n",
+ "Epoch 10/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0337 - auc: 0.9699\n",
+ "\n",
+ "Epoch 00010: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_0_weights.h5\n",
+ "Epoch 11/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0248 - auc: 0.9739\n",
+ "Epoch 12/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 0.0189 - auc: 0.9771\n",
+ "Epoch 13/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0153 - auc: 0.9798\n",
+ "Epoch 14/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0110 - auc: 0.9820\n",
+ "Epoch 15/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0088 - auc: 0.9839\n",
+ "\n",
+ "Epoch 00015: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_0_weights.h5\n",
+ "Epoch 16/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0079 - auc: 0.9855\n",
+ "Epoch 17/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0054 - auc: 0.9869\n",
+ "Epoch 18/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0046 - auc: 0.9881\n",
+ "Epoch 19/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0031 - auc: 0.9891\n",
+ "Epoch 20/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0030 - auc: 0.9900\n",
+ "\n",
+ "Epoch 00020: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_0_weights.h5\n",
+ "Epoch 21/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0022 - auc: 0.9907\n",
+ "Epoch 22/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 0.0019 - auc: 0.9914\n",
+ "Epoch 23/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 0.0012 - auc: 0.9920\n",
+ "Epoch 24/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 0.0013 - auc: 0.9926\n",
+ "Epoch 25/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 0.0010 - auc: 0.9930\n",
+ "\n",
+ "Epoch 00025: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_0_weights.h5\n",
+ "Epoch 26/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 9.1743e-04 - auc: 0.9935\n",
+ "Epoch 27/50\n",
+ "234/234 [==============================] - 93s 396ms/step - loss: 7.3782e-04 - auc: 0.9939\n",
+ "Epoch 28/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 8.1779e-04 - auc: 0.9942\n",
+ "Epoch 29/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 6.2159e-04 - auc: 0.9945\n",
+ "Epoch 30/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 0.0023 - auc: 0.9948\n",
+ "\n",
+ "Epoch 00030: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_0_weights.h5\n",
+ "Epoch 31/50\n",
+ "234/234 [==============================] - 93s 396ms/step - loss: 0.0011 - auc: 0.9951\n",
+ "Epoch 32/50\n",
+ "234/234 [==============================] - 93s 396ms/step - loss: 3.9947e-04 - auc: 0.9953\n",
+ "Epoch 33/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 3.3343e-04 - auc: 0.9955\n",
+ "Epoch 34/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 3.2405e-04 - auc: 0.9957\n",
+ "Epoch 35/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 2.3265e-04 - auc: 0.9959\n",
+ "\n",
+ "Epoch 00035: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_0_weights.h5\n",
+ "Epoch 36/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 2.4904e-04 - auc: 0.9961\n",
+ "Epoch 37/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 1.8499e-04 - auc: 0.9963\n",
+ "Epoch 38/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 1.6885e-04 - auc: 0.9964\n",
+ "Epoch 39/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 1.3845e-04 - auc: 0.9966\n",
+ "Epoch 40/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 1.3331e-04 - auc: 0.9967\n",
+ "\n",
+ "Epoch 00040: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_0_weights.h5\n",
+ "Epoch 41/50\n",
+ "234/234 [==============================] - 93s 396ms/step - loss: 1.0963e-04 - auc: 0.9968\n",
+ "Epoch 42/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 8.6505e-05 - auc: 0.9969\n",
+ "Epoch 43/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 7.3728e-05 - auc: 0.9970\n",
+ "Epoch 44/50\n",
+ "234/234 [==============================] - 93s 396ms/step - loss: 7.4201e-05 - auc: 0.9971\n",
+ "Epoch 45/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 6.9862e-05 - auc: 0.9972\n",
+ "\n",
+ "Epoch 00045: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_0_weights.h5\n",
+ "Epoch 46/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 7.7530e-05 - auc: 0.9973\n",
+ "Epoch 47/50\n",
+ "234/234 [==============================] - 93s 396ms/step - loss: 5.9207e-05 - auc: 0.9974\n",
+ "Epoch 48/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 4.4979e-05 - auc: 0.9975\n",
+ "Epoch 49/50\n",
+ "234/234 [==============================] - 93s 396ms/step - loss: 3.5649e-05 - auc: 0.9976\n",
+ "Epoch 50/50\n",
+ "234/234 [==============================] - 93s 396ms/step - loss: 3.5014e-05 - auc: 0.9976\n",
+ "\n",
+ "Epoch 00050: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_0_weights.h5\n",
+ "26/26 [==============================] - 172s 7s/step\n",
+ "fold 0: loss 0.05345663371040989, auc 0.9976577758789062\n",
+ "Epoch 1/50\n",
+ "234/234 [==============================] - 105s 450ms/step - loss: 0.3993 - auc: 0.8017\n",
+ "Epoch 2/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.2495 - auc: 0.8600\n",
+ "Epoch 3/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.1864 - auc: 0.8942\n",
+ "Epoch 4/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 0.1433 - auc: 0.9163\n",
+ "Epoch 5/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.1173 - auc: 0.9317\n",
+ "\n",
+ "Epoch 00005: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_1_weights.h5\n",
+ "Epoch 6/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0907 - auc: 0.9435\n",
+ "Epoch 7/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0676 - auc: 0.9526\n",
+ "Epoch 8/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0550 - auc: 0.9597\n",
+ "Epoch 9/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0416 - auc: 0.9656\n",
+ "Epoch 10/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0347 - auc: 0.9704\n",
+ "\n",
+ "Epoch 00010: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_1_weights.h5\n",
+ "Epoch 11/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0277 - auc: 0.9742\n",
+ "Epoch 12/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0205 - auc: 0.9774\n",
+ "Epoch 13/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0158 - auc: 0.9800\n",
+ "Epoch 14/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 0.0117 - auc: 0.9822\n",
+ "Epoch 15/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0108 - auc: 0.9841\n",
+ "\n",
+ "Epoch 00015: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_1_weights.h5\n",
+ "Epoch 16/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0070 - auc: 0.9857\n",
+ "Epoch 17/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 0.0062 - auc: 0.9870\n",
+ "Epoch 18/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0046 - auc: 0.9882\n",
+ "Epoch 19/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 0.0042 - auc: 0.9892\n",
+ "Epoch 20/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0033 - auc: 0.9901\n",
+ "\n",
+ "Epoch 00020: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_1_weights.h5\n",
+ "Epoch 21/50\n",
+ "234/234 [==============================] - 99s 422ms/step - loss: 0.0025 - auc: 0.9909\n",
+ "Epoch 22/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0021 - auc: 0.9916\n",
+ "Epoch 23/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0016 - auc: 0.9922\n",
+ "Epoch 24/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 0.0017 - auc: 0.9927\n",
+ "Epoch 25/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0010 - auc: 0.9932\n",
+ "\n",
+ "Epoch 00025: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_1_weights.h5\n",
+ "Epoch 26/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 9.1487e-04 - auc: 0.9936\n",
+ "Epoch 27/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 7.0994e-04 - auc: 0.9940\n",
+ "Epoch 28/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 7.3509e-04 - auc: 0.9943\n",
+ "Epoch 29/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 6.9396e-04 - auc: 0.9946\n",
+ "Epoch 30/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 5.1206e-04 - auc: 0.9949\n",
+ "\n",
+ "Epoch 00030: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_1_weights.h5\n",
+ "Epoch 31/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 4.5211e-04 - auc: 0.9952\n",
+ "Epoch 32/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 3.3646e-04 - auc: 0.9954\n",
+ "Epoch 33/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 3.1145e-04 - auc: 0.9956\n",
+ "Epoch 34/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 3.4156e-04 - auc: 0.9958\n",
+ "Epoch 35/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 0.0021 - auc: 0.9960\n",
+ "\n",
+ "Epoch 00035: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_1_weights.h5\n",
+ "Epoch 36/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 2.2282e-04 - auc: 0.9962\n",
+ "Epoch 37/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 2.1054e-04 - auc: 0.9964\n",
+ "Epoch 38/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 2.2835e-04 - auc: 0.9965\n",
+ "Epoch 39/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 2.2173e-04 - auc: 0.9966\n",
+ "Epoch 40/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 1.3623e-04 - auc: 0.9968\n",
+ "\n",
+ "Epoch 00040: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_1_weights.h5\n",
+ "Epoch 41/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 1.0305e-04 - auc: 0.9969\n",
+ "Epoch 42/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 9.9379e-05 - auc: 0.9970\n",
+ "Epoch 43/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 7.2551e-05 - auc: 0.9971\n",
+ "Epoch 44/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 8.6218e-05 - auc: 0.9972\n",
+ "Epoch 45/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 8.1533e-05 - auc: 0.9973\n",
+ "\n",
+ "Epoch 00045: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_1_weights.h5\n",
+ "Epoch 46/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 6.7234e-05 - auc: 0.9974\n",
+ "Epoch 47/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 4.7711e-05 - auc: 0.9975\n",
+ "Epoch 48/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 5.0250e-05 - auc: 0.9976\n",
+ "Epoch 49/50\n",
+ "234/234 [==============================] - 93s 397ms/step - loss: 3.5307e-05 - auc: 0.9976\n",
+ "Epoch 50/50\n",
+ "234/234 [==============================] - 93s 398ms/step - loss: 3.3972e-05 - auc: 0.9977\n",
+ "\n",
+ "Epoch 00050: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_1_weights.h5\n",
+ "26/26 [==============================] - 6s 239ms/step\n",
+ "fold 1: loss 0.027462114161223256, auc 0.9977249847008631\n",
+ "Epoch 1/50\n",
+ "234/234 [==============================] - 108s 462ms/step - loss: 0.4162 - auc: 0.7980\n",
+ "Epoch 2/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.2418 - auc: 0.8554\n",
+ "Epoch 3/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.1918 - auc: 0.8895\n",
+ "Epoch 4/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.1455 - auc: 0.9125\n",
+ "Epoch 5/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.1107 - auc: 0.9291\n",
+ "\n",
+ "Epoch 00005: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_2_weights.h5\n",
+ "Epoch 6/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0887 - auc: 0.9415\n",
+ "Epoch 7/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0675 - auc: 0.9511\n",
+ "Epoch 8/50\n",
+ "234/234 [==============================] - 93s 400ms/step - loss: 0.0570 - auc: 0.9587\n",
+ "Epoch 9/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0459 - auc: 0.9645\n",
+ "Epoch 10/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0318 - auc: 0.9693\n",
+ "\n",
+ "Epoch 00010: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_2_weights.h5\n",
+ "Epoch 11/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0262 - auc: 0.9733\n",
+ "Epoch 12/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0211 - auc: 0.9765\n",
+ "Epoch 13/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0137 - auc: 0.9792\n",
+ "Epoch 14/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0114 - auc: 0.9816\n",
+ "Epoch 15/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0096 - auc: 0.9835\n",
+ "\n",
+ "Epoch 00015: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_2_weights.h5\n",
+ "Epoch 16/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0078 - auc: 0.9851\n",
+ "Epoch 17/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0051 - auc: 0.9865\n",
+ "Epoch 18/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0046 - auc: 0.9877\n",
+ "Epoch 19/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0033 - auc: 0.9888\n",
+ "Epoch 20/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0035 - auc: 0.9897\n",
+ "\n",
+ "Epoch 00020: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_2_weights.h5\n",
+ "Epoch 21/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0028 - auc: 0.9905\n",
+ "Epoch 22/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0019 - auc: 0.9911\n",
+ "Epoch 23/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0016 - auc: 0.9918\n",
+ "Epoch 24/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0014 - auc: 0.9923\n",
+ "Epoch 25/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0011 - auc: 0.9928\n",
+ "\n",
+ "Epoch 00025: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_2_weights.h5\n",
+ "Epoch 26/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 8.1903e-04 - auc: 0.9933\n",
+ "Epoch 27/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 7.6905e-04 - auc: 0.9937\n",
+ "Epoch 28/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 6.2292e-04 - auc: 0.9940\n",
+ "Epoch 29/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 4.8801e-04 - auc: 0.9943\n",
+ "Epoch 30/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 4.1496e-04 - auc: 0.9946\n",
+ "\n",
+ "Epoch 00030: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_2_weights.h5\n",
+ "Epoch 31/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 4.2876e-04 - auc: 0.9949\n",
+ "Epoch 32/50\n",
+ "234/234 [==============================] - 93s 399ms/step - loss: 4.0756e-04 - auc: 0.9952\n",
+ "Epoch 33/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 3.8167e-04 - auc: 0.9954\n",
+ "Epoch 34/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 2.1926e-04 - auc: 0.9956\n",
+ "Epoch 35/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 2.0344e-04 - auc: 0.9958\n",
+ "\n",
+ "Epoch 00035: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_2_weights.h5\n",
+ "Epoch 36/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 1.7849e-04 - auc: 0.9960\n",
+ "Epoch 37/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 1.4291e-04 - auc: 0.9961\n",
+ "Epoch 38/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 1.1647e-04 - auc: 0.9963\n",
+ "Epoch 39/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 1.1042e-04 - auc: 0.9964\n",
+ "Epoch 40/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 1.1751e-04 - auc: 0.9966\n",
+ "\n",
+ "Epoch 00040: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_2_weights.h5\n",
+ "Epoch 41/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 9.2924e-05 - auc: 0.9967\n",
+ "Epoch 42/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 7.9436e-05 - auc: 0.9968\n",
+ "Epoch 43/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 6.2204e-05 - auc: 0.9969\n",
+ "Epoch 44/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 6.0378e-05 - auc: 0.9970\n",
+ "Epoch 45/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 5.7170e-05 - auc: 0.9971\n",
+ "\n",
+ "Epoch 00045: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_2_weights.h5\n",
+ "Epoch 46/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 4.1680e-05 - auc: 0.9972\n",
+ "Epoch 47/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 4.9780e-05 - auc: 0.9973\n",
+ "Epoch 48/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0017 - auc: 0.9974\n",
+ "Epoch 49/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 2.0211e-04 - auc: 0.9975\n",
+ "Epoch 50/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 1.1563e-04 - auc: 0.9975\n",
+ "\n",
+ "Epoch 00050: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_2_weights.h5\n",
+ "26/26 [==============================] - 7s 263ms/step\n",
+ "fold 2: loss 0.0746288702100803, auc 0.9975460332173568\n",
+ "Epoch 1/50\n",
+ "234/234 [==============================] - 112s 477ms/step - loss: 0.4019 - auc: 0.8137\n",
+ "Epoch 2/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.2563 - auc: 0.8599\n",
+ "Epoch 3/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.1838 - auc: 0.8934\n",
+ "Epoch 4/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.1413 - auc: 0.9156\n",
+ "Epoch 5/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.1106 - auc: 0.9317\n",
+ "\n",
+ "Epoch 00005: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_3_weights.h5\n",
+ "Epoch 6/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0853 - auc: 0.9436\n",
+ "Epoch 7/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0693 - auc: 0.9530\n",
+ "Epoch 8/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0535 - auc: 0.9602\n",
+ "Epoch 9/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0429 - auc: 0.9660\n",
+ "Epoch 10/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0317 - auc: 0.9707\n",
+ "\n",
+ "Epoch 00010: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_3_weights.h5\n",
+ "Epoch 11/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0237 - auc: 0.9746\n",
+ "Epoch 12/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0185 - auc: 0.9777\n",
+ "Epoch 13/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0132 - auc: 0.9804\n",
+ "Epoch 14/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0110 - auc: 0.9826\n",
+ "Epoch 15/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0093 - auc: 0.9845\n",
+ "\n",
+ "Epoch 00015: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_3_weights.h5\n",
+ "Epoch 16/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0074 - auc: 0.9860\n",
+ "Epoch 17/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0057 - auc: 0.9874\n",
+ "Epoch 18/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0043 - auc: 0.9885\n",
+ "Epoch 19/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0034 - auc: 0.9895\n",
+ "Epoch 20/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0030 - auc: 0.9904\n",
+ "\n",
+ "Epoch 00020: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_3_weights.h5\n",
+ "Epoch 21/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0023 - auc: 0.9911\n",
+ "Epoch 22/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0015 - auc: 0.9918\n",
+ "Epoch 23/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0015 - auc: 0.9924\n",
+ "Epoch 24/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0011 - auc: 0.9929\n",
+ "Epoch 25/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0013 - auc: 0.9934\n",
+ "\n",
+ "Epoch 00025: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_3_weights.h5\n",
+ "Epoch 26/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0015 - auc: 0.9938\n",
+ "Epoch 27/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0011 - auc: 0.9942\n",
+ "Epoch 28/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0015 - auc: 0.9945\n",
+ "Epoch 29/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 5.9158e-04 - auc: 0.9948\n",
+ "Epoch 30/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 6.7748e-04 - auc: 0.9951\n",
+ "\n",
+ "Epoch 00030: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_3_weights.h5\n",
+ "Epoch 31/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 4.4648e-04 - auc: 0.9953\n",
+ "Epoch 32/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 3.5678e-04 - auc: 0.9956\n",
+ "Epoch 33/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 2.5998e-04 - auc: 0.9958\n",
+ "Epoch 34/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 3.1401e-04 - auc: 0.9960\n",
+ "Epoch 35/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 1.9684e-04 - auc: 0.9962\n",
+ "\n",
+ "Epoch 00035: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_3_weights.h5\n",
+ "Epoch 36/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 1.9185e-04 - auc: 0.9963\n",
+ "Epoch 37/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 1.7784e-04 - auc: 0.9965\n",
+ "Epoch 38/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 1.7804e-04 - auc: 0.9966\n",
+ "Epoch 39/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 0.0021 - auc: 0.9967\n",
+ "Epoch 40/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 1.8218e-04 - auc: 0.9969\n",
+ "\n",
+ "Epoch 00040: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_3_weights.h5\n",
+ "Epoch 41/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 0.0015 - auc: 0.9970\n",
+ "Epoch 42/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 8.9440e-04 - auc: 0.9971\n",
+ "Epoch 43/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 1.8174e-04 - auc: 0.9972\n",
+ "Epoch 44/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 1.0804e-04 - auc: 0.9973\n",
+ "Epoch 45/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 8.2299e-05 - auc: 0.9974\n",
+ "\n",
+ "Epoch 00045: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_3_weights.h5\n",
+ "Epoch 46/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 8.6688e-05 - auc: 0.9975\n",
+ "Epoch 47/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 8.1349e-05 - auc: 0.9976\n",
+ "Epoch 48/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 6.5113e-05 - auc: 0.9976\n",
+ "Epoch 49/50\n",
+ "234/234 [==============================] - 94s 400ms/step - loss: 4.7904e-05 - auc: 0.9977\n",
+ "Epoch 50/50\n",
+ "234/234 [==============================] - 94s 401ms/step - loss: 4.6713e-05 - auc: 0.9978\n",
+ "\n",
+ "Epoch 00050: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_3_weights.h5\n",
+ "26/26 [==============================] - 8s 314ms/step\n",
+ "fold 3: loss 0.07951100156011447, auc 0.9977883490232321\n",
+ "Epoch 1/50\n",
+ "234/234 [==============================] - 115s 493ms/step - loss: 0.4067 - auc: 0.7950\n",
+ "Epoch 2/50\n",
+ "234/234 [==============================] - 94s 402ms/step - loss: 0.2535 - auc: 0.8580\n",
+ "Epoch 3/50\n",
+ "234/234 [==============================] - 94s 402ms/step - loss: 0.1866 - auc: 0.8927\n",
+ "Epoch 4/50\n",
+ "234/234 [==============================] - 94s 402ms/step - loss: 0.1435 - auc: 0.9152\n",
+ "Epoch 5/50\n",
+ "234/234 [==============================] - 94s 402ms/step - loss: 0.1104 - auc: 0.9311\n",
+ "\n",
+ "Epoch 00005: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_4_weights.h5\n",
+ "Epoch 6/50\n",
+ "234/234 [==============================] - 95s 405ms/step - loss: 0.0865 - auc: 0.9431\n",
+ "Epoch 7/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0698 - auc: 0.9526\n",
+ "Epoch 8/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0527 - auc: 0.9598\n",
+ "Epoch 9/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0398 - auc: 0.9658\n",
+ "Epoch 10/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0343 - auc: 0.9704\n",
+ "\n",
+ "Epoch 00010: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_4_weights.h5\n",
+ "Epoch 11/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0245 - auc: 0.9743\n",
+ "Epoch 12/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0184 - auc: 0.9775\n",
+ "Epoch 13/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0154 - auc: 0.9801\n",
+ "Epoch 14/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0114 - auc: 0.9823\n",
+ "Epoch 15/50\n",
+ "234/234 [==============================] - 94s 402ms/step - loss: 0.0091 - auc: 0.9842\n",
+ "\n",
+ "Epoch 00015: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_4_weights.h5\n",
+ "Epoch 16/50\n",
+ "234/234 [==============================] - 94s 404ms/step - loss: 0.0069 - auc: 0.9858\n",
+ "Epoch 17/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0066 - auc: 0.9871\n",
+ "Epoch 18/50\n",
+ "234/234 [==============================] - 94s 404ms/step - loss: 0.0040 - auc: 0.9883\n",
+ "Epoch 19/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0038 - auc: 0.9893\n",
+ "Epoch 20/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0028 - auc: 0.9902\n",
+ "\n",
+ "Epoch 00020: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_4_weights.h5\n",
+ "Epoch 21/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0026 - auc: 0.9909\n",
+ "Epoch 22/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0020 - auc: 0.9916\n",
+ "Epoch 23/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0018 - auc: 0.9922\n",
+ "Epoch 24/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0016 - auc: 0.9927\n",
+ "Epoch 25/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 0.0011 - auc: 0.9932\n",
+ "\n",
+ "Epoch 00025: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_4_weights.h5\n",
+ "Epoch 26/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 7.3292e-04 - auc: 0.9936\n",
+ "Epoch 27/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 6.9921e-04 - auc: 0.9940\n",
+ "Epoch 28/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 5.8972e-04 - auc: 0.9943\n",
+ "Epoch 29/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 4.7306e-04 - auc: 0.9946\n",
+ "Epoch 30/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 5.3571e-04 - auc: 0.9949\n",
+ "\n",
+ "Epoch 00030: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_4_weights.h5\n",
+ "Epoch 31/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 3.8764e-04 - auc: 0.9952\n",
+ "Epoch 32/50\n",
+ "234/234 [==============================] - 94s 402ms/step - loss: 3.2417e-04 - auc: 0.9954\n",
+ "Epoch 33/50\n",
+ "234/234 [==============================] - 94s 403ms/step - loss: 9.7436e-04 - auc: 0.9956\n",
+ "Epoch 34/50\n",
+ "234/234 [==============================] - 96s 412ms/step - loss: 3.4386e-04 - auc: 0.9958\n",
+ "Epoch 35/50\n",
+ "234/234 [==============================] - 95s 405ms/step - loss: 3.1186e-04 - auc: 0.9960\n",
+ "\n",
+ "Epoch 00035: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_4_weights.h5\n",
+ "Epoch 36/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 1.7844e-04 - auc: 0.9962\n",
+ "Epoch 37/50\n",
+ "234/234 [==============================] - 95s 408ms/step - loss: 1.6001e-04 - auc: 0.9964\n",
+ "Epoch 38/50\n",
+ "234/234 [==============================] - 95s 405ms/step - loss: 1.4782e-04 - auc: 0.9965\n",
+ "Epoch 39/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 1.0797e-04 - auc: 0.9966\n",
+ "Epoch 40/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 1.1337e-04 - auc: 0.9968\n",
+ "\n",
+ "Epoch 00040: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_4_weights.h5\n",
+ "Epoch 41/50\n",
+ "234/234 [==============================] - 95s 405ms/step - loss: 1.0681e-04 - auc: 0.9969\n",
+ "Epoch 42/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 1.0354e-04 - auc: 0.9970\n",
+ "Epoch 43/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 6.9421e-05 - auc: 0.9971\n",
+ "Epoch 44/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 7.0720e-05 - auc: 0.9972\n",
+ "Epoch 45/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 4.3716e-05 - auc: 0.9973\n",
+ "\n",
+ "Epoch 00045: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_4_weights.h5\n",
+ "Epoch 46/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 5.3220e-05 - auc: 0.9974\n",
+ "Epoch 47/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 3.7273e-05 - auc: 0.9975\n",
+ "Epoch 48/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 3.4107e-05 - auc: 0.9976\n",
+ "Epoch 49/50\n",
+ "234/234 [==============================] - 95s 405ms/step - loss: 3.6918e-05 - auc: 0.9976\n",
+ "Epoch 50/50\n",
+ "234/234 [==============================] - 95s 406ms/step - loss: 3.0900e-05 - auc: 0.9977\n",
+ "\n",
+ "Epoch 00050: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/fold_4_weights.h5\n",
+ "26/26 [==============================] - 10s 388ms/step\n",
+ "fold 4: loss 0.07480747299009985, auc 0.997711202273002\n",
+ "Epoch 1/50\n",
+ "234/234 [==============================] - 121s 517ms/step - loss: 0.4093 - auc: 0.7951\n",
+ "Epoch 2/50\n",
+ " 63/234 [=======>......................] - ETA: 1:09 - loss: 0.2562 - auc: 0.8375Buffered data was truncated after reaching the output size limit."
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "S_xR37tueCy1",
+ "colab_type": "code",
+ "outputId": "408cb5fc-1749-432c-d2f9-bdd3b3dea47b",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 2400
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "X_train, y_train = kfoldgenrator.get_train()\n",
+ "X_test, y_test = kfoldgenrator.get_test()\n",
+ "checkpoint_filename = \"final_model_weights.h5\"\n",
+ "checkpoint = [ModelCheckpoint(os.path.join(checkpoints_path, checkpoint_filename), verbose=1, period=5)]\n",
+ "train_gen = Generator(X_train, y_train)\n",
+ "model = get_model()\n",
+ "model.load_weights(development_model_weights_path)\n",
+ "model.fit_generator(train_gen, epochs=50, verbose=1, callbacks=checkpoint)\n",
+ "test_gen = Generator(X_test, y_test)\n",
+ "metrics = model.evaluate_generator(test_gen, verbose=1)\n",
+ "print(\"loss {}, auc {}\".format(metrics[0], metrics[1]))\n",
+ "save_metric(metrics)"
+ ],
+ "execution_count": 13,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Colocations handled automatically by placer.\n",
+ "Downloading data from https://github.com/rcmalli/keras-vggface/releases/download/v2.0/rcmalli_vggface_tf_notop_resnet50.h5\n",
+ "94699520/94694792 [==============================] - 4s 0us/step\n",
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n",
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/metrics_impl.py:526: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Use tf.cast instead.\n",
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/metrics_impl.py:788: div (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Deprecated in favor of operator or tf.math.divide.\n",
+ "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
+ "Instructions for updating:\n",
+ "Use tf.cast instead.\n",
+ "Epoch 1/50\n",
+ "35/35 [==============================] - 457s 13s/step - loss: 4.6447 - auc: 1.0000\n",
+ "Epoch 2/50\n",
+ "35/35 [==============================] - 13s 384ms/step - loss: 2.4504 - auc: 1.0000\n",
+ "Epoch 3/50\n",
+ "35/35 [==============================] - 14s 387ms/step - loss: 1.1981 - auc: 1.0000\n",
+ "Epoch 4/50\n",
+ "35/35 [==============================] - 14s 391ms/step - loss: 0.5911 - auc: 1.0000\n",
+ "Epoch 5/50\n",
+ "35/35 [==============================] - 14s 392ms/step - loss: 0.3545 - auc: 1.0000\n",
+ "\n",
+ "Epoch 00005: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/final_model_weights.h5\n",
+ "Epoch 6/50\n",
+ "35/35 [==============================] - 14s 392ms/step - loss: 0.1792 - auc: 1.0000\n",
+ "Epoch 7/50\n",
+ "35/35 [==============================] - 14s 392ms/step - loss: 0.1134 - auc: 1.0000\n",
+ "Epoch 8/50\n",
+ "35/35 [==============================] - 14s 395ms/step - loss: 0.0957 - auc: 1.0000\n",
+ "Epoch 9/50\n",
+ "35/35 [==============================] - 14s 396ms/step - loss: 0.0820 - auc: 1.0000\n",
+ "Epoch 10/50\n",
+ "35/35 [==============================] - 14s 399ms/step - loss: 0.0598 - auc: 1.0000\n",
+ "\n",
+ "Epoch 00010: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/final_model_weights.h5\n",
+ "Epoch 11/50\n",
+ "35/35 [==============================] - 14s 400ms/step - loss: 0.0484 - auc: 1.0000\n",
+ "Epoch 12/50\n",
+ "35/35 [==============================] - 14s 401ms/step - loss: 0.0383 - auc: 1.0000\n",
+ "Epoch 13/50\n",
+ "35/35 [==============================] - 14s 402ms/step - loss: 0.0359 - auc: 1.0000\n",
+ "Epoch 14/50\n",
+ "35/35 [==============================] - 14s 404ms/step - loss: 0.0307 - auc: 1.0000\n",
+ "Epoch 15/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0233 - auc: 1.0000\n",
+ "\n",
+ "Epoch 00015: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/final_model_weights.h5\n",
+ "Epoch 16/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0197 - auc: 1.0000\n",
+ "Epoch 17/50\n",
+ "35/35 [==============================] - 14s 402ms/step - loss: 0.0176 - auc: 1.0000\n",
+ "Epoch 18/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0170 - auc: 1.0000\n",
+ "Epoch 19/50\n",
+ "35/35 [==============================] - 14s 404ms/step - loss: 0.0133 - auc: 1.0000\n",
+ "Epoch 20/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0119 - auc: 1.0000\n",
+ "\n",
+ "Epoch 00020: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/final_model_weights.h5\n",
+ "Epoch 21/50\n",
+ "35/35 [==============================] - 14s 405ms/step - loss: 0.0125 - auc: 1.0000\n",
+ "Epoch 22/50\n",
+ "35/35 [==============================] - 14s 404ms/step - loss: 0.0146 - auc: 1.0000\n",
+ "Epoch 23/50\n",
+ "35/35 [==============================] - 14s 406ms/step - loss: 0.0118 - auc: 1.0000\n",
+ "Epoch 24/50\n",
+ "35/35 [==============================] - 14s 406ms/step - loss: 0.0097 - auc: 1.0000\n",
+ "Epoch 25/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0078 - auc: 1.0000\n",
+ "\n",
+ "Epoch 00025: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/final_model_weights.h5\n",
+ "Epoch 26/50\n",
+ "35/35 [==============================] - 14s 401ms/step - loss: 0.0089 - auc: 1.0000\n",
+ "Epoch 27/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0055 - auc: 1.0000\n",
+ "Epoch 28/50\n",
+ "35/35 [==============================] - 14s 404ms/step - loss: 0.0084 - auc: 1.0000\n",
+ "Epoch 29/50\n",
+ "35/35 [==============================] - 14s 404ms/step - loss: 0.0063 - auc: 1.0000\n",
+ "Epoch 30/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0059 - auc: 1.0000\n",
+ "\n",
+ "Epoch 00030: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/final_model_weights.h5\n",
+ "Epoch 31/50\n",
+ "35/35 [==============================] - 14s 402ms/step - loss: 0.0044 - auc: 1.0000\n",
+ "Epoch 32/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0050 - auc: 1.0000\n",
+ "Epoch 33/50\n",
+ "35/35 [==============================] - 14s 405ms/step - loss: 0.0050 - auc: 1.0000\n",
+ "Epoch 34/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0050 - auc: 1.0000\n",
+ "Epoch 35/50\n",
+ "35/35 [==============================] - 14s 404ms/step - loss: 0.0040 - auc: 1.0000\n",
+ "\n",
+ "Epoch 00035: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/final_model_weights.h5\n",
+ "Epoch 36/50\n",
+ "35/35 [==============================] - 14s 402ms/step - loss: 0.0046 - auc: 1.0000\n",
+ "Epoch 37/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0040 - auc: 1.0000\n",
+ "Epoch 38/50\n",
+ "35/35 [==============================] - 14s 404ms/step - loss: 0.0028 - auc: 1.0000\n",
+ "Epoch 39/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0034 - auc: 1.0000\n",
+ "Epoch 40/50\n",
+ "35/35 [==============================] - 14s 404ms/step - loss: 0.0041 - auc: 1.0000\n",
+ "\n",
+ "Epoch 00040: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/final_model_weights.h5\n",
+ "Epoch 41/50\n",
+ "35/35 [==============================] - 14s 401ms/step - loss: 0.0032 - auc: 1.0000\n",
+ "Epoch 42/50\n",
+ "35/35 [==============================] - 14s 402ms/step - loss: 0.0034 - auc: 1.0000\n",
+ "Epoch 43/50\n",
+ "35/35 [==============================] - 14s 402ms/step - loss: 0.0028 - auc: 1.0000\n",
+ "Epoch 44/50\n",
+ "35/35 [==============================] - 14s 402ms/step - loss: 0.0029 - auc: 1.0000\n",
+ "Epoch 45/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0022 - auc: 1.0000\n",
+ "\n",
+ "Epoch 00045: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/final_model_weights.h5\n",
+ "Epoch 46/50\n",
+ "35/35 [==============================] - 14s 402ms/step - loss: 0.0022 - auc: 1.0000\n",
+ "Epoch 47/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0025 - auc: 1.0000\n",
+ "Epoch 48/50\n",
+ "35/35 [==============================] - 14s 403ms/step - loss: 0.0019 - auc: 1.0000\n",
+ "Epoch 49/50\n",
+ "35/35 [==============================] - 14s 404ms/step - loss: 0.0022 - auc: 1.0000\n",
+ "Epoch 50/50\n",
+ "35/35 [==============================] - 14s 402ms/step - loss: 0.0025 - auc: 1.0000\n",
+ "\n",
+ "Epoch 00050: saving model to /content/nsuprotivniy/My Drive/Colab Notebooks/data/LCC_FASD/LCC_FASD_training/checkpoints/final_model_weights.h5\n",
+ "4/4 [==============================] - 51s 13s/step\n",
+ "loss 0.00043802203435916454, auc 0.9999999701976776\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "S7cTG_E08VvT",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "model_path = os.path.join(data_path, \"model\")\n",
+ "if (not os.path.exists(model_path)):\n",
+ " os.mkdir(model_path)\n",
+ " \n",
+ "model_json = model.to_json()\n",
+ "with open(os.path.join(model_path, \"model.json\"), \"w\") as json_file:\n",
+ " json_file.write(model_json)\n",
+ " \n",
+ "model.save_weights(os.path.join(model_path, \"model.h5\"))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "v-OAhIKRrdY9",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "\n"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 16acaa5..5454c37 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,20 +26,13 @@
org.apache.maven.plugins
maven-jar-plugin
-
-
-
- pritykovskaya.WordCount
-
-
-
org.apache.maven.plugins
maven-compiler-plugin
- 1.6
- 1.6
+ 1.8
+ 1.8
diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c39be6e
--- /dev/null
+++ b/src/main/java/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: pritykovskaya.WordCount
+
diff --git a/src/main/java/nsuprotivniy/Main.java b/src/main/java/nsuprotivniy/Main.java
new file mode 100644
index 0000000..62b487b
--- /dev/null
+++ b/src/main/java/nsuprotivniy/Main.java
@@ -0,0 +1,110 @@
+package nsuprotivniy;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.util.Tool;
+import org.apache.hadoop.util.ToolRunner;
+
+public class Main {
+ private static final String FILE_REPORT = "report.txt";
+ public static void main(String[] args) throws Exception {
+ String inputDirectory = args[0];
+ String wordcountDirectory = "output-wordcount";
+ String orderedDirectory = "output-ordered";
+ String task2OutputDirectory = "output-7-word";
+ String task3OutputDirectory = "output-stopwordscount";
+ String namesDirectory = "output-names";
+ String namesOrderedDirectory = "output-ordered-names";
+ String task4OutputDirectory = "output-5-name";
+ String stopWords = args[1];
+
+
+ Report task1 = new Report("Задание 1")
+ .addAction(
+ "Считаем wordcount",
+ calculateTaskTime(new WordCount(), inputDirectory, wordcountDirectory)
+ );
+
+
+ Report task2 = new Report("Задание 2")
+ .addAction(
+ "Сортируем слова",
+ calculateTaskTime(new SortWordCount(), wordcountDirectory, orderedDirectory)
+ )
+ .addAction(
+ "Вывод только 7-го слова",
+ calculateTaskTime(new TopNames(), orderedDirectory, task2OutputDirectory, "6")
+ );
+
+ Report task3 = new Report("Задание 3")
+ .addAction(
+ "Считаем процент стоп-слов",
+ calculateTaskTime(new StopWordsCount(), wordcountDirectory, task3OutputDirectory, "-stopwords", stopWords)
+ );
+
+
+ Report task4 = new Report("Задание 4")
+ .addAction(
+ "Находим имена и кладем их в папку",
+ calculateTaskTime(new NameCount(), wordcountDirectory, namesDirectory)
+ )
+ .addAction(
+ "Сортируем имена по убыванию частоты",
+ calculateTaskTime(new SortWordCount(), namesDirectory, namesOrderedDirectory)
+ )
+ .addAction(
+ "Выводим только 5-е имя (5 => 0 to 4)",
+ calculateTaskTime(new TopNames(), namesOrderedDirectory, task4OutputDirectory, "4")
+ );
+
+
+ Files.write(
+ Paths.get(FILE_REPORT),
+ String.join(
+ "\r\n\r\n",
+ task1.getString(),
+ task2.getString(),
+ task3.getString(),
+ task4.getString()
+ ).getBytes()
+ );
+ }
+
+ private static double calculateTaskTime(Tool tool, String... parameters) throws Exception{
+ long from = System.currentTimeMillis();
+
+ ToolRunner.run(new Configuration(), tool, parameters);
+
+ long to = System.currentTimeMillis();
+ return (to - from)/(double)1000;
+ }
+
+ private static class Report {
+ private List stringList;
+
+ Report(String name) {
+ stringList = new ArrayList<>();
+ stringList.add(name);
+ }
+
+ Report addAction(String description, double time){
+ stringList.add(formatTimeWithText(time, description));
+
+ return this;
+ }
+
+ private String formatTimeWithText(double time, String text){
+ return String.format("%.3f", time) + "s" + " - " + text;
+ }
+
+ public String getString() throws IOException {
+ return String.join("\r\n", stringList);
+ }
+ }
+}
diff --git a/src/main/java/nsuprotivniy/NameCount.java b/src/main/java/nsuprotivniy/NameCount.java
new file mode 100644
index 0000000..d848528
--- /dev/null
+++ b/src/main/java/nsuprotivniy/NameCount.java
@@ -0,0 +1,107 @@
+package nsuprotivniy;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.mapreduce.Counter;
+import org.apache.hadoop.mapreduce.Mapper;
+import org.apache.hadoop.mapreduce.Reducer;
+import org.apache.hadoop.conf.Configured;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
+import org.apache.hadoop.mapreduce.Job;
+import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
+import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
+import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
+import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
+import org.apache.hadoop.util.GenericOptionsParser;
+import org.apache.hadoop.util.Tool;
+import org.apache.hadoop.util.ToolRunner;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+public class NameCount extends Configured implements Tool {
+
+ static class MyMapper extends Mapper