"""
******************************************************
pi.py
*****************************************
Ecuacion inventada de partida para los valores de entrada y salida.
f(x)=(x**2)*π
π=3.141618
prediccion=232.690
valor real=234.127
********************************************************
Se puede jugar con el programa para disminuir el error.
Realizado en un ordenador con Ubuntu 20.04.6 LTS.
Editado en Google Colab.
Tarda en predecir el valor dado aproximadamente 4 mn.
con una velocidad de bajada de 518.1 Mbps
"""
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# Datos de entrada y salida
x_values = np.array([[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9],
[10],
[11],
[12],
[13],
[14],
[16],
[20],
[22],
[23]], dtype=float)
y_values = np.array([[3.14151618],
[12.56606472],
[28.27314562],
[50.26547272],
[78.53920225],
[113.0970700],
[153.93827621],
[200.06382064],
[251.47170338],
[314.15161834],
[380.12423456],
[452.3876786],
[530.9165454],
[615.7374567],
[804.228096 ],
[1256.606472],
[1520.493744],
[1661.862059]], dtype=float)
# Creamos un modelo de red neuronal con una capa oculta de 12 neuronas
model = tf.keras.Sequential([
tf.keras.layers.Dense(units=20, activation='relu', input_shape=[1]),
tf.keras.layers.Dense(units=1)
])
print("Imprimimos el modelo")
print("********************")
print(model)
# Compilar el modelo
model.compile(optimizer='adam', loss='mean_squared_error')
print("********************")
print('\n')
# Entrenar el modelo con 10000 vueltas o epochs
model.fit(x_values, y_values, epochs=100000,verbose=0)
# Le mandamos realizar una predicción para un nuevo valor de 8.6329
print("Inprimimos nuestro valor de prediccion, x-y")
print("********************")
print('\n')
new_x = np.array([8.6329], dtype=float)
print(new_x)
predicted_y = model.predict(new_x)
print(predicted_y)
print("Predicción para x =", new_x[0], ":", predicted_y[0][0])
# Graficar los puntos de entrada y la regresión
plt.scatter(x_values, y_values, color='blue', label='Valores de entrada')
plt.scatter(new_x, predicted_y, color='red', label='Valor de predicción')
plt.plot(x_values, model.predict(x_values), color='green', label='Regresión')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.show()
"""
Imprimimos el modelo
********************
<keras.engine.sequential.Sequential object at 0x7ee90d47ead0>
********************
Inprimimos nuestro valor de prediccion, x-y
********************
[8.6329]
1/1 [==============================] - 0s 46ms/step
[[232.6906]]
Predicción para x = 8.6329 : 232.6906
1/1 [==============================] - 0s 43ms/step
"""