You are right! Thank you for your help, appreciate it!
I just needed to cast the bilinear output as .byte()!  I did not realised this as mode='nearest' is able to take in tensor as byte type and output given is already in byte. Meanwhile, mode='bilinear needs FloatTensor and outputs in float. Thus, to show the image, we have to put it back to byte type.
I am actually amazed that pytorch has implemented resizing for GPU. Now I can skip using cv2.resize() and remain the tensor on the GPU for resizing instead!
Any idea on whether are there major differences between cv2.resize() -> bilinear to F.interpolate(....,mode='bilinear')? Your comments are appreciated.