Skip to content
Snippets Groups Projects
Commit 1d122c70 authored by Perez Visaires, Jon's avatar Perez Visaires, Jon
Browse files

Notebooks

parent fd6001f9
No related branches found
No related tags found
No related merge requests found
import imageio
import PIL
import numpy as np
frames = 200
time_steps = 6
images_in = []
images_out = []
images_pred = []
images_combi = []
for number = 10 to 109:
for number in range(frames):
images_in.append(imageio.imread("in_" + str(number) + ".png"))
images_out.append(imageio.imread("out_" + str(number) + ".png"))
imageio.mimsave("./in.gif", images_in)
imageio.mimsave("./out.gif", images_out)
for number in range(time_steps, frames):
images_pred.append(imageio.imread("pred_" + str(number) + ".png"))
imageio.mimsave("./pred.gif", images_pred)
for number in range(time_steps, frames):
list_im = ["in_" + str(number) + ".png", "out_" + str(number) + ".png", "pred_" + str(number) + ".png"]
imgs = [PIL.Image.open(i) for i in list_im]
min_shape = sorted([(np.sum(i.size), i.size) for i in imgs])[0][1]
imgs_comb = np.hstack((np.asarray(i.resize(min_shape)) for i in imgs))
imgs_comb = PIL.Image.fromarray(imgs_comb)
imgs_comb.save("combi_" + str(number) + ".png")
for number in range(time_steps, frames):
images_combi.append(imageio.imread("combi_" + str(number) + ".png"))
imageio.mimsave("./combi.gif", images_combi)
\ No newline at end of file
%% Cell type:markdown id: tags:
# Librerías
%% Cell type:code id: tags:
``` python
import os
import sys
import tensorflow as tf
import numpy as np
import scipy.misc
import matplotlib.pyplot as plt
```
%% Cell type:code id: tags:
``` python
sys.path.append("../tools") # Herramientas propias de MantaFlow
import uniio # Lectura de ficheros .uni
```
%% Cell type:markdown id: tags:
# Hiperparámetros
%% Cell type:code id: tags:
``` python
num_sims = 2000 # num_sims - 1000 escenas.
frames = 200 # Frames por escena.
epochs_autoencoder = 5
epochs_lstm = 50
epochs_pretraining = 1
batch_size_autoencoder = 4
batch_size_lstm = 16
time_steps_lstm = 6
out_time_steps_lstm = 1
save_autoencoder = True
save_lstm = True
```
%% Cell type:markdown id: tags:
# Datos iniciales
%% Cell type:markdown id: tags:
Inicializamos las seed para funciones random. Al ser inicializadas al mismo número, el resultado no cambiará en cada ejecución.
%% Cell type:code id: tags:
``` python
np.random.seed(13)
```
%% Cell type:markdown id: tags:
Ruta a los datos de simulación, donde también se guardan los resultados.
%% Cell type:code id: tags:
``` python
base_path = "../data"
```
%% Cell type:markdown id: tags:
## Carga de datos
%% Cell type:markdown id: tags:
Podemos elegir el número de escenas y los frames de cada una, dependiendo de la configuración de los simuladores clásicos.
%% Cell type:code id: tags:
``` python
print("Cargamos {} escenas, con {} frames cada una.".format(num_sims-1000, frames))
print("Trabajamos con un total de {} frames.".format((num_sims-1000) * frames))
```
%% Cell type:markdown id: tags:
Cargamos los datos desde los ficheros .uni en arrays de numpy. Los .uni son ficheros propios de MantaFlow, en los que se guarda los resultados de los simuladores clásicos. En este caso cargamos los datos de densidad de humo simulados previamente.
%% Cell type:code id: tags:
``` python
densities = []
for sim in range(1000, num_sims):
if os.path.exists("%s/simSimple_%04d" % (base_path, sim)): # Comprueba la existencia de las carpetas (cada una 100 frames de datos).
for i in range(0, frames):
filename = "%s/simSimple_%04d/density_%04d.uni" # Nombre de cada frame (densidad).
uni_path = filename % (base_path, sim, i) # 200 frames por sim, rellena parametros de la ruta.
header, content = uniio.readUni(uni_path) # Devuelve un array Numpy [Z, Y, X, C].
h = header["dimX"]
w = header["dimY"]
arr = content[:, ::-1, :, :] # Cambia el orden de Y.
arr = np.reshape(arr, [w, h, 1]) # Deshecha Z.
densities.append(arr)
```
%% Cell type:markdown id: tags:
Devuelve los datos de cada frame (canal de grises, 0 a 255) en una lista de Python. En este caso las imagenes son de 64x64 pixels. (64, 64, 1)
%% Cell type:markdown id: tags:
Necesitamos al menos 2 simulaciones para trabajar de manera adecuada.
%% Cell type:code id: tags:
``` python
load_num = len(densities)
if load_num < 2 * frames:
print("Error - Usa al menos dos simulaciones completas")
exit(True)
```
%% Cell type:markdown id: tags:
Convertimos la lista "densities" en un array de Numpy.
%% Cell type:code id: tags:
``` python
densities = np.reshape(densities, (len(densities), 64, 64, 1))
print("Forma del array: {}".format(densities.shape))
print("Dimensiones del array: {}".format(densities.ndim))
print("Número de pixels en total: {}".format(densities.size))
```
%% Cell type:markdown id: tags:
## Creación del set de validación
%% Cell type:markdown id: tags:
Con el fin de entrenar correctamente a los modelos Deep Learning, separamos los datos de densidad en un set de entrenamiento y otro de validación. Creamos el set de validación de entre los datos de simulación generados, al menos una simulación completa o el 10% de los datos (el que sea mayor de los dos).
%% Cell type:code id: tags:
``` python
vali_set_size = max(200, int(load_num * 0.1)) # Al menos una simu completa o el 10% de los datos.
vali_data = densities[load_num - vali_set_size : load_num, :] # "load_num" datos del final de "densities".
train_data = densities[0 : load_num - vali_set_size, :] # El resto de datos del principio de "densities".
print("Separamos en {} frames de entrenamiento y {} frames de validación.".format(train_data.shape[0], vali_data.shape[0]))
```
%% Cell type:markdown id: tags:
Convertimos los datos de entrenamiento y validación en arrays.
%% Cell type:code id: tags:
``` python
train_data = np.reshape(train_data, (len(train_data), 64, 64, 1))
vali_data = np.reshape(vali_data, (len(vali_data), 64, 64, 1))
print("Forma del set de entrenamiento: {}".format(train_data.shape))
print("Forma del set de validación: {}".format(vali_data.shape))
```
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment