This issue often occurs when using regularization like Dropout, i.e. Dropout makes your models “smaller” (lowers the capacity), thus your training loss might be higher than your validation loss.
However, since you are using a resnet, this won’t be the reason.
Another reason is the intrinsic variance of the dataset as @johnolafenwa said. If your dataset is quite small, the inner variance of the training dataset is just higher than in the validation set.
The most likely reason for me is, because you are collecting your training loss during the whole epoch while you are training the model. So at the beginning of each epoch the loss will be higher, at the end of an epoch lower. Since you are just summing the losses and dividing by the total number of images, your estimate might be a bit biased.