From a43aeff310418bb727443a2157bf0a44c4738ddd Mon Sep 17 00:00:00 2001 From: Otavio Napoli Date: Thu, 1 Feb 2024 23:47:38 -0300 Subject: [PATCH] Added Figures and notebooks to documentation --- notebooks/03_training_ssl_model.ipynb | 2 +- notebooks/04_using_experiments.ipynb | 93 ++++++++++++++++++++++++++ notebooks/experiment_classes.pdf | Bin 0 -> 25391 bytes 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 notebooks/experiment_classes.pdf diff --git a/notebooks/03_training_ssl_model.ipynb b/notebooks/03_training_ssl_model.ipynb index fbbecba..8317f96 100644 --- a/notebooks/03_training_ssl_model.ipynb +++ b/notebooks/03_training_ssl_model.ipynb @@ -410,7 +410,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Fine-tuning the model\n", + "## Fine-tuning the model\n", "\n", "After pre-training the model, we will use the learned representations to train a classifier for the downstream task, in this case, the HAR task. \n", "\n", diff --git a/notebooks/04_using_experiments.ipynb b/notebooks/04_using_experiments.ipynb index 06c00d7..ea53e74 100644 --- a/notebooks/04_using_experiments.ipynb +++ b/notebooks/04_using_experiments.ipynb @@ -759,6 +759,99 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃        Test metric               DataLoader 0        ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│         test_acc              0.3860640227794647     │\n",
+       "│         test_loss             1.6338088512420654     │\n",
+       "└───────────────────────────┴───────────────────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1m Test metric \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", + "│\u001b[36m \u001b[0m\u001b[36m test_acc \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.3860640227794647 \u001b[0m\u001b[35m \u001b[0m│\n", + "│\u001b[36m \u001b[0m\u001b[36m test_loss \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 1.6338088512420654 \u001b[0m\u001b[35m \u001b[0m│\n", + "└───────────────────────────┴───────────────────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n"
+      ],
+      "text/plain": []
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "
\n",
+       "
\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-packages/lightning/fabric/loggers/csv_logs.py:198: Experiment logs directory logs/test/CPC/2024-02-01_23-01-39 exists and is not empty. Previous log files in this directory will be deleted when the new ones are saved!\n", + "GPU available: True (cuda), used: True\n", + "TPU available: False, using: 0 TPU cores\n", + "IPU available: False, using: 0 IPUs\n", + "HPU available: False, using: 0 HPUs\n", + "`Trainer(limit_test_batches=1.0)` was configured so 100% of the batches will be used..\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Teardown experiment: CPC...\n", + "Test on dataset MotionSense finished !\n", + "Dataset at: /workspaces/hiaac-m4/ssl_tools/data/standartized_balanced/RealWorld_thigh\n", + "Loading model from logs/finetune/CPC/2024-02-01_22-38-32/checkpoints/last.ckpt and executing test using dataset at RealWorld_thigh...\n", + "Setting up experiment: CPC...\n", + "Running experiment: CPC...\n", + "Loading model from: logs/finetune/CPC/2024-02-01_22-38-32/checkpoints/last.ckpt...\n", + "Model loaded successfully\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0,1]\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bc9753a4e8d549daad98bc8a70185c97", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ diff --git a/notebooks/experiment_classes.pdf b/notebooks/experiment_classes.pdf new file mode 100644 index 0000000000000000000000000000000000000000..73a79b2e23595efeab12a047a6b39e8640424620 GIT binary patch literal 25391 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 eR}ORV_koIL=7c$z?GTs%1a^v@T~