Skip to content

Instantly share code, notes, and snippets.

@tanmayb123
Created May 21, 2020 19:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tanmayb123/59c45c0ade35b1e8e1c1a023895274c3 to your computer and use it in GitHub Desktop.
Save tanmayb123/59c45c0ade35b1e8e1c1a023895274c3 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!pip install tensorflow==2.2"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"@tf.function\n",
"def trilateration_error(r1, r2, r3, d1, d2, d3, g):\n",
" g1 = tf.math.sqrt(tf.reduce_sum((r1 - g) ** 2))\n",
" g2 = tf.math.sqrt(tf.reduce_sum((r2 - g) ** 2))\n",
" g3 = tf.math.sqrt(tf.reduce_sum((r3 - g) ** 2))\n",
" e1 = (d1 - g1) ** 2\n",
" e2 = (d2 - g2) ** 2\n",
" e3 = (d3 - g3) ** 2\n",
" return (e1 + e2 + e3) / 3."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"r1 = tf.convert_to_tensor([2, -2], dtype=tf.float32)\n",
"r2 = tf.convert_to_tensor([10, 8], dtype=tf.float32)\n",
"r3 = tf.convert_to_tensor([-1, 6], dtype=tf.float32)\n",
"d1 = tf.constant(4, dtype=tf.float32)\n",
"d2 = tf.constant(10, dtype=tf.float32)\n",
"d3 = tf.constant(5, dtype=tf.float32)\n",
"g = tf.convert_to_tensor([100, 100], dtype=tf.float32)\n",
"lr = tf.constant(0.3, dtype=tf.float32)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Error: 16888.2109375\n",
"Location: [44.88486 45.08783]\n",
"Error: 2764.168701171875\n",
"Location: [22.824139 23.131886]\n",
"Error: 503.17596435546875\n",
"Location: [13.945032 14.378352]\n",
"Error: 139.4102783203125\n",
"Location: [10.173733 10.987654]\n",
"Error: 76.73042297363281\n",
"Location: [7.724868 9.876369]\n",
"Error: 51.58062744140625\n",
"Location: [5.0082383 8.74973 ]\n",
"Error: 26.13784408569336\n",
"Location: [3.3503673 7.383498 ]\n",
"Error: 13.75202465057373\n",
"Location: [2.615611 6.263672]\n",
"Error: 8.697731018066406\n",
"Location: [2.3561246 5.318206 ]\n",
"Error: 5.7190446853637695\n",
"Location: [2.274096 4.4651375]\n",
"Error: 3.4275078773498535\n",
"Location: [2.23029 3.728766]\n",
"Error: 1.7982697486877441\n",
"Location: [2.1896534 3.1522222]\n",
"Error: 0.8373140096664429\n",
"Location: [2.1519592 2.7396262]\n",
"Error: 0.35726842284202576\n",
"Location: [2.120146 2.4629292]\n",
"Error: 0.1441587209701538\n",
"Location: [2.0947182 2.2850862]\n",
"Error: 0.05641952157020569\n",
"Location: [2.0748045 2.1737838]\n",
"Error: 0.021857935935258865\n",
"Location: [2.0592573 2.1052613]\n",
"Error: 0.008538853377103806\n",
"Location: [2.0470748 2.0635014]\n",
"Error: 0.0034286845475435257\n",
"Location: [2.0374796 2.0382106]\n",
"Error: 0.0014444519765675068\n",
"Location: [2.0298872 2.022954 ]\n",
"Error: 0.0006506851059384644\n",
"Location: [2.0238585 2.0137734]\n",
"Error: 0.0003170226118527353\n",
"Location: [2.0190597 2.0082583]\n",
"Error: 0.0001669249322731048\n",
"Location: [2.015233 2.0049486]\n",
"Error: 9.383381984662265e-05\n",
"Location: [2.0121787 2.002964 ]\n",
"Error: 5.536960088647902e-05\n",
"Location: [2.0097384 2.0017745]\n",
"Error: 3.374564403202385e-05\n",
"Location: [2.0077882 2.0010622]\n",
"Error: 2.0986735762562603e-05\n",
"Location: [2.0062292 2.0006354]\n",
"Error: 1.3210769793658983e-05\n",
"Location: [2.0049825 2.00038 ]\n",
"Error: 8.372879165108316e-06\n",
"Location: [2.0039856 2.0002272]\n",
"Error: 5.330524345481535e-06\n",
"Location: [2.0031884 2.000136 ]\n",
"Error: 3.4014337870758027e-06\n",
"Location: [2.0025506 2.0000813]\n",
"Error: 2.1737409952038433e-06\n",
"Location: [2.0020404 2.0000486]\n",
"Error: 1.3891819889977342e-06\n",
"Location: [2.0016322 2.000029 ]\n",
"Error: 8.881838766683359e-07\n",
"Location: [2.0013058 2.0000174]\n",
"Error: 5.683763220076798e-07\n",
"Location: [2.0010448 2.0000105]\n",
"Error: 3.639077021944104e-07\n",
"Location: [2.000836 2.0000062]\n",
"Error: 2.3298473195154656e-07\n",
"Location: [2.0006688 2.0000038]\n",
"Error: 1.4894226296746638e-07\n",
"Location: [2.000535 2.0000024]\n",
"Error: 9.53139860371266e-08\n",
"Location: [2.000428 2.0000014]\n",
"Error: 6.106537142613888e-08\n",
"Location: [2.0003424 2.000001 ]\n",
"Error: 3.9094707915410254e-08\n",
"Location: [2.000274 2.0000005]\n",
"Error: 2.500632945157122e-08\n",
"Location: [2.000219 2.0000002]\n",
"Error: 1.599566346044412e-08\n",
"Location: [2.0001752 2.0000002]\n",
"Error: 1.0219386226140159e-08\n",
"Location: [2.0001402 2.0000002]\n",
"Error: 6.568977362064743e-09\n",
"Location: [2.000112 2.0000002]\n",
"Error: 4.1855705568139e-09\n",
"Location: [2.0000896 2.0000002]\n",
"Error: 2.656027842107278e-09\n",
"Location: [2.0000718 2.0000002]\n",
"Error: 1.7053025658242404e-09\n",
"Location: [2.0000575 2.0000002]\n",
"Error: 1.0913936421275139e-09\n",
"Location: [2.000046 2.0000002]\n",
"Error: 6.927318163540974e-10\n",
"Location: [2.000037 2.0000002]\n",
"Error: 4.5171572038427144e-10\n",
"Location: [2.0000296 2.0000002]\n",
"Error: 2.932362686003387e-10\n",
"Location: [2.0000236 2.0000002]\n",
"Error: 1.894780721212186e-10\n",
"Location: [2.0000188 2.0000002]\n",
"Error: 1.1770377728037573e-10\n",
"Location: [2.000015 2.0000002]\n",
"Error: 7.579122746070865e-11\n",
"Location: [2.000012 2.0000002]\n"
]
}
],
"source": [
"locations = [g.numpy()]\n",
"error = float(\"inf\")\n",
"while error > 1e-10:\n",
" with tf.GradientTape() as tape:\n",
" tape.watch(g)\n",
" error = trilateration_error(r1, r2, r3, d1, d2, d3, g)\n",
" print(\"Error: {}\".format(error))\n",
" grad = tape.gradient(error, g)\n",
" g = g + (grad * -lr)\n",
" locations.append(g.numpy())\n",
" print(\"Location: {}\".format(locations[-1]))\n",
" error = error.numpy()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"locations = np.array(locations)\n",
"references = np.array([[2, -2], [10, 8], [-1, 6]])\n",
"locations = np.concatenate([locations, references], axis=0)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f5f64480e80>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(locations[:, 0], locations[:, 1], c=[\"red\"] * (len(locations) - 3) + [\"green\"] * 3)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python",
"language": "python",
"name": "conda-env-python-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment