RuntimeError: expected scalar type Double but found Float even though I convert to double

def encoder_block(inp, max_pool, in_channels):
    conv = torch.nn.Conv2d(in_channels=in_channels, out_channels=64, kernel_size=3, padding='same')(inp.double())
    relu = torch.nn.ReLU()(conv)
    conv = torch.nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, padding='same')(relu)
    relu = torch.nn.ReLU()(conv)
    if max_pool:
        return torch.nn.MaxPool2d(2,2)(relu)
    return relu

test_load = nib.load(fpath).get_fdata()
test_numpy = test_load[:,:,0].reshape(1,1,256,256).astype('float64')
tens = torch.DoubleTensor(test_numpy)
out = encoder_block(tens, True, 1)

This code should take a nifti file from my local storage, convert it to a numpy array then perform some convolutions on the 2d image as a basic test just for now.

The error happens on the first conv2d and says RuntimeError: expected scalar type Double but found Float. I’m not sure what else I can do to convert my data to float.

Your model is using float32 parameters and buffers by default while you are explicitly casting the input to float64. Either cast the inputs to float32 or the model to float64, if you really need this high precision and are fine with the performance penalty (especially on GPU).