Después de analizar esta pregunta: Intentando emular la regresión lineal usando Keras , he intentado dar mi propio ejemplo, solo para estudiar y desarrollar mi intuición.
Descargué un conjunto de datos simple y usé una columna para predecir otra. Los datos se ven así:
Ahora acabo de crear un modelo de keras simple con una sola capa lineal de un nodo y procedí a ejecutar un descenso de gradiente en ella:
from keras.layers import Input, Dense
from keras.models import Model
inputs = Input(shape=(1,))
preds = Dense(1,activation='linear')(inputs)
model = Model(inputs=inputs,outputs=preds)
sgd=keras.optimizers.SGD()
model.compile(optimizer=sgd ,loss='mse',metrics=['mse'])
model.fit(x,y, batch_size=1, epochs=30, shuffle=False)
Ejecutar el modelo así me da nan
pérdidas en cada época.
Así que decidí comenzar a probar cosas y solo obtengo un modelo decente si uso una tasa de aprendizaje ridículamente pequeña sgd=keras.optimizers.SGD(lr=0.0000001)
:
Ahora, ¿por qué está pasando esto? ¿Tendré que ajustar manualmente la tasa de aprendizaje de esta manera para cada problema que enfrento? ¿Estoy haciendo algo mal aquí? Se supone que este es el problema más simple posible, ¿verdad?
¡Gracias!
fuente
La normalización es más importante cuando tiene más de una variable dependiente. Si observa el diagrama de dispersión, puede ver valores atípicos. Una red neuronal sin capas ocultas es lo mismo que un modelo de regresión lineal. Por lo tanto, se ajusta a la mejor línea para minimizar la distancia de los residuos. Elimine los valores atípicos y se verá más apropiado.
fuente