Autocasting
class torch.autocast(device_type, dtype=None, enabled=True, cache_enabled=None)
Instances of "autocast" serve as context managers or decorators
   that allow regions of your script to run in mixed precision.
In these regions, ops run in an op-specific dtype chosen by
   autocast to improve performance while maintaining accuracy. See the
   Autocast Op Reference for details.
When entering an autocast-enabled region, Tensors may be any type.
   You should not call "half()" or "bfloat16()" on your model(s) or
   inputs when using autocasting.
"autocast" should wrap only the forward pass(es) of your network,
   including the loss computation(s).  Backward passes under autocast
   are not recommended. Backward ops run in the same type that
   autocast used for corresponding forward ops.
Example for CUDA Devices:
  # Creates model and optimizer in default precision
  model = Net().cuda()
  optimizer = optim.SGD(model.parameters(), ...)
