How to Fix RuntimeError: Expected object of scalar type Double but got scalar type Float

PyTorch has three main different data types that can represent floating point numbers.

  1. torch.float32 or torch.float
  2. torch.float64 or torch.double
  3. torch.bfloat16

In this article, we will talk about torch.float, and torch.double data type and related errors.

What is torch.float32?

The torch.float32 is a 32-bit floating point number, also known as a “single precision” float. It takes up less memory and is faster to perform calculations, but it may not be as accurate as a torch.float64.

import torch

# Create a float32 tensor
main_tensor = torch.randn(2, 2, dtype=torch.float32)

print(main_tensor)

Output

tensor([[0.5858, 1.0883],
        [0.6733, 0.4548]])

What is torch.float64?

The torch.float64 is a 64-bit floating point number, also known as a “double precision” float. It takes up more memory and is slower to perform calculations, but it is more accurate than a torch.float32.

import torch

# Create a float64 tensor
main_tensor = torch.randn(2, 2, dtype=torch.float64)

print(main_tensor)

Output

tensor([[-0.8973, 1.3078],
        [-0.9175, -1.3086]], dtype=torch.float64)

The double data type has a 64-bit floating point number.

The float data type has a 32-bit floating point number.

If you pass the 32-bit floating point number instead of a 64-bit floating number, it will throw a RuntimeError, and in this post, we will discuss the RuntimeError and how to fix it.

RuntimeError: Expected object of scalar type Double but got scalar type Float

The RuntimeError: Expected object of scalar type Double but got scalar type Float error in Pytorch occurs when a function or operation was expecting a scalar value of type double (a 64-bit floating point number) for a tensor. But, it received a scalar value of type float (a 32-bit floating point number) as input.

If the function or operation does not support, float, or the input was incorrectly passed as a float instead of a double.

How to fix RuntimeError: Expected object of scalar type Double but got scalar type Float

To fix the RuntimeError: Expected object of scalar type Double but got scalar type Float error, the input value should be cast to double, or the function should be modified to support float inputs.

To convert your tensor to float64, use the torch.double() method.

To convert your tensor to float32, use the torch.float() method.

You can also use the .to() method to convert the tensor to the desired data type.

import torch

# Create a tensor
main_tensor = torch.randn(2, 2)

double_tensor = main_tensor.double()

float_tensor = main_tensor.float()

print(main_tensor)
print(double_tensor)
print(float_tensor)

Output

tensor([[-1.0531, 0.6726],
        [ 0.6947, -0.3040]])
tensor([[-1.0531, 0.6726],
        [ 0.6947, -0.3040]], dtype=torch.float64)
tensor([[-1.0531, 0.6726],
        [ 0.6947, -0.3040]])

You can see from the output that we converted a normal tensor to type float32 and float64 tensors.

When working with either float32 or float64 data type, ensure you are not using both simultaneously. 

It is always better to use the float64 data type for more accuracy, and if the input is in the float32 data type, you can convert it to the float64 data type.

I hope this solution resolves your issue!

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.