I would start by simple examples checking network’s performance. Kinda step by step.
If it can identify very noisy images then reduce the noise and so. Then try for the gamma from very unrealistic images to realistic ones.
Train one network per task. Modeling noise is totally different from modeling contrast ie.
If you manage to make everything to work then try to train everything independently then try a single network.
Some ideas:
Dropout is required when your network overfits, which doesn’t seem to be the case.
You need non-linearities (activation functions–> relu)
You may want to start with already-designed networks. If you find anything that works for MNIST dataset, should be adequate to yours.
Also be sure about the correctness of your dataset. jpg images are noisy due to the compression. You have to be sure that the splits are perceptually ok.