diff --git "a/Toxicity_Model.ipynb" "b/Toxicity_Model.ipynb" new file mode 100644--- /dev/null +++ "b/Toxicity_Model.ipynb" @@ -0,0 +1,2124 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU", + "gpuClass": "standard" + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "#**Install Dependencies and Bring in Data**\n", + "\n", + "---" + ], + "metadata": { + "id": "gqv0BvJ2kCWE" + } + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "WOYQ9b6teSZ9" + }, + "outputs": [], + "source": [ + "import os\n", + "import pandas as pd\n", + "import tensorflow as tf\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "source": [ + "df = pd.read_csv('/content/drive/MyDrive/Machine Learning /train.csv/train.csv')" + ], + "metadata": { + "id": "JKNNXSjHe-3g" + }, + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "df.head()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "id": "2e5_OlW3j290", + "outputId": "631fad8d-6890-457c-98f5-482594b4f04d" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " id comment_text toxic \\\n", + "0 0000997932d777bf Explanation\\nWhy the edits made under my usern... 0 \n", + "1 000103f0d9cfb60f D'aww! He matches this background colour I'm s... 0 \n", + "2 000113f07ec002fd Hey man, I'm really not trying to edit war. It... 0 \n", + "3 0001b41b1c6bb37e \"\\nMore\\nI can't make any real suggestions on ... 0 \n", + "4 0001d958c54c6e35 You, sir, are my hero. Any chance you remember... 0 \n", + "\n", + " severe_toxic obscene threat insult identity_hate \n", + "0 0 0 0 0 0 \n", + "1 0 0 0 0 0 \n", + "2 0 0 0 0 0 \n", + "3 0 0 0 0 0 \n", + "4 0 0 0 0 0 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idcomment_texttoxicsevere_toxicobscenethreatinsultidentity_hate
00000997932d777bfExplanation\\nWhy the edits made under my usern...000000
1000103f0d9cfb60fD'aww! He matches this background colour I'm s...000000
2000113f07ec002fdHey man, I'm really not trying to edit war. It...000000
30001b41b1c6bb37e\"\\nMore\\nI can't make any real suggestions on ...000000
40001d958c54c6e35You, sir, are my hero. Any chance you remember...000000
\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "
\n", + " " + ] + }, + "metadata": {}, + "execution_count": 3 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# **Preprocess**\n", + "---" + ], + "metadata": { + "id": "RRsn9otikY01" + } + }, + { + "cell_type": "code", + "source": [ + "from tensorflow.keras.layers import TextVectorization" + ], + "metadata": { + "id": "cE8kVZaVj-gT" + }, + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "X = df['comment_text']\n", + "y = df[df.columns[2:]].values" + ], + "metadata": { + "id": "3Cfbwlf3kqer" + }, + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "MAX_FEATURES = 200000 # number of words in the vocab" + ], + "metadata": { + "id": "FeM4E_Chksjy" + }, + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "vectorizer = TextVectorization(max_tokens=MAX_FEATURES,\n", + " output_sequence_length=1800,\n", + " output_mode='int')" + ], + "metadata": { + "id": "UGlqjqWTkynx" + }, + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "vectorizer.adapt(X.values)" + ], + "metadata": { + "id": "0drRLdYSkzQD" + }, + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "vectorized_text = vectorizer(X.values)" + ], + "metadata": { + "id": "ClWHSsy-lTFT" + }, + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#MCSHBAP - map, chache, shuffle, batch, prefetch from_tensor_slices, list_file\n", + "dataset = tf.data.Dataset.from_tensor_slices((vectorized_text, y))\n", + "dataset = dataset.cache()\n", + "dataset = dataset.shuffle(160000)\n", + "dataset = dataset.batch(16)\n", + "dataset = dataset.prefetch(8) # helps bottlenecks" + ], + "metadata": { + "id": "Ux3BCdRBlmfh" + }, + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "train = dataset.take(int(len(dataset)*.7))\n", + "val = dataset.skip(int(len(dataset)*.7)).take(int(len(dataset)*.2))\n", + "test = dataset.skip(int(len(dataset)*.9)).take(int(len(dataset)*.1))" + ], + "metadata": { + "id": "fyrudqWilnIy" + }, + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# **Create Sequential Model**\n", + "___" + ], + "metadata": { + "id": "4z56mY2hlqsm" + } + }, + { + "cell_type": "code", + "source": [ + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import LSTM, Dropout, Bidirectional, Dense, Embedding" + ], + "metadata": { + "id": "I5u-ewnllo6C" + }, + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model = Sequential()\n", + "# Create the embedding layer \n", + "model.add(Embedding(MAX_FEATURES+1, 32))\n", + "# Bidirectional LSTM Layer\n", + "model.add(Bidirectional(LSTM(32, activation='tanh')))\n", + "# Feature extractor Fully connected layers\n", + "model.add(Dense(128, activation='relu'))\n", + "model.add(Dense(256, activation='relu'))\n", + "model.add(Dense(128, activation='relu'))\n", + "# Final layer \n", + "model.add(Dense(6, activation='sigmoid'))" + ], + "metadata": { + "id": "m6mMf2Gal0dZ" + }, + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model.compile(loss='BinaryCrossentropy', optimizer='Adam')" + ], + "metadata": { + "id": "S1xDvbMLl2wR" + }, + "execution_count": 14, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model.summary()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pSKbt7a3l3Ki", + "outputId": "4618f153-598c-437b-fb44-e472cc93e197" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " embedding (Embedding) (None, None, 32) 6400032 \n", + " \n", + " bidirectional (Bidirectiona (None, 64) 16640 \n", + " l) \n", + " \n", + " dense (Dense) (None, 128) 8320 \n", + " \n", + " dense_1 (Dense) (None, 256) 33024 \n", + " \n", + " dense_2 (Dense) (None, 128) 32896 \n", + " \n", + " dense_3 (Dense) (None, 6) 774 \n", + " \n", + "=================================================================\n", + "Total params: 6,491,686\n", + "Trainable params: 6,491,686\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "history = model.fit(train, epochs=10, validation_data=val)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bvZ8x16Ml7xq", + "outputId": "2cd78ece-07bd-4db8-c0b7-dddc9ab97171" + }, + "execution_count": 21, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/10\n", + "6981/6981 [==============================] - 615s 88ms/step - loss: 0.0456 - val_loss: 0.0425\n", + "Epoch 2/10\n", + "6981/6981 [==============================] - 600s 86ms/step - loss: 0.0403 - val_loss: 0.0371\n", + "Epoch 3/10\n", + "6981/6981 [==============================] - 598s 86ms/step - loss: 0.0358 - val_loss: 0.0319\n", + "Epoch 4/10\n", + "6981/6981 [==============================] - 590s 85ms/step - loss: 0.0319 - val_loss: 0.0272\n", + "Epoch 5/10\n", + "6981/6981 [==============================] - 600s 86ms/step - loss: 0.0294 - val_loss: 0.0259\n", + "Epoch 6/10\n", + "6981/6981 [==============================] - 608s 87ms/step - loss: 0.0259 - val_loss: 0.0227\n", + "Epoch 7/10\n", + "6981/6981 [==============================] - 594s 85ms/step - loss: 0.0237 - val_loss: 0.0216\n", + "Epoch 8/10\n", + "6981/6981 [==============================] - 598s 86ms/step - loss: 0.0213 - val_loss: 0.0171\n", + "Epoch 9/10\n", + "6981/6981 [==============================] - 602s 86ms/step - loss: 0.0191 - val_loss: 0.0167\n", + "Epoch 10/10\n", + "6981/6981 [==============================] - 593s 85ms/step - loss: 0.0173 - val_loss: 0.0148\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from matplotlib import pyplot as plt" + ], + "metadata": { + "id": "w_B70alOl-Ti" + }, + "execution_count": 23, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "plt.figure(figsize=(8,5))\n", + "pd.DataFrame(history.history).plot()\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 447 + }, + "id": "FTuIOmgTl_Ky", + "outputId": "ebfa51d5-7357-4b5b-e659-83c98360fbb7" + }, + "execution_count": 24, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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34Tw8HBatGjBxIkTAfv6UsHBwYwcOZIxY8YYnE5OnTpFhQoV+P3332nbtq3RcUqlixcv0rRpUyZPnsz//d//ERYWxoQJE4yOVSqNGTOGtWvXsnr1aqOjCHD33XcTEBDA559/nrutR48euLu78+233xqYrHjTmZoblJmZSUxMDJGRkbnbzGYzkZGRREdHG5hM/pScnAyAr6+vwUlKr+HDh9OtW7c8/zsRY/z44480b96cXr16UaFCBZo0acJnn31mdKxSq3Xr1ixbtoy9e/cCsHXrVtasWUOXLl0MTla8lZoFLW+106dPk5OTQ0BAQJ7tAQEB7N6926BU8ier1cqoUaNo06YNDRs2NDpOqTRr1ixiY2PZtGmT0VEEOHjwIJ988gmjR4/m+eefZ9OmTTz55JO4uLgwePBgo+OVOmPGjCElJYW6detisVjIycnhjTfeoH///kZHK9ZUaqREGj58ONu3b2fNmjVGRymVjh49ylNPPcWSJUtwc3MzOo5gL/rNmzdn3LhxADRp0oTt27czZcoUlRoDfPfdd0yfPp0ZM2bQoEED4uLiGDVqFEFBQfp93ASVmhvk7++PxWIhMTExz/bExEQCAwMNSiUAI0aMYOHChaxatYrKlSsbHadUiomJISkpiaZNm+Zuy8nJYdWqVUycOJGMjAwsFouBCUufihUrUr9+/Tzb6tWrx/fff29QotLtmWeeYcyYMTzwwAMAhIaGcuTIEcaPH69ScxN0Tc0NcnFxoVmzZixbtix3m9VqZdmyZURERBiYrPSy2WyMGDGC+fPns3z5cqpVq2Z0pFKrU6dO/PHHH8TFxeU+mjdvTv/+/YmLi1OhMUCbNm3+NsXB3r17qVq1qkGJSre0tDTM5rx/gi0WC1ar1aBEJYPO1NyE0aNHM3jwYJo3b07Lli2ZMGECqampDBkyxOhopdLw4cOZMWMGP/zwA56eniQkJADg7e2Nu7u7welKF09Pz79dy+Th4YGfn5+ucTLI008/TevWrRk3bhy9e/dm48aNTJ06lalTpxodrVS65557eOONN6hSpQoNGjRgy5YtvP/++zz00ENGRyvebHJTPv74Y1uVKlVsLi4utpYtW9rWr19vdKRSC3D4mDZtmtHRxGaztWvXzvbUU08ZHaNU++mnn2wNGza0ubq62urWrWubOnWq0ZFKrZSUFNtTTz1lq1Klis3Nzc1WvXp123/+8x9bRkaG0dGKNc1TIyIiIiWCrqkRERGREkGlRkREREoElRoREREpEVRqREREpERQqREREZESQaVGRERESgSVGhERESkRVGpERESkRFCpERERkRJBpUZERERKBJUaERERKRFUakRERKRE+H9k0dMg8KuhEAAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# **Make Predictions**" + ], + "metadata": { + "id": "CnSrDQHuzi3R" + } + }, + { + "cell_type": "code", + "source": [ + "input_text = vectorizer('You freaking suck! I am going to kill you.')" + ], + "metadata": { + "id": "OhsNSC1wmB6C" + }, + "execution_count": 27, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "res = model.predict(np.expand_dims(input_text,0))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "d9qPTC2XXr0X", + "outputId": "9685fcfb-ccb3-45bf-ab75-62d13fe70fc3" + }, + "execution_count": 32, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "1/1 [==============================] - 0s 52ms/step\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "batch = test.as_numpy_iterator().next()" + ], + "metadata": { + "id": "P7Y43e0yYTRG" + }, + "execution_count": 29, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "batch_X, batch_Y = test.as_numpy_iterator().next()" + ], + "metadata": { + "id": "10iSHdgRYcfm" + }, + "execution_count": 30, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "(model.predict(batch_X) > 0.5).astype(int)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "w_tSWym6zq0o", + "outputId": "5d22c3b8-76ef-44ff-f60f-609531ed0618" + }, + "execution_count": 31, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "1/1 [==============================] - 0s 70ms/step\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [1, 0, 0, 0, 1, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [1, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0],\n", + " [1, 0, 0, 0, 1, 0],\n", + " [0, 0, 0, 0, 0, 0]])" + ] + }, + "metadata": {}, + "execution_count": 31 + } + ] + }, + { + "cell_type": "code", + "source": [ + "res.shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "CgzuIxNoaATf", + "outputId": "2ef3ca43-3fd0-4804-f417-8ddb9ace660b" + }, + "execution_count": 34, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(1, 6)" + ] + }, + "metadata": {}, + "execution_count": 34 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# **Evaluate Model**" + ], + "metadata": { + "id": "5z7YFpmeZwMA" + } + }, + { + "cell_type": "code", + "source": [ + "from tensorflow.keras.metrics import Precision, Recall, CategoricalAccuracy" + ], + "metadata": { + "id": "70QsRxZaZ0O_" + }, + "execution_count": 35, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "pre = Precision()\n", + "re = Recall()\n", + "acc = CategoricalAccuracy()" + ], + "metadata": { + "id": "RS74ej5faPIm" + }, + "execution_count": 36, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "for batch in test.as_numpy_iterator(): \n", + " # Unpack the batch \n", + " X_true, y_true = batch\n", + " # Make a prediction \n", + " yhat = model.predict(X_true)\n", + " \n", + " # Flatten the predictions\n", + " y_true = y_true.flatten()\n", + " yhat = yhat.flatten()\n", + " \n", + " pre.update_state(y_true, yhat)\n", + " re.update_state(y_true, yhat)\n", + " acc.update_state(y_true, yhat)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "UGexgMzCaRrl", + "outputId": "6eb20ff2-c88b-40d1-8543-6b2f65d78f8d" + }, + "execution_count": 37, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 60ms/step\n", + "1/1 [==============================] - 0s 61ms/step\n", + "1/1 [==============================] - 0s 62ms/step\n", + "1/1 [==============================] - 0s 60ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 86ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 64ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 81ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 75ms/step\n", + "1/1 [==============================] - 0s 134ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 82ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 86ms/step\n", + "1/1 [==============================] - 0s 91ms/step\n", + "1/1 [==============================] - 0s 100ms/step\n", + "1/1 [==============================] - 0s 97ms/step\n", + "1/1 [==============================] - 0s 79ms/step\n", + "1/1 [==============================] - 0s 86ms/step\n", + "1/1 [==============================] - 0s 80ms/step\n", + "1/1 [==============================] - 0s 94ms/step\n", + "1/1 [==============================] - 0s 109ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 81ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 85ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 88ms/step\n", + "1/1 [==============================] - 0s 126ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 104ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 80ms/step\n", + "1/1 [==============================] - 0s 80ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 78ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 78ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 76ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 78ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 86ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 62ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 61ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 64ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 48ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 49ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 50ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 80ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 80ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 80ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 81ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 97ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 81ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 60ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 61ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 63ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 62ms/step\n", + "1/1 [==============================] - 0s 80ms/step\n", + "1/1 [==============================] - 0s 76ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 75ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 78ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 76ms/step\n", + "1/1 [==============================] - 0s 88ms/step\n", + "1/1 [==============================] - 0s 80ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 75ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 75ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 86ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 78ms/step\n", + "1/1 [==============================] - 0s 78ms/step\n", + "1/1 [==============================] - 0s 83ms/step\n", + "1/1 [==============================] - 0s 75ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 61ms/step\n", + "1/1 [==============================] - 0s 61ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 61ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 103ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 60ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 63ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 60ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 89ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 125ms/step\n", + "1/1 [==============================] - 0s 111ms/step\n", + "1/1 [==============================] - 0s 88ms/step\n", + "1/1 [==============================] - 0s 130ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 81ms/step\n", + "1/1 [==============================] - 0s 120ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 77ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 64ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 62ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 63ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 76ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 87ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 84ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 73ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 74ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 63ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 60ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 63ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 61ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 51ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 57ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 56ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 53ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 52ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 80ms/step\n", + "1/1 [==============================] - 0s 71ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 65ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 76ms/step\n", + "1/1 [==============================] - 0s 84ms/step\n", + "1/1 [==============================] - 0s 77ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 66ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 67ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 70ms/step\n", + "1/1 [==============================] - 0s 72ms/step\n", + "1/1 [==============================] - 0s 68ms/step\n", + "1/1 [==============================] - 0s 89ms/step\n", + "1/1 [==============================] - 0s 77ms/step\n", + "1/1 [==============================] - 0s 69ms/step\n", + "1/1 [==============================] - 0s 77ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 59ms/step\n", + "1/1 [==============================] - 0s 58ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 55ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 54ms/step\n", + "1/1 [==============================] - 0s 60ms/step\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "print(f'Precision: {pre.result().numpy()}, Recall:{re.result().numpy()}, Accuracy:{acc.result().numpy()}')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "faVlx-4ta-ge", + "outputId": "b1da157a-ed10-42f0-a669-f0cbd0158915" + }, + "execution_count": 38, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Precision: 0.9168907999992371, Recall:0.9393772482872009, Accuracy:0.45235708355903625\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# **Test and Gradio**" + ], + "metadata": { + "id": "pW7w5xHqbJVJ" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install gradio jinja2" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "x5PdhjmLbNTO", + "outputId": "b41a84d4-5149-48fd-9828-fa8c75182bfc" + }, + "execution_count": 39, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting gradio\n", + " Downloading gradio-3.27.0-py3-none-any.whl (17.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m17.3/17.3 MB\u001b[0m \u001b[31m33.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: jinja2 in /usr/local/lib/python3.9/dist-packages (3.1.2)\n", + "Collecting ffmpy\n", + " Downloading ffmpy-0.3.0.tar.gz (4.8 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Collecting python-multipart\n", + " Downloading python_multipart-0.0.6-py3-none-any.whl (45 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m45.7/45.7 kB\u001b[0m \u001b[31m5.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: altair>=4.2.0 in /usr/local/lib/python3.9/dist-packages (from gradio) (4.2.2)\n", + "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.9/dist-packages (from gradio) (4.5.0)\n", + "Collecting websockets>=10.0\n", + " Downloading websockets-11.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (129 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m129.5/129.5 kB\u001b[0m \u001b[31m19.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting fastapi\n", + " Downloading fastapi-0.95.1-py3-none-any.whl (56 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.0/57.0 kB\u001b[0m \u001b[31m7.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: pillow in /usr/local/lib/python3.9/dist-packages (from gradio) (8.4.0)\n", + "Collecting pydub\n", + " Downloading pydub-0.25.1-py2.py3-none-any.whl (32 kB)\n", + "Requirement already satisfied: pandas in /usr/local/lib/python3.9/dist-packages (from gradio) (1.5.3)\n", + "Collecting uvicorn\n", + " Downloading uvicorn-0.21.1-py3-none-any.whl (57 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.8/57.8 kB\u001b[0m \u001b[31m6.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting mdit-py-plugins<=0.3.3\n", + " Downloading mdit_py_plugins-0.3.3-py3-none-any.whl (50 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m50.5/50.5 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.9/dist-packages (from gradio) (1.22.4)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.9/dist-packages (from gradio) (2.27.1)\n", + "Requirement already satisfied: markupsafe in /usr/local/lib/python3.9/dist-packages (from gradio) (2.1.2)\n", + "Collecting httpx\n", + " Downloading httpx-0.24.0-py3-none-any.whl (75 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m75.3/75.3 kB\u001b[0m \u001b[31m9.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: matplotlib in /usr/local/lib/python3.9/dist-packages (from gradio) (3.7.1)\n", + "Requirement already satisfied: pyyaml in /usr/local/lib/python3.9/dist-packages (from gradio) (6.0)\n", + "Collecting semantic-version\n", + " Downloading semantic_version-2.10.0-py2.py3-none-any.whl (15 kB)\n", + "Collecting huggingface-hub>=0.13.0\n", + " Downloading huggingface_hub-0.13.4-py3-none-any.whl (200 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m200.1/200.1 kB\u001b[0m \u001b[31m24.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: pydantic in /usr/local/lib/python3.9/dist-packages (from gradio) (1.10.7)\n", + "Collecting orjson\n", + " Downloading orjson-3.8.10-cp39-cp39-manylinux_2_28_x86_64.whl (140 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m140.5/140.5 kB\u001b[0m \u001b[31m19.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: markdown-it-py[linkify]>=2.0.0 in /usr/local/lib/python3.9/dist-packages (from gradio) (2.2.0)\n", + "Collecting aiofiles\n", + " Downloading aiofiles-23.1.0-py3-none-any.whl (14 kB)\n", + "Collecting gradio-client>=0.1.3\n", + " Downloading gradio_client-0.1.3-py3-none-any.whl (286 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m286.2/286.2 kB\u001b[0m \u001b[31m36.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting aiohttp\n", + " Downloading aiohttp-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.0/1.0 MB\u001b[0m \u001b[31m71.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: jsonschema>=3.0 in /usr/local/lib/python3.9/dist-packages (from altair>=4.2.0->gradio) (4.3.3)\n", + "Requirement already satisfied: toolz in /usr/local/lib/python3.9/dist-packages (from altair>=4.2.0->gradio) (0.12.0)\n", + "Requirement already satisfied: entrypoints in /usr/local/lib/python3.9/dist-packages (from altair>=4.2.0->gradio) (0.4)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.9/dist-packages (from gradio-client>=0.1.3->gradio) (2023.4.0)\n", + "Requirement already satisfied: packaging in /usr/local/lib/python3.9/dist-packages (from gradio-client>=0.1.3->gradio) (23.0)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.9/dist-packages (from huggingface-hub>=0.13.0->gradio) (3.11.0)\n", + "Requirement already satisfied: tqdm>=4.42.1 in /usr/local/lib/python3.9/dist-packages (from huggingface-hub>=0.13.0->gradio) (4.65.0)\n", + "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.9/dist-packages (from markdown-it-py[linkify]>=2.0.0->gradio) (0.1.2)\n", + "Collecting linkify-it-py<3,>=1\n", + " Downloading linkify_it_py-2.0.0-py3-none-any.whl (19 kB)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.9/dist-packages (from pandas->gradio) (2022.7.1)\n", + "Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.9/dist-packages (from pandas->gradio) (2.8.2)\n", + "Collecting frozenlist>=1.1.1\n", + " Downloading frozenlist-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (158 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m158.8/158.8 kB\u001b[0m \u001b[31m23.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting aiosignal>=1.1.2\n", + " Downloading aiosignal-1.3.1-py3-none-any.whl (7.6 kB)\n", + "Collecting async-timeout<5.0,>=4.0.0a3\n", + " Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB)\n", + "Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /usr/local/lib/python3.9/dist-packages (from aiohttp->gradio) (2.0.12)\n", + "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.9/dist-packages (from aiohttp->gradio) (22.2.0)\n", + "Collecting yarl<2.0,>=1.0\n", + " Downloading yarl-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (264 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m264.6/264.6 kB\u001b[0m \u001b[31m30.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting multidict<7.0,>=4.5\n", + " Downloading multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (114 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m114.2/114.2 kB\u001b[0m \u001b[31m17.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting starlette<0.27.0,>=0.26.1\n", + " Downloading starlette-0.26.1-py3-none-any.whl (66 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━���━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m66.9/66.9 kB\u001b[0m \u001b[31m9.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: sniffio in /usr/local/lib/python3.9/dist-packages (from httpx->gradio) (1.3.0)\n", + "Requirement already satisfied: certifi in /usr/local/lib/python3.9/dist-packages (from httpx->gradio) (2022.12.7)\n", + "Requirement already satisfied: idna in /usr/local/lib/python3.9/dist-packages (from httpx->gradio) (3.4)\n", + "Collecting httpcore<0.18.0,>=0.15.0\n", + " Downloading httpcore-0.17.0-py3-none-any.whl (70 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m70.6/70.6 kB\u001b[0m \u001b[31m9.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.9/dist-packages (from matplotlib->gradio) (0.11.0)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->gradio) (4.39.3)\n", + "Requirement already satisfied: importlib-resources>=3.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->gradio) (5.12.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->gradio) (1.4.4)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->gradio) (1.0.7)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->gradio) (3.0.9)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.9/dist-packages (from requests->gradio) (1.26.15)\n", + "Requirement already satisfied: click>=7.0 in /usr/local/lib/python3.9/dist-packages (from uvicorn->gradio) (8.1.3)\n", + "Collecting h11>=0.8\n", + " Downloading h11-0.14.0-py3-none-any.whl (58 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.3/58.3 kB\u001b[0m \u001b[31m6.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: anyio<5.0,>=3.0 in /usr/local/lib/python3.9/dist-packages (from httpcore<0.18.0,>=0.15.0->httpx->gradio) (3.6.2)\n", + "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.9/dist-packages (from importlib-resources>=3.2.0->matplotlib->gradio) (3.15.0)\n", + "Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /usr/local/lib/python3.9/dist-packages (from jsonschema>=3.0->altair>=4.2.0->gradio) (0.19.3)\n", + "Collecting uc-micro-py\n", + " Downloading uc_micro_py-1.0.1-py3-none-any.whl (6.2 kB)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.9/dist-packages (from python-dateutil>=2.8.1->pandas->gradio) (1.16.0)\n", + "Building wheels for collected packages: ffmpy\n", + " Building wheel for ffmpy (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for ffmpy: filename=ffmpy-0.3.0-py3-none-any.whl size=4707 sha256=e94f48120b5ca05595efa6cbd6f8f8ce90a967eae693132e827a03c78301a6e9\n", + " Stored in directory: /root/.cache/pip/wheels/91/e2/96/f676aa08bfd789328c6576cd0f1fde4a3d686703bb0c247697\n", + "Successfully built ffmpy\n", + "Installing collected packages: pydub, ffmpy, websockets, uc-micro-py, semantic-version, python-multipart, orjson, multidict, h11, frozenlist, async-timeout, aiofiles, yarl, uvicorn, starlette, mdit-py-plugins, linkify-it-py, huggingface-hub, httpcore, aiosignal, httpx, fastapi, aiohttp, gradio-client, gradio\n", + "Successfully installed aiofiles-23.1.0 aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 fastapi-0.95.1 ffmpy-0.3.0 frozenlist-1.3.3 gradio-3.27.0 gradio-client-0.1.3 h11-0.14.0 httpcore-0.17.0 httpx-0.24.0 huggingface-hub-0.13.4 linkify-it-py-2.0.0 mdit-py-plugins-0.3.3 multidict-6.0.4 orjson-3.8.10 pydub-0.25.1 python-multipart-0.0.6 semantic-version-2.10.0 starlette-0.26.1 uc-micro-py-1.0.1 uvicorn-0.21.1 websockets-11.0.1 yarl-1.8.2\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import tensorflow as tf\n", + "import gradio as gr" + ], + "metadata": { + "id": "ZwPDqkgAbU8u" + }, + "execution_count": 40, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model.save('toxicity_v1.h5')" + ], + "metadata": { + "id": "KlNW-JKabWmt" + }, + "execution_count": 50, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model = tf.keras.models.load_model('toxicity.h5')" + ], + "metadata": { + "id": "DitKOgDWbZLt" + }, + "execution_count": 42, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "input_str = vectorizer('hey i freaken hate you!')" + ], + "metadata": { + "id": "H1XCGS6aba99" + }, + "execution_count": 43, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "res = model.predict(np.expand_dims(input_str,0))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "p5QDQRu-bdZd", + "outputId": "64f04d46-c0cb-426c-e91d-090eb8e2036d" + }, + "execution_count": 44, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "1/1 [==============================] - 1s 826ms/step\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "res" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JQhwB3Y1bfQN", + "outputId": "fb157d97-ed44-41fe-94ad-cc17a60ee1ce" + }, + "execution_count": 45, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[0.7815291 , 0.00186047, 0.05773883, 0.00572707, 0.22479889,\n", + " 0.00985744]], dtype=float32)" + ] + }, + "metadata": {}, + "execution_count": 45 + } + ] + }, + { + "cell_type": "code", + "source": [ + "def score_comment(comment):\n", + " vectorized_comment = vectorizer([comment])\n", + " results = model.predict(vectorized_comment)\n", + " \n", + " text = ''\n", + " for idx, col in enumerate(df.columns[2:]):\n", + " text += '{}: {}\\n'.format(col, results[0][idx]>0.5)\n", + " \n", + " return text" + ], + "metadata": { + "id": "hluQiVBBbggN" + }, + "execution_count": 46, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "interface = gr.Interface(fn=score_comment, \n", + " inputs=gr.inputs.Textbox(lines=2, placeholder='Comment to score'),\n", + " outputs='text')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "eDleDQN_bjsW", + "outputId": "88248a84-11a7-4b5f-c8eb-1cf30b234292" + }, + "execution_count": 47, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.9/dist-packages/gradio/inputs.py:27: UserWarning: Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your component from gradio.components\n", + " warnings.warn(\n", + "/usr/local/lib/python3.9/dist-packages/gradio/deprecation.py:40: UserWarning: `optional` parameter is deprecated, and it has no effect\n", + " warnings.warn(value)\n", + "/usr/local/lib/python3.9/dist-packages/gradio/deprecation.py:40: UserWarning: `numeric` parameter is deprecated, and it has no effect\n", + " warnings.warn(value)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "interface.launch(share=True)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 591 + }, + "id": "lKmkHVLNbkSt", + "outputId": "5c6f80db-4592-4189-8798-26c68da61883" + }, + "execution_count": 48, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Colab notebook detected. To show errors in colab notebook, set debug=True in launch()\n", + "Running on public URL: https://4709f71f0201c331ce.gradio.live\n", + "\n", + "This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "
" + ] + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [] + }, + "metadata": {}, + "execution_count": 48 + } + ] + } + ] +} \ No newline at end of file