I’m all for throwing an error when the types don’t logically work for the given functions. But for example half/float/double automatic conversion as an option would be nice. Same for long/byte/short/int. These are only different types because of efficiency, and there’s no reason cross_entropy shouldn’t work with a byte tensor.
It’s also super frustrating to work in 16 bit precision, because so many of the built in functions either don’t work, or are slow using half precision floats. The slowness can’t even be easily fixed using casting, because then the gradients are the wrong types on the backward pass.