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(np.double)
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.
This is simply a conversion problem. Pytorch uses
torch.float32by default but you explicitly create a tensor of typetorch.float64. So you also have to tell the convolutional layers the correct dtype using the keyword argumentdtype. A working example of the code looks like: