Cuando uso más datos para entrenar un modelo NN de TensorFlow, ocurre algo inesperado.
Intento realizar este ejercicio de TensorFlow, cuando doy un valor más alto a xs
y ys
durante el entrenamiento, la pérdida comienza a aumentar. ¿Por qué sucede esto? ¿Estoy haciendo algo mal?
Se ve bien cuando max
es 19
, pero no para 20
.
import tensorflow as tf
import numpy as np
from tensorflow import keras
def main():
print(tf.<strong>version</strong>)
model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=1)])
model.compile(optimizer='sgd', loss="mean_squared_error")
min = 0
max = 20 # la pérdida aumentará si se dan más datos
xs = np.array([float(x) for x in range(min, max)], dtype=np.float32)
ys = np.array([float(3 * x + 1) for x in range(min, max)], dtype=np.float32)
print(xs, sep=',')
print(ys, sep=',')
model.fit(xs, ys, epochs=10)
print(model.predict([100]))
if name == "main":
main()
Resultados:
Epoch 1/10
1/1 [==============================] – 0s 85ms/step – loss: 1813.5785
Epoch 2/10
1/1 [==============================] – 0s 444us/step – loss: 3997.2852
Epoch 3/10
1/1 [==============================] – 0s 392us/step – loss: 8810.5635
Epoch 4/10
1/1 [==============================] – 0s 349us/step – loss: 19419.8730
Epoch 5/10
1/1 [==============================] – 0s 315us/step – loss: 42804.6797
Epoch 6/10
1/1 [==============================] – 0s 309us/step – loss: 94348.9844
Epoch 7/10
1/1 [==============================] – 0s 365us/step – loss: 207961.6875
Epoch 8/10
1/1 [==============================] – 0s 414us/step – loss: 458384.1875
Epoch 9/10
1/1 [==============================] – 0s 494us/step – loss: 1010359.8125
Epoch 10/10
1/1 [==============================] – 0s 347us/step – loss: 2227010.5000
davy.ai
Cuando incrementamos el valor de la variable
max
para los datos de entrenamiento, agregamos más puntos de datos al conjunto de datos. En este código en particular, el modelo se entrena utilizando valores de entrada demin
amax
, es decir, se entrena para predecir la salidays
dada la entradaxs
. El modelo es un modelo de regresión lineal simple, que busca encontrar una relación lineal entrexs
eys
.Cuando aumentamos el valor de
max
en el código, añadimos más puntos de datos para entrenar el modelo. Como podemos ver en los resultados, la pérdida comienza con un valor alto y va aumentando con cada época. Esto implica que el modelo no es capaz de aprender la relación entre la entrada y la salida con precisión.Esto sucede porque el modelo no es lo suficientemente complejo como para manejar un gran número de puntos de datos. Agregar más puntos de datos sin incrementar el número de capas o neuronas en el modelo puede llevar al sobreajuste o al subajuste de los datos. En este caso, el modelo lineal no es capaz de captar la relación compleja entre
xs
eys
.Para solucionar esto, podemos hacer el modelo más complejo agregando más capas o neuronas, o utilizar un modelo no lineal como una red neuronal. También podemos intentar reducir la tasa de aprendizaje o aumentar el número de épocas para ver si eso mejora la precisión del modelo.