keras-team / keras

Deep Learning for humans
http://keras.io/
Apache License 2.0
61.92k stars 19.46k forks source link

CNN regression model gives same output for all inputs #14458

Closed ankit-ak closed 2 years ago

ankit-ak commented 3 years ago

I'm trying to build a CNN regression model. The input data is satellite images of 10 (256x256x10) bands over 10 years stacked together to obtain an array of 256x256x100.

model.add(layers.Conv2D(130, (3, 3), activation="linear", input_shape=(256,256,100)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(200, (3, 3), activation="linear"))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(250, (3, 3), activation="linear"))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(150, (3, 3), activation='relu'))
model.add(layers.Conv2D(125, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(100, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(50, activation='relu'))
model.add(layers.Dropout(.5))
model.add(layers.Dense(20, activation='relu'))
model.add(layers.Dense(1))
model.compile(optimizer=tf.keras.optimizers.Adam(lr=1e-5), loss='mse',metrics=['mae']) 

Training steps:

Epoch 1/10
3/3 [==============================] - 23s 10s/step - loss: 1889.4431 - mae: 42.5618 - val_loss: 1331.6744 - val_mae: 34.7333
Epoch 2/10
3/3 [==============================] - 16s 5s/step - loss: 1204.0300 - mae: 32.2895 - val_loss: 560.3227 - val_mae: 19.5194
Epoch 3/10
3/3 [==============================] - 17s 6s/step - loss: 265.4678 - mae: 13.1045 - val_loss: 159.9512 - val_mae: 9.0359
Epoch 4/10
3/3 [==============================] - 16s 5s/step - loss: 135.8383 - mae: 8.9351 - val_loss: 214.3396 - val_mae: 9.1829
Epoch 5/10
3/3 [==============================] - 16s 5s/step - loss: 197.9119 - mae: 11.5957 - val_loss: 284.3577 - val_mae: 11.8678
Epoch 6/10
3/3 [==============================] - 16s 5s/step - loss: 228.0153 - mae: 11.9106 - val_loss: 149.7715 - val_mae: 9.3636
Epoch 7/10
3/3 [==============================] - 17s 8s/step - loss: 194.2864 - mae: 10.8949 - val_loss: 165.9819 - val_mae: 7.3582
Epoch 8/10
3/3 [==============================] - 16s 5s/step - loss: 169.8509 - mae: 10.0567 - val_loss: 165.9775 - val_mae: 7.1800
Epoch 9/10
3/3 [==============================] - 16s 8s/step - loss: 144.1278 - mae: 9.6424 - val_loss: 144.2434 - val_mae: 8.6395
Epoch 10/10
3/3 [==============================] - 16s 5s/step - loss: 133.0716 - mae: 9.3021 - val_loss: 283.4138 - val_mae: 11.7555

But predictions[:5] and expected_values[:5] are:

(array([[41.58102], [41.58102], [41.58102], [41.58102], [41.58102]], dtype=float32),
 array([50.92509273, 34.59282102, 32.20900374, 61.68526925,  1.90542364]))

Evalution scores are:

mean_absolute_error: 14.680679061682326
mean_squared_error: 18.826801113162563
explained_variance_score: 0.0
r2_score: -0.05091949778656968

actual vs prediction plot

Any ideas?

Cyril9227 commented 3 years ago

You don't have enough data / your validation set is not a good proxy for your test set / your training didn't go well (needs more epoch etc.) / your model isn't powerful enough

sushreebarsa commented 2 years ago

@ankit-ak In order to expedite the trouble-shooting process, please provide a code snippet to reproduce the issue reported here. Thanks!