Why MNIST training data cannot be transformed into Tensor?

When creating MNIST object, we can set the “transform” parameter to be “torchvision.transforms.ToTensor()”, as following:

mnist = torchvision.datasets.MNIST(
root=‘./mnist/’,
train=True,
transform=torchvision.transforms.ToTensor()
)

When loaded by DataLoader, the training data can be transformed into FloatTensor.
However, if I use a torchvision.transforms.ToTensor() object to directly transform the training data, as following:

torchvision.transforms.ToTensor()(mnist.train_data)

error will appear:

AttributeError: ‘torch.ByteTensor’ object has no attribute ‘tobytes’

What is the type of mnist.train_data?

It’s torch.ByteTensor

Since it’s already a tensor, why are you trying to call ToTensor on it?

So, why we can set the “transform” parameter to be “torchvision.transforms.ToTensor()” when creating MNIST object?

mnist = torchvision.datasets.MNIST(
root=’./mnist/’,
train=True,
transform=torchvision.transforms.ToTensor()
)