diff --git a/Polar-diagram-of-yacht-speed-according-to-diverse-wind-direction-and-speed.png b/Polar-diagram-of-yacht-speed-according-to-diverse-wind-direction-and-speed.png
new file mode 100644
index 0000000..47471ff
Binary files /dev/null and b/Polar-diagram-of-yacht-speed-according-to-diverse-wind-direction-and-speed.png differ
diff --git a/experiments/Experiments.ipynb b/experiments/Experiments.ipynb
index 990f7ad..0ecda6f 100644
--- a/experiments/Experiments.ipynb
+++ b/experiments/Experiments.ipynb
@@ -8,60 +8,145 @@
}
},
"source": [
- "# A suggestion of curse changes for a robot sailboat\n",
+ "# Initialschätzung von Kurswechselpositionen eines Segelboots auf einer Karte anhang con Wind, Start, und Zielpunkt\n",
"\n",
"## Motivation\n",
"\n",
- "The goal of this project is to suggest good points to change the curse of a sailboat while going from point $A$ to point $B$.\n",
+ "Ziel dieser Semesterabschließenden Schriftlichen Ausrbeitung im Fach \"Maschine Learning\" an der Fachhochschule Südwestfalen ist das Genereieren einer Heatmap von Kurswechselpositionen eines Segelbootes zu einer Karte abhängig von Wind und der Zielpostion. Dies soll das finden einer guten Route vereinfachen indem die Qualität einer ersten Route die danach über ein Quotientenabstigsverfahren optimiert werden soll verbessern. Da ein solches Quotientenabsiegsverfahren sehr gerne in einem Lokalen minimum festhängt müssen mehrere routen gefunden und optimiert werden. Hier soll untersucht werden ob dies durch eine Ersteinschätzung der Lage durch KI verbessert weren kann.\n",
"\n",
- "This project is done as part of the curse \"Maschienen Learning\" at the University of Applied Sciences South Westphalia. The code labeling the was writen by the team of the [Sailing Team Darmstadt e.V.](https://www.st-darmstadt.de/). A society of stundens whose goal it is to build the [\"roBOOTer\"](https://www.st-darmstadt.de/ueber-uns/boote/prototyp-ii/) a fully autonomous sailboat able to cross the atlantic ocean. A technical challenge that was mastered the first time only a few years ago by [a Norwegian team](http://sailbuoy.no/). I myself am part of the Sailing Team Darmstadt e.V. for nearly 10 years.\n",
- "\n",
- "One of the challenges to solve is a highly efficient way to find a path over the Ocean. The boot is only 2 meters long and powered by solar energy. That makes power a relatively spares commodity.\n",
- "\n",
- "## Situation as is\n",
- "At the moment the pathfinding algorithm generates a set of more or less random routes to the goal. Each route than gets optimized by a gradient decent moving the curse change points over the ocean to find a path with the lowest cost that can be found by following the highest gradient. This is relatively inefficient since only local minima can be found for each of the randomly generated route. The route with the lowest cost for the so optimized route will be chosen as the final route.\n",
- "The idea of this project is to ascertain if it is possible to generate a better initial route through a neural network to give the system a kind of good instinct for the initial routes to reduce optimization steps and the number fo routes that need to be calculated to find a good route. Even tough the initial calculation effort could be high the parallel calculation of 40 routes and lots of optimization steps make it possible that some calculation time and therefore energy can be saved this way.\n",
- "The idea of this project is to ascertain if it is possible to generate a better initial route through a neural network to give the system a kind of good instinct for the initial routes to reduce optimization steps and the number fo routes that need to be calculated to find a good route. Even tough the initial calculation effort could be high the parallel calculation of 40 routes and lots of optimization steps make it possible that some calculation time and energy can be saved this way.\n",
- "\n",
- "## The Project\n",
- "\n",
- "The goal of this project is to calculate a good first route. That allows for some simplifications of this problem.\n",
- "\n",
- "Some solutions and assumptions can be made.\n",
- "1. The route proposed by this network will not be the final route. This make a somewhat accurate solution good enough.\n",
- "2. Since the neural network should not learn how to interpret a specific map but the concept of a map the map can be rotated.\n",
- "This allows the wind to come always from north.\n",
- "3. Since curse speed is only somewhat proportional to the wind speed a final course may change depending on wind speed not only direction.\n",
- "These changes are however somewhat small compared to other influences and can hopefully be ignored since later processing of a proposed route should strait these details out.\n",
- "4. When the wind comes always from the same direction (After map orientation by wind) map and route can be mirrored allowing to use all data twice for each route.\n",
- "5. Scale does only matter when the curvature of the earth has a significant influence. Allowing for different scaling of the problem for additional training data.\n",
- "\n",
- "Since there is a solution for this project that only needs some optimisation we can used labeled data to train the network.\n",
- "\n",
- "### The generell structure\n",
- "\n",
- "Since"
+ "Eingesetzt werden soll die so erstellte KI in dem Segelrobotters des [Sailing Team Darmstadt e.V.](https://www.st-darmstadt.de/). Einer Hochschulgruppe an der TU-Darmstadt welche den [\"roBOOTer\"](https://www.st-darmstadt.de/ueber-uns/boote/prototyp-ii/) ein voll autonomos segelboot welches eines Tages den Atlantik überqueren soll. [Eine Technische Herrausvorderung welche zuerst von einem Norwegischen Team erfolgreich abgeschlossen wurde](https://www.microtransat.org/)."
]
},
{
- "cell_type": "raw",
+ "cell_type": "markdown",
"metadata": {},
"source": [
- "!pip install humanize"
+ "## Inhaltsverzeichnis\n",
+ "\n",
+ " 1. Einleitung\n",
+ " 1.1. Situation\n",
+ " 1.2. Vorgehen zur Unterstützenden KI\n",
+ " 2. Vorbereitungen\n",
+ " 3. Senarien und Routen Generieren\n",
+ " 4. Daten betrachten und Filtern\n",
+ " 5. KI Modell erstellen\n",
+ " 6. Training\n",
+ " 7. Analyse der KI\n",
+ " 8. Ausblick\n",
+ " "
]
},
{
- "cell_type": "raw",
- "metadata": {},
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "!pip install jupyter-resource-usage"
+ "## Einleitung\n",
+ "\n",
+ "### Situation\n",
+ "\n",
+ "Eine Routenplanung für ein Segelboot hat ein Problem welches man sonst so eher nicht kennt. Eine relativ Freie fläche auf der Sich das Schiff bewegen kann. Dies verändert die Wegfindung wie man sie von der Straße kennt fundermental.\n",
+ "\n",
+ "Navigiert man auf Straßen hat man zumindest nach einer ersten abstracktion relativ wenige Freiheitsgrade für den Weg.\n",
+ "Die Richtung kann nur an Kreuzungen gewechselt werden und dort nur in Richtungen in die es Straßen gibt. Beim Segeln auf dem freien Meer ist jeder Ort ein Potenzieller Wendpunkt von dem aus Potenziell in jede Richtung gesegelt werden kann.\n",
+ "\n",
+ "Dennoch ist es oft auch ohne hinderniss zwischen Boot und Ziel oft nicht möglich das Ziel direkt anzufahren das sich die Maximalgeschwindigkeiten relativ zur Windrichtung verändern.\n",
+ "Das Folgende Diagramm zeigt die Geschwindgkeiten eines Katamarans.\n",
+ "\n",
+ "\n",
+ "\n",
+ "Da der roBOOTer anders als an Katamaran nicht auf Geschwindichkeit sondern auf Mechanische Belastbarkeit ausgelegt wurde hat der Fahrtwind einen geringeren einfluss auf das Fahrtverhalten des Segelboots dies und eine andere Maximalgeschwindigkeit sorgen für ein etwas anderes Fahrverhalten. Die ungefähre Form der Kurven trifft aber auch auf den roBOOTer zu. Man kann deutlich erkennen das auch wenn man nicht direkt gegen den Wind fahren kann man schräg gegen den wind immer noch erstaunlich schnell ist.\n",
+ "\n",
+ "Das aktuelle Verfahren zum finden einer Route läuf folgendermaßen ab:\n",
+ "\n",
+ "Eine direkte Route wird berechnet. Die Route wird an jedem Hinderniss geteilt und rechts und links um jedes hindernis herum gelegt. Bei folgenden hindernissen werden die Routen wieder geteilt somit erhält man $2^n$ vorschläge für Routen wobei $n$ die Anzahl der Hindernisse auf der Route ist. Jeder Abschnitt der Route wird noch einmal zerteilt um der Route mehr Flexibilität zu geben.\n",
+ "\n",
+ "Die Routen werden dann simmuliert um die Kosten der Route zu berechnen. Die so simulierte Route wird danach über die Kosten in einem Gradientenabstiegverfahren Optimiert.\n",
+ "\n",
+ "Das ganze oben beschriebene Verfahren ist relativ schnell sehr rechenaufwendig und findet nicht immer ein Ergbniss. Wird kein Ergebnis gefunden wird eine mehr oder weniger zufällige Route optimiert.\n",
+ "\n",
+ "Diese Ausarbeitung soll wenigstens bei der alternativen Routenfindung helfen. Im idealfall kann es aber auch genutzt wereden um die auswahl der Routen um Hindernisse frühzeitig zu reduzieren und den Rechenaufwand unter $2^n$ zu senken wobei $n$ die Anzahl von Hindernissen auf der Route ist.\n",
+ "\n",
+ "### Vorgehen zur Unterstützenden KI\n",
+ "\n",
+ "#### Eingaben und Ausageben\n",
+ "\n",
+ "Die Algoritmen zur Wegfindung vom Sailingteam Darmstadt e.V. arbeiten intern mit Polygonen als Hindernissen. Diese werden durch die Schapely bibiliotek implementiert. Da eine variable Anzahl an Polygonen mit einer variablen Form und Position eine Relative komplexer Input muss dieser in eine normiertere Form gebracht werden. Ein binärfarbenes Bild ist dafür die einfachste Form.\n",
+ "\n",
+ "Für den Computer spielen sowohl Zentrierung, Skalierung und Ausrichtung der Karte keine Rolle.\n",
+ "Wir rotieren also die Karte immer so das der Wind von *Norden* kommt und das Boot / die Startposition in der *Mitte* der Karte liegt. Da distanz Linar ist wird davon ausgegangen das Scenario einfach skaliert passend skaliert werden kann.\n",
+ "\n",
+ "Die nächste eingabe ist die Zielposition relativ zum Startpunkt. Diese kann endweder durch einen einzelnen Pixel in einem zweiten Farbkanal oder aber in abstrakterer Form an die KI übergeben werden.\n",
+ "\n",
+ "Als ausgabe wird eine Heatmap erwarted. Zwei alternative Heatmaps sind relative einfach denkbar.\n",
+ "\n",
+ " 1. Eine Headmap der Kurswechselpositionen\n",
+ " 2. Eine Headmap des Kursverlaufes\n",
+ "\n",
+ "Headmaps sind in gewisserweise Bilder. Das Problem wird daher wie ein Bild zu Bild KI Problem betrachted. Diese werden Normalerweise durch ANNs gelöst.\n",
+ "\n",
+ "Um eine ANN zu trennieren gibt es immer die Wahl zwischen drei Primären prinzipien. Dem unüberwachten Lernen, dem reinforcement Learning und dem überwachten Lernen. Letzteres ist dabei meist am einfachsten wenn auch nicht immer möglich.\n",
+ "\n",
+ "Der Wegfindealgoritmus des Sailing Team Darmstadt e.V. ist zwar noch in der Entwicklung, funktioniert aber hinriechend gut um auf einem normalen PC Scenarien mit Routen zu paaren oder auch diese zu *labeln* um beim KI lingo zu bleiben. Um anpassungsfähig an andere Scenarien zu sein wird eine große menge unterschiedlicher Scenarien und Routen benötigt.\n",
+ "Da das Haupteinsatzgebiet das Meer ist gehen wir von einer Insellandschaft oder Küstenlandschaft aus.\n",
+ "\n",
+ "Zum Finden von Scenarien gibt es zwei Möglichkeiten.\n",
+ "\n",
+ " 1. Das auswählen von umgebungen von der Weltkarte und das bestimmen eines Zielpunktes.\n",
+ " 2. Das generieren von künstlichen Scenarien.\n",
+ " \n",
+ "Hier wird die Annaheme getroffen das sich ANNs von einem Datensatz auf den anderen Übetragen lassen.\n",
+ "Der Aufwand für künstliche Scenarien wird hierbei als geringer eingestuft und daher gewhält."
]
},
{
- "cell_type": "raw",
+ "cell_type": "markdown",
"metadata": {},
"source": [
- "!pip install h5py"
+ "## Vorbereitungen\n",
+ "\n",
+ "Folgende Python Libararies weren verwendet:\n",
+ "\n",
+ " 1. Tensorflow\n",
+ " Die Tensorflow libaray ist das Werkzeug welches verwendet wurde um neuronale Netz zu modelieren, zu trainieren, zu analysieren und auszuführen.\n",
+ " \n",
+ " 2. pyrate\n",
+ " The pyrate programm is part of the ROS system controlling the roBOOTer. It is used to find routes.\n",
+ " \n",
+ " 3. Shapley\n",
+ " The shapley libarary is able to work with geometricle bodys. Used to generate sceneria and to save them in a vectorised / compact format.\n",
+ " \n",
+ " 4. pandas\n",
+ " A library to save data in tables. Contains lots of functions to analyze and modify the data contained.\n",
+ " \n",
+ " 5. numpy\n",
+ " A library to do mathematiel operations on multidimensional arrays.\n",
+ " \n",
+ " 6. matplotlib\n",
+ " A library to plot diagrams and images.\n",
+ " \n",
+ " 6. PIL\n",
+ " A library to draw and show images.\n",
+ " \n",
+ " 7. mapply\n",
+ " A libarary to use multiprocessing to edit a pandas DataFrame\n",
+ " \n",
+ " 8. humanize\n",
+ " Converts numbers into easily human readable formats.\n",
+ " \n",
+ " 9. tqdm\n",
+ " Used to add process bars to many things."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Sets the path this notebook is executed in to be relative to other the pyrate entrypoints."
]
},
{
@@ -89,6 +174,14 @@
"%cd /pyrate/"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Imports\n",
+ "Imports the necessary packages from python and pypi."
+ ]
+ },
{
"cell_type": "code",
"execution_count": 2,
@@ -106,13 +199,19 @@
"name": "stderr",
"output_type": "stream",
"text": [
- "2022-07-12 06:56:55.112232: I tensorflow/core/util/util.cc:169] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n",
- "2022-07-12 06:56:55.168775: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n",
- "2022-07-12 06:56:55.168787: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n"
+ "2022-07-12 22:52:53.814974: I tensorflow/core/util/util.cc:169] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n",
+ "2022-07-12 22:52:53.818543: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n",
+ "2022-07-12 22:52:53.818569: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n"
]
}
],
"source": [
+ "import sys\n",
+ "\n",
+ "# Pins the python version executing the Jupyter Notebook\n",
+ "assert sys.version_info.major == 3\n",
+ "assert sys.version_info.minor == 10\n",
+ "\n",
"import os\n",
"from typing import Optional, Final, Literal\n",
"from math import pi\n",
@@ -128,8 +227,7 @@
"from shapely.geometry import Polygon, Point, LineString\n",
"from shapely.ops import unary_union, split\n",
"import mapply\n",
- "import tensorflow as tf\n",
- "import tensorflow_addons as tfa"
+ "import tensorflow as tf"
]
},
{
@@ -163,6 +261,7 @@
},
"outputs": [],
"source": [
+ "# Enables a tqdm progress bar for pandas apply\n",
"tqdm.pandas()"
]
},
@@ -177,12 +276,13 @@
},
"outputs": [],
"source": [
+ "# Enables and configures multiprocessing for pandas\n",
"mapply.init(n_workers=-1, chunk_size=1000, progressbar=True, max_chunks_per_worker=100)"
]
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 62,
"metadata": {
"ExecuteTime": {
"end_time": "2022-07-11T18:34:19.609069Z",
@@ -194,10 +294,21 @@
},
"outputs": [],
"source": [
+ "# Sets the maximum number of optimization steps that can be performed to find a route.\n",
+ "# Significantly lowered for more speed.\n",
"experiments.optimization_param.n_iter_grad = 50\n",
+ "\n",
+ "# Disbales verbose outputs from the pyrate library.\n",
"experiments.optimization_param.verbose = False"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Paramter settings"
+ ]
+ },
{
"cell_type": "code",
"execution_count": 7,
@@ -212,14 +323,29 @@
},
"outputs": [],
"source": [
- "SIZE_INNER: Final[int] = 75\n",
+ "# The scale the route should lie in. Only a mathematical limit.\n",
"SIZE_ROUTE: Final[int] = 100\n",
+ "\n",
+ "# The outer limit in with the goal need to be palced.\n",
+ "# Should be smaller than \n",
+ "SIZE_INNER: Final[int] = 75\n",
+ "assert SIZE_ROUTE > SIZE_INNER, \"The goal should be well inside the limit placed \"\n",
+ " \n",
+ "# The minimum destance from the start that should \n",
"MIN_DESTINATION_DISTANCE: Final[int] = 25\n",
+ "assert SIZE_INNER > MIN_DESTINATION_DISTANCE, \"The goal should be well closer to the outer limit the\"\n",
+ "\n",
+ "# The size the ANN input has. Equal to the image size. Should be an on of $n^2$ to be easier compatible with ANNs.\n",
"IMG_SIZE: Final[int] = 128\n",
+ "\n",
+ "# The size an image should be in to be easily visible by eye.\n",
"IMG_SHOW_SIZE: Final[int] = 400\n",
+ " \n",
+ "# The number of Files that should be read to train the ANNs\n",
"NUMBER_OF_FILES_LIMIT: Final[int] = 1000\n",
"\n",
- "NO_SHOW = True\n",
+ "# \n",
+ "NO_SHOW = False\n",
"GENERATE_NEW = True"
]
},
@@ -288,7 +414,7 @@
""
],
"text/plain": [
- ""
+ ""
]
},
"execution_count": 9,
@@ -924,7 +1050,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "363f40e4d5e54f0faed4b0075e9cc46e",
+ "model_id": "a640acf6a79740149c6f477e9889fd75",
"version_major": 2,
"version_minor": 0
},
@@ -1178,7 +1304,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "bf26cd9622814607959d07ff017ccd3f",
+ "model_id": "3f9920fc8f3e48858390d61beb5025f0",
"version_major": 2,
"version_minor": 0
},
@@ -1248,7 +1374,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "4ffd88bf353146fda0c3996f8cbd3e90",
+ "model_id": "d2f493b8c75c46cebad8e4e5025fe47c",
"version_major": 2,
"version_minor": 0
},
@@ -1366,7 +1492,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "7e57db07430c4d46a3215d429488de26",
+ "model_id": "d004186c4993453f82a23d5461b335ca",
"version_major": 2,
"version_minor": 0
},
@@ -2490,7 +2616,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "f7e41b81204d4feab846da2804e0ed46",
+ "model_id": "f515ae374e374de7aba6b584b54b9a62",
"version_major": 2,
"version_minor": 0
},
@@ -2660,17 +2786,17 @@
"name": "stderr",
"output_type": "stream",
"text": [
- "2022-07-12 06:58:17.372063: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory\n",
- "2022-07-12 06:58:17.372095: W tensorflow/stream_executor/cuda/cuda_driver.cc:269] failed call to cuInit: UNKNOWN ERROR (303)\n",
- "2022-07-12 06:58:17.372112: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (947f5123542f): /proc/driver/nvidia/version does not exist\n",
- "2022-07-12 06:58:17.372659: 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 AVX512F AVX512_VNNI FMA\n",
+ "2022-07-12 22:54:12.025009: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory\n",
+ "2022-07-12 22:54:12.025051: W tensorflow/stream_executor/cuda/cuda_driver.cc:269] failed call to cuInit: UNKNOWN ERROR (303)\n",
+ "2022-07-12 22:54:12.025069: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (6c2cdca2902f): /proc/driver/nvidia/version does not exist\n",
+ "2022-07-12 22:54:12.025335: 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 AVX512F AVX512_VNNI FMA\n",
"To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"
]
},
{
"data": {
"text/plain": [
- ""
+ ""
]
},
"execution_count": 51,
@@ -3023,12 +3149,14 @@
},
"outputs": [
{
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "2022-07-12 06:58:20.782666: I tensorflow/core/profiler/lib/profiler_session.cc:99] Profiler session initializing.\n",
- "2022-07-12 06:58:20.782705: I tensorflow/core/profiler/lib/profiler_session.cc:114] Profiler session started.\n",
- "2022-07-12 06:58:20.785118: I tensorflow/core/profiler/lib/profiler_session.cc:126] Profiler session tear down.\n"
+ "ename": "NameError",
+ "evalue": "name 'tfa' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
+ "Input \u001b[0;32mIn [61]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m tqdm_callback \u001b[38;5;241m=\u001b[39m \u001b[43mtfa\u001b[49m\u001b[38;5;241m.\u001b[39mcallbacks\u001b[38;5;241m.\u001b[39mTQDMProgressBar(\n\u001b[1;32m 2\u001b[0m leave_epoch_progress\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, leave_overall_progress\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, show_epoch_progress\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 3\u001b[0m )\n\u001b[1;32m 5\u001b[0m early_stop \u001b[38;5;241m=\u001b[39m tf\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39mcallbacks\u001b[38;5;241m.\u001b[39mEarlyStopping(\n\u001b[1;32m 6\u001b[0m monitor\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmean_squared_error\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 7\u001b[0m min_delta\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.0005\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 11\u001b[0m restore_best_weights\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 12\u001b[0m )\n\u001b[1;32m 14\u001b[0m tf_board \u001b[38;5;241m=\u001b[39m tf\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39mcallbacks\u001b[38;5;241m.\u001b[39mTensorBoard(\n\u001b[1;32m 15\u001b[0m log_dir\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m./log_dir\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 16\u001b[0m histogram_freq\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m100\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 23\u001b[0m embeddings_metadata\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 24\u001b[0m )\n",
+ "\u001b[0;31mNameError\u001b[0m: name 'tfa' is not defined"
]
}
],
@@ -3065,41 +3193,14 @@
},
{
"cell_type": "code",
- "execution_count": 62,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2022-07-11T18:34:37.387799Z",
"start_time": "2022-07-11T18:34:36.925978Z"
}
},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "b55484203de74cffa729df71d50fdaf6",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/3 [00:00, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"plt.figure(figsize=(17.5, 25))\n",
"np_array = np.flip(collected_routes[1, :, :, :], axis=0)\n",
@@ -3114,32 +3215,21 @@
},
{
"cell_type": "code",
- "execution_count": 63,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2022-07-11T18:34:37.398038Z",
"start_time": "2022-07-11T18:34:37.391964Z"
}
},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(22577, 128, 128, 2)"
- ]
- },
- "execution_count": 63,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"collected_routes[:, :, :, :2].shape"
]
},
{
"cell_type": "code",
- "execution_count": 64,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2022-07-11T18:34:37.769969Z",
@@ -3156,32 +3246,21 @@
},
{
"cell_type": "code",
- "execution_count": 65,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2022-07-11T18:34:37.780494Z",
"start_time": "2022-07-11T18:34:37.772901Z"
}
},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 65,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"train_dataset"
]
},
{
"cell_type": "code",
- "execution_count": 66,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2022-07-11T18:34:37.789908Z",
@@ -3197,7 +3276,7 @@
},
{
"cell_type": "code",
- "execution_count": 67,
+ "execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2022-07-11T18:34:37.800259Z",
@@ -3218,73 +3297,7 @@
"start_time": "2022-07-11T18:34:37.804670Z"
}
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 1/20\n",
- " 19/353 [>.............................] - ETA: 6:21 - loss: 0.0221 - binary_crossentropy: 0.0636 - mean_squared_error: 0.0221 - mean_absolute_error: 0.0700"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "2022-07-12 06:58:49.034979: I tensorflow/core/profiler/lib/profiler_session.cc:99] Profiler session initializing.\n",
- "2022-07-12 06:58:49.035033: I tensorflow/core/profiler/lib/profiler_session.cc:114] Profiler session started.\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " 39/353 [==>...........................] - ETA: 5:57 - loss: 0.0133 - binary_crossentropy: 0.0518 - mean_squared_error: 0.0133 - mean_absolute_error: 0.0476"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "2022-07-12 06:59:12.901657: I tensorflow/core/profiler/lib/profiler_session.cc:66] Profiler session collecting data.\n",
- "2022-07-12 06:59:12.987850: I tensorflow/core/profiler/lib/profiler_session.cc:126] Profiler session tear down.\n",
- "2022-07-12 06:59:13.081028: I tensorflow/core/profiler/rpc/client/save_profile.cc:136] Creating directory: ./log_dir/plugins/profile/2022_07_12_06_59_12\n",
- "\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
- " 40/353 [==>...........................] - ETA: 5:59 - loss: 0.0131 - binary_crossentropy: 0.0515 - mean_squared_error: 0.0131 - mean_absolute_error: 0.0467"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "2022-07-12 06:59:13.155588: I tensorflow/core/profiler/rpc/client/save_profile.cc:142] Dumped gzipped tool data for trace.json.gz to ./log_dir/plugins/profile/2022_07_12_06_59_12/947f5123542f.trace.json.gz\n",
- "2022-07-12 06:59:13.254074: I tensorflow/core/profiler/rpc/client/save_profile.cc:136] Creating directory: ./log_dir/plugins/profile/2022_07_12_06_59_12\n",
- "\n",
- "2022-07-12 06:59:13.261391: I tensorflow/core/profiler/rpc/client/save_profile.cc:142] Dumped gzipped tool data for memory_profile.json.gz to ./log_dir/plugins/profile/2022_07_12_06_59_12/947f5123542f.memory_profile.json.gz\n",
- "2022-07-12 06:59:13.263112: I tensorflow/core/profiler/rpc/client/capture_profile.cc:251] Creating directory: ./log_dir/plugins/profile/2022_07_12_06_59_12\n",
- "Dumped tool data for xplane.pb to ./log_dir/plugins/profile/2022_07_12_06_59_12/947f5123542f.xplane.pb\n",
- "Dumped tool data for overview_page.pb to ./log_dir/plugins/profile/2022_07_12_06_59_12/947f5123542f.overview_page.pb\n",
- "Dumped tool data for input_pipeline.pb to ./log_dir/plugins/profile/2022_07_12_06_59_12/947f5123542f.input_pipeline.pb\n",
- "Dumped tool data for tensorflow_stats.pb to ./log_dir/plugins/profile/2022_07_12_06_59_12/947f5123542f.tensorflow_stats.pb\n",
- "Dumped tool data for kernel_stats.pb to ./log_dir/plugins/profile/2022_07_12_06_59_12/947f5123542f.kernel_stats.pb\n",
- "\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "294/353 [=======================>......] - ETA: 1:14 - loss: 0.0046 - binary_crossentropy: 0.0261 - mean_squared_error: 0.0046 - mean_absolute_error: 0.0147"
- ]
- }
- ],
+ "outputs": [],
"source": [
"history = generator.fit(\n",
" train_dataset,\n",
@@ -3426,6 +3439,31 @@
"!pip install pydot pydotplus graphviz"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "@article{article,\n",
+ "author = {Jang, Hoyun and Lee, Inwon and Seo, Hyoungseock},\n",
+ "year = {2017},\n",
+ "month = {09},\n",
+ "pages = {4109-4117},\n",
+ "title = {Effectiveness of CFRP rudder aspect ratio for scale model catamaran racing yacht test},\n",
+ "volume = {31},\n",
+ "journal = {Journal of Mechanical Science and Technology},\n",
+ "doi = {10.1007/s12206-017-0807-8}\n",
+ "}"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {