I am training an image super-resolution CNN for some medical data. I split our dataset to 300 patients for training and 50 patients for testing.
I am using dropout of 50% and aware that dropout can cause similar phenomenon. However, I am not talking about training loss over the training phase and testing loss over the testing phase.
The two metrics are all produced in the testing phase. I am using the testing mode to predict BOTH training patients and testing patients. The result is intriguing.
In terms of the loss of super-resolved image between ground truth, the testing patients are lower than training patients.
The plot below shows that both losses for the training set and the testing set are steadily dropping over epochs. But the testing loss is always lowering than the training. It is very puzzling to me to explain why. Also, the glitch between epoch 60 and epoch 80 is weird to me, too. If someone has an explanation for those problems, it will be more than appreciated.
EDIT:
The loss are calculate by the
root mean square error
between predicted output and Ground Truth
The CNN take X-Y pair to train, for example the training loss in the above plot are calculated by
def rmse(x, y):
p = model.predict(x)
return numpy.sqrt(skimage.measure.compare_mse(p, y))