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": [ + "\"Open" + ] + }, + { + "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": [ + "\"Open" + ] + }, + { + "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": [ + "\"Open" + ] + }, + { + "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{ + + @Override + public void map(Object key, Text value, Context context + ) throws IOException, InterruptedException { + String[] pair = value.toString().split("\t"); + context.write(new Text(pair[0].toLowerCase()), new TextWithCountWriteble(pair[0], Integer.valueOf(pair[1]))); + + } + } + + static class MyReducer extends Reducer{ + + private Pattern namePattern = Pattern.compile("[A-Z][a-z0-9]*"); + + + @Override + protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { + int sumAllForms = 0; + int rightFormCount = 0; + String rightFormText = null; + + for (final TextWithCountWriteble value : values){ + sumAllForms += value.getCount(); + Matcher matcher = namePattern.matcher(value.getText()); + if (matcher.matches()) { + rightFormText = value.getText(); + rightFormCount += value.getCount(); + } + } + + if (rightFormText == null){ + return; + } + + if (rightFormCount / (double)sumAllForms >= 0.995){ + context.write(new Text(rightFormText), new IntWritable(rightFormCount)); + } + } + } + + @Override + public int run(String[] args) throws Exception { + Configuration conf = new Configuration(); + GenericOptionsParser optionParser = new GenericOptionsParser(conf, args); + String[] remainingArgs = optionParser.getRemainingArgs(); + if (remainingArgs.length != 2) { + System.err.println("Usage: NameCount "); + System.exit(2); + } + Job job = Job.getInstance(conf, "name count"); + job.setJarByClass(NameCount.class); + + job.setInputFormatClass(TextInputFormat.class); + job.setOutputFormatClass(TextOutputFormat.class); + + job.setMapOutputKeyClass(Text.class); + job.setMapOutputValueClass(TextWithCountWriteble.class); + + job.setMapperClass(MyMapper.class); + job.setReducerClass(MyReducer.class); + + job.setOutputKeyClass(Text.class); + job.setOutputValueClass(IntWritable.class); + + FileInputFormat.addInputPath(job, new Path(args[0])); + FileOutputFormat.setOutputPath(job, new Path(args[1])); + + return job.waitForCompletion(true) ? 0 : 1; + } + + public static void main(String[] args) throws Exception{ + final int returnCode = ToolRunner.run(new Configuration(), new NameCount(), args); + System.exit(returnCode); + + } +} + diff --git a/src/main/java/nsuprotivniy/SortWordCount.java b/src/main/java/nsuprotivniy/SortWordCount.java new file mode 100644 index 0000000..03422ff --- /dev/null +++ b/src/main/java/nsuprotivniy/SortWordCount.java @@ -0,0 +1,83 @@ +package nsuprotivniy; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.WritableComparator; +import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapreduce.Job; +import org.apache.hadoop.mapreduce.Mapper; +import org.apache.hadoop.mapreduce.Reducer; +import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; +import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; +import org.apache.hadoop.util.GenericOptionsParser; +import org.apache.hadoop.util.ToolRunner; + +import java.io.IOException; + + +public class SortWordCount extends WordCount { + + static class InverseMapper extends Mapper { + + @Override + protected void map(Object key, Text value, Context context) throws InterruptedException, IOException { + String[] pair = value.toString().split("\t"); + context.write(new IntWritable(Integer.valueOf(pair[1])), new Text(pair[0])); + } + } + + public static class MyDescFreqComparator extends WritableComparator { + protected MyDescFreqComparator() { + super(IntWritable.class); + } + + @Override + public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) { + return -Integer.compare(readInt(b1, s1), readInt(b2, s2)); + } + } + + public static class InverseReducer + extends Reducer { + + public void reduce(IntWritable key, Iterable values, + Context context + ) throws IOException, InterruptedException { + for (Text value : values) { + context.write(key, value); + } + } + } + + @Override + public int run(final String[] args) throws Exception { + Configuration conf = new Configuration(); + GenericOptionsParser optionParser = new GenericOptionsParser(conf, args); + String[] remainingArgs = optionParser.getRemainingArgs(); + if (remainingArgs.length != 2) { + System.err.println("Usage: wordcount "); + System.exit(2); + } + Job job = Job.getInstance(conf, "sort word count"); + job.setJarByClass(SortWordCount.class); + job.setMapperClass(InverseMapper.class); + job.setReducerClass(InverseReducer.class); + job.setSortComparatorClass(MyDescFreqComparator.class); + job.setOutputKeyClass(IntWritable.class); + job.setOutputValueClass(Text.class); + FileInputFormat.addInputPath(job, new Path(args[0])); + FileOutputFormat.setOutputPath(job, new Path(args[1])); + + + if (job.waitForCompletion(true)) + return 0; + else + return 1; + } + + public static void main(String[] args) throws Exception { + final int exitCode = ToolRunner.run(new SortWordCount(), args); + System.exit(exitCode); + } +} \ No newline at end of file diff --git a/src/main/java/nsuprotivniy/StopWordsCount.java b/src/main/java/nsuprotivniy/StopWordsCount.java new file mode 100644 index 0000000..75f1c6c --- /dev/null +++ b/src/main/java/nsuprotivniy/StopWordsCount.java @@ -0,0 +1,122 @@ +package nsuprotivniy; + +import org.apache.hadoop.io.LongWritable; +import org.apache.hadoop.mapreduce.Mapper; +import org.apache.hadoop.conf.Configuration; +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.Counters; +import org.apache.hadoop.mapreduce.Job; +import org.apache.hadoop.mapreduce.Reducer; +import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; +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.*; +import java.net.URI; +import java.nio.file.Files; +import java.util.HashSet; +import java.util.SortedSet; +import java.util.StringTokenizer; +import java.util.TreeSet; + + +public class StopWordsCount extends Configured implements Tool { + + public enum MATCH_COUNTER { + STOP_WORD, + TOTAL + } + + public static class StopWordCountMapper + extends Mapper { + private final HashSet stopWords = new HashSet<>(); + + + @Override + public void setup(Context context) throws IOException, + InterruptedException { + Configuration conf = context.getConfiguration(); + URI[] patternsURIs = Job.getInstance(conf).getCacheFiles(); + for (URI patternsURI : patternsURIs) { + Path patternsPath = new Path(patternsURI.getPath()); + String patternsFileName = patternsPath.getName().toString(); + loadStopWords(patternsFileName); + } + } + + @Override + protected void map(LongWritable key, Text value, Context context) + throws IOException, InterruptedException { + StringTokenizer tokenizer = new StringTokenizer(value.toString()); + + while (tokenizer.hasMoreTokens()) { + String trim = tokenizer.nextToken().trim(); + context.getCounter(MATCH_COUNTER.TOTAL).increment(1); + if (stopWords.contains(trim)) { + context.getCounter(MATCH_COUNTER.STOP_WORD).increment(1); + } + } + } + + + private void loadStopWords(String path) throws IOException { + BufferedReader file = new BufferedReader(new FileReader(path)); + String stop_word; + while ((stop_word = file.readLine()) != null) { + stopWords.add(stop_word); + } + } + } + + + + + public int run(final String[] args) throws Exception { + Configuration conf = new Configuration(); + GenericOptionsParser optionParser = new GenericOptionsParser(conf, args); + String[] remainingArgs = optionParser.getRemainingArgs(); + if (remainingArgs.length != 4) { + System.err.println("Usage: StopWordsCount [-stopwords StopWordsFile]"); + System.exit(2); + } + Job job = Job.getInstance(conf, "stop words count"); + job.setJarByClass(StopWordsCount.class); + + TextInputFormat.addInputPath(job, new Path(args[0])); + TextOutputFormat.setOutputPath(job, new Path(args[1])); + job.setInputFormatClass(TextInputFormat.class); + job.setOutputFormatClass(TextOutputFormat.class); + + job.addCacheFile(new Path(args[3]).toUri()); + + job.setMapperClass(StopWordCountMapper.class); + job.setOutputKeyClass(Text.class); + job.setOutputValueClass(IntWritable.class); + + + int exit = job.waitForCompletion(true) ? 0 : 1; + Counters counter = job.getCounters(); + + + long stop_words = counter.findCounter(MATCH_COUNTER.STOP_WORD).getValue(); + long total = counter.findCounter(MATCH_COUNTER.TOTAL).getValue(); + long percentage = stop_words / total; + + System.out.println("Stop words: " + stop_words); + System.out.println("Total: " + total); + System.out.println("Percentage: " + percentage); + + return exit; + } + + public static void main(String[] args) throws Exception { + final int exitCode = ToolRunner.run(new StopWordsCount(), args); + System.exit(exitCode); + } +} + diff --git a/src/main/java/nsuprotivniy/TextWithCountWriteble.java b/src/main/java/nsuprotivniy/TextWithCountWriteble.java new file mode 100644 index 0000000..578e3cc --- /dev/null +++ b/src/main/java/nsuprotivniy/TextWithCountWriteble.java @@ -0,0 +1,76 @@ +package nsuprotivniy; + +import org.apache.hadoop.io.WritableComparable; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class TextWithCountWriteble implements WritableComparable, Cloneable { + private String text; + private int count; + + @Override + public void write(DataOutput dataOutput) throws IOException { + dataOutput.writeInt(count); + dataOutput.writeUTF(text); + } + + @Override + public void readFields(DataInput dataInput) throws IOException { + count = dataInput.readInt(); + text = dataInput.readUTF(); + } + + public String getText() { + return text; + } + + public int getCount() { + return count; + } + + TextWithCountWriteble(){ + // should be + } + + TextWithCountWriteble(String text, int count) { + this.text = text; + this.count = count; + } + + @Override + public boolean equals(Object other) { + if (other == null){ + return false; + } + if (other == this){ + return true; + } + if (!(other instanceof TextWithCountWriteble)){ + return false; + } + TextWithCountWriteble otherMyClass = (TextWithCountWriteble)other; + if (otherMyClass.count != count){ + return false; + } + if (!otherMyClass.text.equals(text)){ + return false; + } + return true; + } + + @Override + protected TextWithCountWriteble clone() { + return new TextWithCountWriteble(text, count); + } + + @Override + public int compareTo(TextWithCountWriteble o) { + if (equals(o)){ + return 0; + } + int intCompare = Integer.compare(count, o.count); + return (intCompare == 0) ? Integer.compare(this.hashCode(), o.hashCode()) : -intCompare; + } +} diff --git a/src/main/java/nsuprotivniy/TopNames.java b/src/main/java/nsuprotivniy/TopNames.java new file mode 100644 index 0000000..b26920c --- /dev/null +++ b/src/main/java/nsuprotivniy/TopNames.java @@ -0,0 +1,117 @@ +package nsuprotivniy; + +import java.io.IOException; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.apache.hadoop.conf.Configuration; +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.Mapper; +import org.apache.hadoop.mapreduce.Reducer; +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.Tool; +import org.apache.hadoop.util.ToolRunner; + +public class TopNames extends Configured implements Tool { + private static int valueNumber; + private static IntWritable ONE = new IntWritable(1); + + static class MyMapper extends Mapper{ + private int count; + + @Override + protected void setup(Context context) throws IOException, InterruptedException { + super.setup(context); + count = 0; + } + + @Override + protected void map(Object key, Text value, Context context) throws IOException, InterruptedException { + final String line = value.toString(); + + int pos = line.indexOf(0x09); + + int inputCount = Integer.valueOf(line.substring(0, pos)); + String inputString = line.substring(pos+1); + + if (count <= valueNumber){ + context.write(ONE, new TextWithCountWriteble(inputString, inputCount)); + count++; + } + } + } + + static class MyReducer extends Reducer{ + private SortedSet setOfTextWithCount; + + @Override + protected void setup(Context context) throws IOException, InterruptedException { + super.setup(context); + setOfTextWithCount = new TreeSet<>(); + } + + @Override + protected void reduce(IntWritable key, Iterable values, Context context) throws IOException, InterruptedException { + values.forEach((textWithCountWriteble -> { + setOfTextWithCount.add(textWithCountWriteble.clone()); + if (setOfTextWithCount.size() > valueNumber + 1){ + setOfTextWithCount.remove(setOfTextWithCount.last()); + } + })); + } + + @Override + protected void cleanup(Context context) throws IOException, InterruptedException { + super.cleanup(context); + + int i = 0; + for (TextWithCountWriteble textWithCountWriteble : setOfTextWithCount){ + if (i == valueNumber){ + context.write(new Text(textWithCountWriteble.getText()), new IntWritable(textWithCountWriteble.getCount())); + break; + } + i++; + } + } + } + + @Override + public int run(String[] args) throws Exception { + final Configuration conf = this.getConf(); + final Job job = new Job(conf, "TopNames"); + + valueNumber = Integer.valueOf(args[2]); + + job.setJarByClass(TopNames.class); + + job.setInputFormatClass(TextInputFormat.class); + job.setOutputFormatClass(TextOutputFormat.class); + + job.setMapperClass(MyMapper.class); + job.setReducerClass(MyReducer.class); + + job.setMapOutputKeyClass(IntWritable.class); + job.setMapOutputValueClass(TextWithCountWriteble.class); + + job.setOutputKeyClass(Text.class); + job.setOutputValueClass(IntWritable.class); + + FileInputFormat.addInputPath(job, new Path(args[0])); + FileOutputFormat.setOutputPath(job, new Path(args[1])); + + return job.waitForCompletion(true) ? 0 : 1; + } + + public static void main(String[] args) throws Exception{ + final int returnCode = ToolRunner.run(new Configuration(), new TopNames(), args); + System.exit(returnCode); + + } +} \ No newline at end of file diff --git a/src/main/java/nsuprotivniy/WordCount.java b/src/main/java/nsuprotivniy/WordCount.java new file mode 100644 index 0000000..11eeece --- /dev/null +++ b/src/main/java/nsuprotivniy/WordCount.java @@ -0,0 +1,113 @@ +package nsuprotivniy; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.net.URI; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.StringTokenizer; + +import org.apache.hadoop.conf.Configuration; +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.Mapper; +import org.apache.hadoop.mapreduce.Reducer; +import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; +import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; +import org.apache.hadoop.mapreduce.Counter; +import org.apache.hadoop.util.GenericOptionsParser; +import org.apache.hadoop.util.Tool; +import org.apache.hadoop.util.ToolRunner; + + +public class WordCount extends Configured implements Tool { + + public static class TokenizerMapper + extends Mapper{ + + static enum CountersEnum { INPUT_WORDS } + + private final static IntWritable one = new IntWritable(1); + private Text word = new Text(); + + private Set patternsToSkip = new HashSet(); + + @Override + public void setup(Context context) { + patternsToSkip.add("[!\"#$%&'()*+,./:;<=>?@\\^_`{|}~-“”—‘]"); + } + + + @Override + public void map(Object key, Text value, Context context + ) throws IOException, InterruptedException { + String line = value.toString(); + for (String pattern : patternsToSkip) { + line = line.replaceAll(pattern, ""); + } + StringTokenizer itr = new StringTokenizer(line); + while (itr.hasMoreTokens()) { + word.set(itr.nextToken()); + context.write(word, one); + Counter counter = context.getCounter(CountersEnum.class.getName(), + CountersEnum.INPUT_WORDS.toString()); + counter.increment(1); + } + } + } + + + + public static class IntSumReducer + extends Reducer { + private IntWritable result = new IntWritable(); + + public void reduce(Text key, Iterable values, + Context context + ) throws IOException, InterruptedException { + int sum = 0; + for (IntWritable val : values) { + sum += val.get(); + } + result.set(sum); + context.write(key, result); + } + } + + @Override + public int run(String[] args) throws Exception { + Configuration conf = new Configuration(); + GenericOptionsParser optionParser = new GenericOptionsParser(conf, args); + String[] remainingArgs = optionParser.getRemainingArgs(); + if (remainingArgs.length != 2) { + System.err.println("Usage: wordcount "); + System.exit(2); + } + Job job = Job.getInstance(conf, "word count"); + job.setJarByClass(WordCount.class); + job.setMapperClass(TokenizerMapper.class); + //job.setCombinerClass(IntSumReducer.class); + job.setReducerClass(IntSumReducer.class); + job.setOutputKeyClass(Text.class); + job.setOutputValueClass(IntWritable.class); + + FileInputFormat.addInputPath(job, new Path(args[0])); + FileOutputFormat.setOutputPath(job, new Path(args[1])); + + if (job.waitForCompletion(true)) + return 0; + else + return 1; + } + + public static void main(String[] args) throws Exception { + final int exitCode = ToolRunner.run(new WordCount(), args); + System.exit(exitCode); + } +} \ No newline at end of file