Python - ¿Cómo modificar esta gráfica de los datos producidos por Keras?

 
Vista:
sin imagen de perfil

¿Cómo modificar esta gráfica de los datos producidos por Keras?

Publicado por skan (3 intervenciones) el 21/01/2023 21:38:30
Buenas

Estaba mirándome un ejemplo de redes neuronales en el que intentan predecir una serie temporal de temperaturas con información adicional de otras variables meteorológicas.

https://keras.io/examples/timeseries/timeseries_weather_forecasting/

La cuestión es que apenas conozco Python (y Keras), no soy programador ni informático, yo aprendí un poco de R y C++.


En ese artículo ajustan un modelo y luego lo usan para dibujar algunas predicciones, pienso de que de forma cutre.


He simplificado el código a esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def show_plot(plot_data, future, title):
    labels = ["History", "True Future", "Model Prediction"]
    marker = [".-", "rx", "go"]
    time_steps = list(range(-past, 0)) # rango negativo para tiempo pasado.
 
    plt.title(title)
 
    for i, val in enumerate(plot_data):
        if i:  # dibuja el punto
            plt.plot(future, plot_data[i], marker[i], markersize=10, label=labels[i])
        else:
            # dibuja la linea cuando i==0
            plt.plot(time_steps, plot_data[i].flatten(), marker[i], label=labels[i])
    plt.legend()
    plt.xlim([time_steps[0], (future + 5) * 2])
    plt.xlabel("Time-Step")
    plt.show()
    return
 
 
for x, y in dataset_val.take(5):
    show_plot([x[0][:, 1].numpy(), y[0], model.predict(x)[0]], 12, "Single Step Prediction")

Y he identificado la parte del código que dibuja la línea azul y la que dibuja el resto.


La cuestión es que sigue siendo un poco enrevesado porque los objetos devueltos por el modelo de red neuronal complicados, con este aspecto.
1
<BatchDataset shapes: ((None, None, 4), (None,)), types: (tf.float64, tf.float64)>
Según la documentación son batches de tuplas (batch_of_sequences, batch_of_targets).

Con ello generan una serie de dibujos así:

timeseries_weather_forecasting_26_1

timeseries_weather_forecasting_26_3


Mi pregunta es...
¿Cómo hago para que en vez de generar una gráfica diferente para cada punto me genere todo en un mismo dibujo, por ejemplo las siguientes 50 predicciones?

Ese 12, que es el parámetro "future"... ¿no debería ir adquiriendo diferentes valores?

No tengo claro lo que hace ese dataset_val.take(5) o por qué se hace así.
Supongo que ha habrá que cambiar tanto ese take y el valor de future.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

¿Cómo modificar esta gráfica de los datos producidos por Keras?

Publicado por skan (3 intervenciones) el 21/01/2023 21:42:09
También hay un trozo de código con la configuración de los parámetros:

1
2
3
4
5
6
7
8
split_fraction = 0.715
train_split = int(split_fraction * int(df.shape[0]))
step = 6
past = 720
future = 72
learning_rate = 0.001
batch_size = 256
epochs = 10
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar