Размер вашего x
равен [1, 3, height, width]
. Вызов x.unfold(1, size, stride)
пытается создать срезы размером 128 из измерения 1, которое имеет размер 3, поэтому он слишком мал для создания любого среза.
Вы не хотите создавать срезы по измерению 1, поскольку они являются каналами изображения (в данном случае RGB), и их нужно сохранить, как и для всех патчей. Патчи создаются только по высоте и ширине изображения.
patches = x.unfold(2, size, stride).unfold(3, size, stride)
Результирующий тензор будет иметь размер [1, 3, num_vertical_slices, num_horizontal_slices, 128, 128]
. Вы можете изменить его форму, чтобы объединить фрагменты, чтобы получить список патчей, то есть размером [1, 3, num_patches, 128, 128]
:
patches = patches.reshape(1, 3, -1, size, size)