commit b680b806791a21e8d555c53b1d1e2d64bb627679 parent 1d79956eaccb660a8388c97a8eb97a338bf40759 Author: MTRNord <mtrnord1@gmail.com> Date: Sun, 25 Sep 2022 02:50:13 +0200 Find the epoch sweetspot Diffstat:
13 files changed, 43 insertions(+), 166 deletions(-)
diff --git a/logs/scalars/20220925-022749/train/events.out.tfevents.1664065669.DESKTOP-GS9C68O.5933.0.v2 b/logs/scalars/20220925-022749/train/events.out.tfevents.1664065669.DESKTOP-GS9C68O.5933.0.v2 Binary files differ. diff --git a/logs/scalars/20220925-022749/train/events.out.tfevents.1664066664.DESKTOP-GS9C68O.5933.2.v2 b/logs/scalars/20220925-022749/train/events.out.tfevents.1664066664.DESKTOP-GS9C68O.5933.2.v2 Binary files differ. diff --git a/logs/scalars/20220925-022749/validation/events.out.tfevents.1664065671.DESKTOP-GS9C68O.5933.1.v2 b/logs/scalars/20220925-022749/validation/events.out.tfevents.1664065671.DESKTOP-GS9C68O.5933.1.v2 Binary files differ. diff --git a/logs/scalars/20220925-022749/validation/events.out.tfevents.1664066665.DESKTOP-GS9C68O.5933.3.v2 b/logs/scalars/20220925-022749/validation/events.out.tfevents.1664066665.DESKTOP-GS9C68O.5933.3.v2 Binary files differ. diff --git a/models/spam_keras_1664066646.4526935/keras_metadata.pb b/models/spam_keras_1664066646.4526935/keras_metadata.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d616794cda647f4ec65de6de88189a70fa1e9ce72c0a3bd964fb411a1c3c8ad +size 12508 diff --git a/models/spam_keras_1664066646.4526935/saved_model.pb b/models/spam_keras_1664066646.4526935/saved_model.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b53ac9d1c24310d609266869153da43b0aaedc3725a0b541036c2697c989c66f +size 143705 diff --git a/models/spam_keras_1664066646.4526935/variables/variables.data-00000-of-00001 b/models/spam_keras_1664066646.4526935/variables/variables.data-00000-of-00001 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:456e8288c913b9d98dc9e363482926d3132e44259decb1ddbb5a90b13f16ab9c +size 201244 diff --git a/models/spam_keras_1664066646.4526935/variables/variables.index b/models/spam_keras_1664066646.4526935/variables/variables.index @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4881cf66a30a866a1f1a57ae147f29c89db7a4d341035309f4ca836feb9e74e0 +size 1636 diff --git a/models/spam_keras_1664066970.8563766/keras_metadata.pb b/models/spam_keras_1664066970.8563766/keras_metadata.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d616794cda647f4ec65de6de88189a70fa1e9ce72c0a3bd964fb411a1c3c8ad +size 12508 diff --git a/models/spam_keras_1664066970.8563766/saved_model.pb b/models/spam_keras_1664066970.8563766/saved_model.pb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45b6292361f51dcae9ba2053222922544ea58d0c0c4ac0ce5793691a663ac16c +size 143705 diff --git a/models/spam_keras_1664066970.8563766/variables/variables.data-00000-of-00001 b/models/spam_keras_1664066970.8563766/variables/variables.data-00000-of-00001 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43053f7c10ec272a0a6e423e799e62ab890cb2d0174ca29276153594044d730a +size 201244 diff --git a/models/spam_keras_1664066970.8563766/variables/variables.index b/models/spam_keras_1664066970.8563766/variables/variables.index @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dc39ffef4fcc223b7272f0f8df3cf69e962fe0908f75ae62a8d728ab50c631f +size 1636 diff --git a/spam-keras.ipynb b/spam-keras.ipynb @@ -10,22 +10,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2022-09-25 02:21:08.685984: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n", - "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", - "2022-09-25 02:21:08.863328: E tensorflow/stream_executor/cuda/cuda_blas.cc:2981] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", - "2022-09-25 02:21:09.573402: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory\n", - "2022-09-25 02:21:09.573501: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory\n", - "2022-09-25 02:21:09.573508: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.\n" - ] - } - ], + "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", @@ -44,7 +31,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -79,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -111,68 +98,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"sequential\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " embedding (Embedding) (None, 120, 16) 16000 \n", - " \n", - " dropout (Dropout) (None, 120, 16) 0 \n", - " \n", - " global_average_pooling1d (G (None, 16) 0 \n", - " lobalAveragePooling1D) \n", - " \n", - " dropout_1 (Dropout) (None, 16) 0 \n", - " \n", - " dense (Dense) (None, 6) 102 \n", - " \n", - " dropout_2 (Dropout) (None, 6) 0 \n", - " \n", - " dense_1 (Dense) (None, 1) 7 \n", - " \n", - "=================================================================\n", - "Total params: 16,109\n", - "Trainable params: 16,109\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2022-09-25 02:21:11.260113: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:966] could not open file to read NUMA node: /sys/bus/pci/devices/0000:09:00.0/numa_node\n", - "Your kernel may have been built without NUMA support.\n", - "2022-09-25 02:21:11.305803: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:966] could not open file to read NUMA node: /sys/bus/pci/devices/0000:09:00.0/numa_node\n", - "Your kernel may have been built without NUMA support.\n", - "2022-09-25 02:21:11.305864: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:966] could not open file to read NUMA node: /sys/bus/pci/devices/0000:09:00.0/numa_node\n", - "Your kernel may have been built without NUMA support.\n", - "2022-09-25 02:21:11.306781: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n", - "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", - "2022-09-25 02:21:11.307643: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:966] could not open file to read NUMA node: /sys/bus/pci/devices/0000:09:00.0/numa_node\n", - "Your kernel may have been built without NUMA support.\n", - "2022-09-25 02:21:11.307698: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:966] could not open file to read NUMA node: /sys/bus/pci/devices/0000:09:00.0/numa_node\n", - "Your kernel may have been built without NUMA support.\n", - "2022-09-25 02:21:11.307727: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:966] could not open file to read NUMA node: /sys/bus/pci/devices/0000:09:00.0/numa_node\n", - "Your kernel may have been built without NUMA support.\n", - "2022-09-25 02:21:12.052383: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:966] could not open file to read NUMA node: /sys/bus/pci/devices/0000:09:00.0/numa_node\n", - "Your kernel may have been built without NUMA support.\n", - "2022-09-25 02:21:12.052503: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:966] could not open file to read NUMA node: /sys/bus/pci/devices/0000:09:00.0/numa_node\n", - "Your kernel may have been built without NUMA support.\n", - "2022-09-25 02:21:12.052514: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Could not identify NUMA node of platform GPU id 0, defaulting to 0. Your kernel may not have been built with NUMA support.\n", - "2022-09-25 02:21:12.052567: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:966] could not open file to read NUMA node: /sys/bus/pci/devices/0000:09:00.0/numa_node\n", - "Your kernel may have been built without NUMA support.\n", - "2022-09-25 02:21:12.052612: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1616] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 5904 MB memory: -> device: 0, name: NVIDIA GeForce RTX 2080 SUPER, pci bus id: 0000:09:00.0, compute capability: 7.5\n" - ] - } - ], + "outputs": [], "source": [ "model = tf.keras.Sequential([\n", " tf.keras.layers.Embedding(\n", @@ -200,7 +128,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -216,19 +144,11 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Average test loss: 0.08333737960085273\n" - ] - } - ], + "outputs": [], "source": [ - "num_epochs = 200\n", + "num_epochs = 105\n", "history = model.fit(padded, \n", " training_labels_final, \n", " epochs=num_epochs, \n", @@ -244,27 +164,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO:tensorflow:Assets written to: ./models/spam_keras_1664065523.4707785/assets\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAABrtklEQVR4nO3dd3hUVf7H8ffMJJn0hJBOC713EKk2FBtiR8WlqLi6shbUtf3EtiusBVkV0VUR29q7KCpVQXpReocESIf0PnN/f1wyMCSEAJNMEj6v55lnJnfuzJw7A5lPzvmecy2GYRiIiIiINBBWbzdARERExJMUbkRERKRBUbgRERGRBkXhRkRERBoUhRsRERFpUBRuREREpEFRuBEREZEGReFGREREGhSFGxEREWlQFG5EpM7bs2cPFouFWbNmnfRjFy5ciMViYeHChVXuN2vWLCwWC3v27DmlNopI3aFwIyIiIg2Kwo2IiIg0KAo3IiIi0qAo3IjICT355JNYLBa2bdvGzTffTFhYGFFRUTz++OMYhkFSUhIjRowgNDSU2NhYXnzxxQrPkZaWxq233kpMTAz+/v50796dd999t8J+WVlZjB07lrCwMMLDwxkzZgxZWVmVtmvLli1ce+21RERE4O/vT58+ffj22289euyvvfYanTt3xm63Ex8fz1133VWhPdu3b+eaa64hNjYWf39/mjZtyg033EB2drZrn19++YVBgwYRHh5OcHAw7du359FHH/VoW0XE5OPtBohI/TFy5Eg6duzIlClTmD17Nv/85z+JiIjgjTfe4Pzzz+ff//43H374IQ888AB9+/ZlyJAhABQWFnLuueeyY8cOJkyYQMuWLfnss88YO3YsWVlZ3HPPPQAYhsGIESNYvHgxd9xxBx07duSrr75izJgxFdqyceNGBg4cSJMmTXj44YcJCgri008/5corr+SLL77gqquuOu3jffLJJ3nqqacYOnQod955J1u3bmXGjBmsXLmSJUuW4OvrS0lJCcOGDaO4uJi///3vxMbGsn//fr7//nuysrIICwtj48aNXH755XTr1o2nn34au93Ojh07WLJkyWm3UUQqYYiInMATTzxhAMbtt9/u2lZWVmY0bdrUsFgsxpQpU1zbDx06ZAQEBBhjxoxxbZs2bZoBGB988IFrW0lJidG/f38jODjYyMnJMQzDML7++msD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zyu7cHMNDT8dj8JNFRRuRESkKtmFpWxPzaV3i1OrkaprdqXn8c/Zm7lvaLsqFwqtypaUHK57fSm5RWWE+Puw7JELqt175CkKN1VQuBERETl5y3dl8uDnfzJ2QAK3DKr9kygr3FRB4UZERKT+OZnv79o5k5aIiIhILVG4ERERkQZF4UZEREQaFIUbERERaVAUbkRERKRBUbgRERGRBkXhRkRERBoUhRsRERFpUBRuREREpEFRuBEREZEGReFGREREGhSFGxEREWlQFG5ERESkQVG4ERERkQbFx9sNqG2GYQDmqdNFRESkfij/3i7/Hq/KGRducnNzAWjWrJmXWyIiIiInKzc3l7CwsCr3sRjViUANiNPp5MCBA4SEhGCxWDz63Dk5OTRr1oykpCRCQ0M9+tx1QUM/PtAxNgQN/fhAx9gQNPTjA88fo2EY5ObmEh8fj9VadVXNGddzY7Vaadq0aY2+RmhoaIP9xwoN//hAx9gQNPTjAx1jQ9DQjw88e4wn6rEpp4JiERERaVAUbkRERKRBUbjxILvdzhNPPIHdbvd2U2pEQz8+0DE2BA39+EDH2BA09OMD7x7jGVdQLCIiIg2bem5ERESkQVG4ERERkQZF4UZEREQaFIUbERERaVAUbjxk+vTpJCQk4O/vT79+/VixYoW3m3TKJk+eTN++fQkJCSE6Oporr7ySrVu3uu1z7rnnYrFY3C533HGHl1p8cp588skKbe/QoYPr/qKiIu666y4aN25McHAw11xzDampqV5s8clLSEiocIwWi4W77roLqJ+f36+//srw4cOJj4/HYrHw9ddfu91vGAaTJk0iLi6OgIAAhg4dyvbt2932OXjwIKNGjSI0NJTw8HBuvfVW8vLyavEojq+q4ystLeWhhx6ia9euBAUFER8fz+jRozlw4IDbc1T2uU+ZMqWWj+T4TvQZjh07tkL7L774Yrd96vJnCCc+xsr+X1osFp5//nnXPnX5c6zO90N1focmJiZy2WWXERgYSHR0NA8++CBlZWUea6fCjQd88sknTJw4kSeeeII1a9bQvXt3hg0bRlpamrebdkoWLVrEXXfdxbJly/jll18oLS3loosuIj8/322/8ePHk5yc7Lo899xzXmrxyevcubNb2xcvXuy677777uO7777js88+Y9GiRRw4cICrr77ai609eStXrnQ7vl9++QWA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VxUXFxMREcHcuXPp37+/a/ttt91GQUEBt99+O+eddx4ff/wxI0eOBODgwYM0bdqUWbNmcf311zNq1CjS09P5+eefXY//xz/+wezZs9m4cSPbtm2jffv2/PLLLwwdOrRCGxYuXMh5553H3LlzueCCCwD44YcfuOyyyygsLMTf37+G3wUR8ST13IiIV+3YsYOCggIuvPBCgoODXZf33nuPnTt3uvY7OvhERETQvn17Nm/eDMDmzZsZOHCg2/MOHDiQ7du343A4WLduHTabjXPOOafKtnTr1s11Oy4uDoC0tLTTPkYRqV0+3m6AiJzZ8vLyAJg9ezZNmjRxu89ut7sFnFMVEBBQrf18fX1dty0WC2DWA4lI/aKeGxHxqk6dOmG320lMTKRNmzZul2bNmrn2W7Zsmev2oUOH2LZtGx07dgSgY8eOLFmyxO15lyxZQrt27bDZbHTt2hWn0+lWwyMiDZd6bkTEq0JCQnjggQe47777cDqdDBo0iOzsbJYsWUJoaCgtWrQA4Omnn6Zx48bExMTw2GOPERkZyZVXXgnA/fffT9++fXnmmWcYOXIkS5cu5dVXX+W1114DICEhgTFjxnDLLbfw8ssv0717d/bu3UtaWhrXX3+9tw5dRGqIwo2IeN0zzzxDVFQUkydPZteuXYSHh9OrVy8effRR17DQlClTuOeee9i+fTs9evTgu+++w8/PD4BevXrx6aefMmnSJJ555hni4uJ4+umnGTt2rOs1ZsyYwaOPPsrf/vY3MjMzad68OY8++qg3DldEaphmS4lInVY+k+nQoUOEh4d7uzkiUg+o5kZEREQaFIUbERERaVA0LCUiIiINinpuREREpEFRuBEREZEGReFGREREGhSFGxEREWlQFG5ERESkQVG4ERERkQZF4UZEREQaFIUbERERaVAUbkRERKRB+X9BTnBTuF6K7gAAAABJRU5ErkJggg==", - "text/plain": [ - "<Figure size 640x480 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Save model\n", "import time\n", @@ -282,62 +184,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['Greg, can you call me back once you get this?', 'Congrats on your new iPhone! Click here to claim your prize...', 'Really like that new photo of you', 'Did you hear the news today? Terrible what has happened...', 'Attend this free COVID webinar today: Book your session now...', 'Are you coming to the party tonight?', 'Your parcel has gone missing', 'Do not forget to bring friends!', 'You have won a million dollars! Fill out your bank details here...', 'Looking forward to seeing you again', 'oh wow https://github.com/MGCodesandStats/tensorflow-nlp/blob/master/spam%20detection%20tensorflow%20v2.ipynb works really good on spam detection. Guess I go with that as the base model then lol :D']\n", - "1/1 [==============================] - 0s 65ms/step\n", - "Greg, can you call me back once you get this?\n", - "[0.00298078]\n", - "\n", - "\n", - "Congrats on your new iPhone! Click here to claim your prize...\n", - "[0.99888474]\n", - "\n", - "\n", - "Really like that new photo of you\n", - "[0.00580836]\n", - "\n", - "\n", - "Did you hear the news today? Terrible what has happened...\n", - "[0.0059419]\n", - "\n", - "\n", - "Attend this free COVID webinar today: Book your session now...\n", - "[0.25335604]\n", - "\n", - "\n", - "Are you coming to the party tonight?\n", - "[0.00014567]\n", - "\n", - "\n", - "Your parcel has gone missing\n", - "[0.00142341]\n", - "\n", - "\n", - "Do not forget to bring friends!\n", - "[0.0004853]\n", - "\n", - "\n", - "You have won a million dollars! Fill out your bank details here...\n", - "[0.6658791]\n", - "\n", - "\n", - "Looking forward to seeing you again\n", - "[0.00312363]\n", - "\n", - "\n", - "oh wow https://github.com/MGCodesandStats/tensorflow-nlp/blob/master/spam%20detection%20tensorflow%20v2.ipynb works really good on spam detection. Guess I go with that as the base model then lol :D\n", - "[0.00045932]\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "# Use the model to predict whether a message is spam\n", "text_messages = ['Greg, can you call me back once you get this?',\n", @@ -350,7 +199,11 @@ " 'Do not forget to bring friends!',\n", " 'You have won a million dollars! Fill out your bank details here...',\n", " 'Looking forward to seeing you again',\n", - " 'oh wow https://github.com/MGCodesandStats/tensorflow-nlp/blob/master/spam%20detection%20tensorflow%20v2.ipynb works really good on spam detection. Guess I go with that as the base model then lol :D']\n", + " 'oh wow https://github.com/MGCodesandStats/tensorflow-nlp/blob/master/spam%20detection%20tensorflow%20v2.ipynb works really good on spam detection. Guess I go with that as the base model then lol :D',\n", + " 'ayo',\n", + " 'Almost all my spam is coming to my non-gmail address actually',\n", + " 'Oh neat I think I found the sizing sweetspot for my data :D',\n", + " 'would never click on buttons in gmail :D always expecting there to be a bug in gmail that allows js to grab your google credentials :D XSS via email lol. I am too scared for touching spam in gmail']\n", "\n", "print(text_messages)\n", "\n",