Using float16 might be too limiting, as the precision limitations for integer values start at 2049 as described here 1.
float32 might be suitable, but it also depends on the overall gains.
While it’s true that LongTensors would need more memory, you are often not dealing with huge target tensors, so the memory savings might be small.
E.g. how large is the target tensor for nn.CrossEntropyLoss in your case and how much memory would you save if you could use e.g. int32?