
¿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:
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.
Según la documentación son batches de tuplas (batch_of_sequences, batch_of_targets).
Con ello generan una serie de dibujos así:


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.
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)>
Con ello generan una serie de dibujos así:


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


0