Skip to content

Instantly share code, notes, and snippets.

@timeseries-ru
Last active January 18, 2020 14:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timeseries-ru/2a611fb5761931b5c6c3b225c4a7a9a0 to your computer and use it in GitHub Desktop.
Save timeseries-ru/2a611fb5761931b5c6c3b225c4a7a9a0 to your computer and use it in GitHub Desktop.
Planes trajectories autoencoding
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import keras\n",
"from keras.backend import clear_session"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"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": [
"def read_one(filename, flatten=False):\n",
" if flatten:\n",
" return plt.imread('./plane_paths_64/' + filename).flatten()\n",
" return plt.imread('./plane_paths_64/' + filename)\n",
"\n",
"def show_one(filename):\n",
" plt.imshow(read_one(filename));\n",
"\n",
"import os\n",
"files = os.listdir('./plane_paths_64')\n",
"\n",
"show_one(files[1])"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4096"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_shape = read_one(files[0], flatten=True).shape[0]\n",
"data_shape"
]
},
{
"cell_type": "code",
"execution_count": 153,
"metadata": {},
"outputs": [],
"source": [
"def fit_encoders(data, layers_forward = [1024, 128], layers_backward = [128, 1024]):\n",
" clear_session()\n",
" input_layer = layer = keras.layers.Input((data_shape,))\n",
" for current in layers_forward:\n",
" layer = keras.layers.Dense(current, activation='relu')(layer)\n",
" layer = encoded = keras.layers.Dense(32, activation='linear')(layer)\n",
" for current in layers_backward:\n",
" layer = keras.layers.Dense(current, activation='relu')(layer)\n",
" output = keras.layers.Dense(data_shape, activation='sigmoid', use_bias=False)(layer)\n",
" autoencoder = keras.models.Model(input_layer, output)\n",
" encoder = keras.models.Model(input_layer, encoded)\n",
" autoencoder.compile('adam', 'binary_crossentropy')\n",
" autoencoder.fit(\n",
" data, data, epochs=25, batch_size=32, verbose=True\n",
" )\n",
" return autoencoder, encoder"
]
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 819 ms\n"
]
}
],
"source": [
"%%time\n",
"\n",
"data = np.array([\n",
" read_one(file) for file in files\n",
"]).reshape(-1, data_shape)"
]
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0868\n",
"Epoch 2/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0231\n",
"Epoch 3/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0156\n",
"Epoch 4/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0119\n",
"Epoch 5/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0098\n",
"Epoch 6/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0085\n",
"Epoch 7/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0076\n",
"Epoch 8/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0068\n",
"Epoch 9/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0063\n",
"Epoch 10/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0058\n",
"Epoch 11/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0054\n",
"Epoch 12/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0049\n",
"Epoch 13/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0046\n",
"Epoch 14/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0042\n",
"Epoch 15/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0039\n",
"Epoch 16/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0037\n",
"Epoch 17/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0034\n",
"Epoch 18/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0031\n",
"Epoch 19/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0029\n",
"Epoch 20/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0027\n",
"Epoch 21/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0025\n",
"Epoch 22/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0023\n",
"Epoch 23/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0021\n",
"Epoch 24/25\n",
"4134/4134 [==============================] - 16s 4ms/step - loss: 0.0020\n",
"Epoch 25/25\n",
"4134/4134 [==============================] - 15s 4ms/step - loss: 0.0018\n"
]
}
],
"source": [
"autoencoder, encoder = fit_encoders(data)"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def process(file):\n",
" return (autoencoder.predict(np.array([read_one(file, flatten=True)])).reshape(64, 64) >= 0.5).astype(float)\n",
"\n",
"figure, axes = plt.subplots(1, 2, figsize=(12, 6))\n",
"axes[0].imshow(read_one(files[1]));\n",
"axes[1].imshow(process(files[1]));"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"figure, axes = plt.subplots(1, 2, figsize=(12, 6))\n",
"axes[0].imshow(read_one(files[1]));\n",
"axes[1].imshow(read_one(files[-2]));"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [],
"source": [
"source = encoder.predict(np.array([read_one(files[1], flatten=True)]))[0]\n",
"target = encoder.predict(np.array([read_one(files[-2], flatten=True)]))[0]\n",
"\n",
"deformations = []\n",
"length = 10\n",
"\n",
"def create_decoder():\n",
" layer = input_layer = keras.layers.Input((32,))\n",
" for current in autoencoder.layers[4:]:\n",
" layer = current(layer)\n",
" return keras.Model(input_layer, layer)\n",
"\n",
"decoder = create_decoder()\n",
"\n",
"for index in range(length + 1):\n",
" current = (1 - index / length) * source + index * target / length\n",
" deformations.append((decoder.predict(np.array([current]))[0].reshape(64, 64) >= 0.5).astype(float))"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x2160 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"figure, axes = plt.subplots(length // 2, 2, figsize=(12, 3 * length))\n",
"for index in range(length):\n",
" axes[index // 2, 0].imshow(deformations[index]);\n",
" axes[index // 2, 1].imshow(deformations[index + 1]);"
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/25\n",
"4134/4134 [==============================] - 24s 6ms/step - loss: 0.0842\n",
"Epoch 2/25\n",
"4134/4134 [==============================] - 23s 5ms/step - loss: 0.0223\n",
"Epoch 3/25\n",
"4134/4134 [==============================] - 23s 5ms/step - loss: 0.0153\n",
"Epoch 4/25\n",
"4134/4134 [==============================] - 23s 5ms/step - loss: 0.0114\n",
"Epoch 5/25\n",
"4134/4134 [==============================] - 23s 6ms/step - loss: 0.0092\n",
"Epoch 6/25\n",
"4134/4134 [==============================] - 23s 6ms/step - loss: 0.0079\n",
"Epoch 7/25\n",
"4134/4134 [==============================] - 23s 5ms/step - loss: 0.0069\n",
"Epoch 8/25\n",
"4134/4134 [==============================] - 22s 5ms/step - loss: 0.0061\n",
"Epoch 9/25\n",
"4134/4134 [==============================] - 22s 5ms/step - loss: 0.0054\n",
"Epoch 10/25\n",
"4134/4134 [==============================] - 22s 5ms/step - loss: 0.0048\n",
"Epoch 11/25\n",
"4134/4134 [==============================] - 23s 5ms/step - loss: 0.0043\n",
"Epoch 12/25\n",
"4134/4134 [==============================] - 23s 6ms/step - loss: 0.0039\n",
"Epoch 13/25\n",
"4134/4134 [==============================] - 23s 6ms/step - loss: 0.0035\n",
"Epoch 14/25\n",
"4134/4134 [==============================] - 23s 6ms/step - loss: 0.0031\n",
"Epoch 15/25\n",
"4134/4134 [==============================] - 23s 6ms/step - loss: 0.0028\n",
"Epoch 16/25\n",
"4134/4134 [==============================] - 24s 6ms/step - loss: 0.0024\n",
"Epoch 17/25\n",
"4134/4134 [==============================] - 23s 6ms/step - loss: 0.0022\n",
"Epoch 18/25\n",
"4134/4134 [==============================] - 23s 5ms/step - loss: 0.0019\n",
"Epoch 19/25\n",
"4134/4134 [==============================] - 24s 6ms/step - loss: 0.0017\n",
"Epoch 20/25\n",
"4134/4134 [==============================] - 23s 6ms/step - loss: 0.0015\n",
"Epoch 21/25\n",
"4134/4134 [==============================] - 24s 6ms/step - loss: 0.0014\n",
"Epoch 22/25\n",
"4134/4134 [==============================] - 24s 6ms/step - loss: 0.0012\n",
"Epoch 23/25\n",
"4134/4134 [==============================] - 23s 6ms/step - loss: 0.0011\n",
"Epoch 24/25\n",
"4134/4134 [==============================] - 24s 6ms/step - loss: 0.0010\n",
"Epoch 25/25\n",
"4134/4134 [==============================] - 24s 6ms/step - loss: 9.7690e-04\n"
]
}
],
"source": [
"assymetric_ae, assymetric_encoder = fit_encoders(data, [1024, 128], [2048])"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {},
"outputs": [],
"source": [
"source = assymetric_encoder.predict(np.array([read_one(files[1], flatten=True)]))[0]\n",
"target = assymetric_encoder.predict(np.array([read_one(files[-2], flatten=True)]))[0]\n",
"\n",
"assymetric_deformations = []\n",
"length = 10\n",
"\n",
"def create_assymetric_decoder():\n",
" layer = input_layer = keras.layers.Input((32,))\n",
" for current in assymetric_ae.layers[4:]:\n",
" layer = current(layer)\n",
" return keras.Model(input_layer, layer)\n",
"\n",
"assymetric_decoder = create_assymetric_decoder()\n",
"\n",
"for index in range(length + 1):\n",
" current = (1 - index / length) * source + index * target / length\n",
" assymetric_deformations.append((assymetric_decoder.predict(np.array([current]))[0].reshape(64, 64) >= 0.5).astype(float))"
]
},
{
"cell_type": "code",
"execution_count": 193,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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tye5IslVVfX7SZ6pqoPd/XRVHUxy6kwv7u57ktyTJFfVgd6l3ACcmZkNbLxznkHt7vd193XdfX2Sdyb5bHe/O8kDSY4sTzuS5P61pQRgJWY2cCHYye9BfX+S26rqiSS3LfsAzGRmAxtjlUv8P9Tdn0vyueXxt5Mc3v1IAOwGMxvYVN5JCgCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGuXSVJ1XVk0n+NckPkny/uw9V1YEkf5zk+iRPJvnl7v6X9cQEYFVmNrDpzucM6lu6+6buPrTs353keHffkOT4sg/ADGY2sLF2con/jiTHlsfHkty58zgArImZDWyMVQtqJ/lMVX2hqo4ua9d299NJsmyvWUdAAM6bmQ1stJXuQU1ya3c/VVXXJHmwqh5f9QDLcDyaJFfkpduICMB5MrOBjbbSGdTufmrZnkryiSS3JHmmqg4mybI9dZbX3tPdh7r70GW5fHdSA3BWZjaw6c5ZUKvqyqp62fOPk7wtySNJHkhyZHnakST3ryskAKsxs4ELwSqX+K9N8omqev75f9Ddn6qqzye5t6ruSvL1JO9YX0wAVmRmAxvvnAW1u7+W5MYzrH87yeF1hAJge8xs4ELgnaQAABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAURRUAABGUVABABhFQQUAYBQFFQCAUVYqqFX18qq6r6oer6rHqupNVXWgqh6sqieW7dXrDgvAuZnZwKZb9QzqB5J8qrtfm+TGJI8luTvJ8e6+IcnxZR+A/WdmAxvtnAW1qq5K8uYkH06S7v637v5OkjuSHFuedizJnesKCcBqzGzgQrDKGdSfTPKtJB+tqi9W1Yeq6sok13b300mybK9ZY04AVmNmAxtvlYJ6aZLXJ/lgd9+c5Hs5j0tDVXW0qk5U1Ynn8uw2YwKwIjMb2HirFNSTSU5290PL/n3ZGn7PVNXBJFm2p8704u6+p7sPdfehy3L5bmQG4OzMbGDjnbOgdvc3k3yjql6zLB1O8uUkDyQ5sqwdSXL/WhICsDIzG7gQXLri8341ycer6iVJvpbkV7JVbu+tqruSfD3JO9YTEYDzZGYDG22lgtrdDyc5dIZPHd7dOADslJkNbDrvJAUAwCgKKgAAoyioAACMoqACADCKggoAwCgKKgAAoyioAACMoqACADCKggoAwCgKKgAAoyioAACMUt29dwer+laSf0zyiiT/tGcH3jl510ve9bqY8v54d79yN8NczMzsPSPvesm7XmuZ2XtaUH940KoT3X1ozw+8TfKul7zrJS87tWlfE3nXS971kneLS/wAAIyioAIAMMp+FdR79um42yXvesm7XvKyU5v2NZF3veRdL3mzT/egAgDA2bjEDwDAKHteUKvq9qr6SlV9taru3uvjn0tVfaSqTlXVI6etHaiqB6vqiWV79X5mfF5Vvbqq/qKqHquqR6vqvcv61LxXVNVfVdWXlry/vayPzPu8qrqkqr5YVZ9c9sfmraonq+pvq+rhqjqxrE3O+/Kquq+qHl++j980Oe/FyMzeXeb2+pnZ67OXM3tPC2pVXZLk95L8QpLXJXlXVb1uLzOs4GNJbn/B2t1Jjnf3DUmOL/sTfD/Jr3f3TyV5Y5L3LH+eU/M+m+St3X1jkpuS3F5Vb8zcvM97b5LHTtufnvct3X3Tab/2Y3LeDyT5VHe/NsmN2fpznpz3omJmr4W5vX5m9vrs3czu7j37SPKmJJ8+bf99Sd63lxlWzHl9kkdO2/9KkoPL44NJvrLfGc+S+/4kt21C3iQvTfLXSd4wOW+S65a/cG9N8snp3w9Jnkzyihesjcyb5Kok/5DlXvjpeS/GDzN7T7Kb27ub0cxeX9Y9ndl7fYn/VUm+cdr+yWVtumu7++kkWbbX7HOe/6Sqrk9yc5KHMjjvcunl4SSnkjzY3aPzJvndJL+R5N9PW5uct5N8pqq+UFVHl7WpeX8yybeSfHS5HPehqroyc/NejMzsNTK318LMXp89ndl7XVDrDGt+jcAOVdWPJvmTJL/W3d/d7zwvprt/0N03ZetfubdU1U/vd6azqapfTHKqu7+w31nOw63d/fpsXZJ9T1W9eb8DvYhLk7w+yQe7++Yk38usS1mY2Wtjbu8+M3vt9nRm73VBPZnk1aftX5fkqT3OsB3PVNXBJFm2p/Y5zw9V1WXZGnIf7+4/XZbH5n1ed38nyeeyde/Y1Ly3JvmlqnoyyR8leWtV/X7m5k13P7VsTyX5RJJbMjfvySQnl7MxSXJftobf1LwXIzN7DczttTGz12tPZ/ZeF9TPJ7mhqn6iql6S5J1JHtjjDNvxQJIjy+Mj2bpnaN9VVSX5cJLHuvt3TvvU1LyvrKqXL49/JMnPJ3k8Q/N29/u6+7ruvj5b36uf7e53Z2jeqrqyql72/OMkb0vySIbm7e5vJvlGVb1mWTqc5MsZmvciZWbvMnN7fczs9drzmb0PN9m+PcnfJfn7JL+518dfId8fJnk6yXPZ+tfCXUl+LFs3XT+xbA/sd84l689m63Lb3yR5ePl4++C8P5Pki0veR5L81rI+Mu8Lsv9c/uOG+5F5s3V/0JeWj0ef//s1Ne+S7aYkJ5bviT9LcvXkvBfjh5m963nN7b3JbWavJ/OezWzvJAUAwCjeSQoAgFEUVAAARlFQAQAYRUEFAGAUBRUAgFEUVAAARlFQAQAYRUEFAGCU/wf3KOlPM1thNgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 864x2160 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"figure, axes = plt.subplots(length // 2, 2, figsize=(12, 3 * length))\n",
"for index in range(length):\n",
" axes[index // 2, 0].imshow(assymetric_deformations[index]);\n",
" axes[index // 2, 1].imshow(assymetric_deformations[index + 1]);"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "py35",
"language": "python",
"name": "py35"
},
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment