transform vs target_transform vs transforms in PyTorch (1)
Super Kai (Kazuya Ito)

Super Kai (Kazuya Ito) @hyperkai

About: I'm a web developer. Buy Me a Coffee: ko-fi.com/superkai SO: stackoverflow.com/users/3247006/super-kai-kazuya-ito X(Twitter): twitter.com/superkai_kazuya FB: facebook.com/superkai.kazuya

Joined:
Oct 21, 2021

transform vs target_transform vs transforms in PyTorch (1)

Publish Date: Jun 4
0 1

Buy Me a Coffee

*Memos:

There are the differences between transform, target_transform and transforms as shown below. *It's about origin and transform:
*Memos:

  • transform is for the function which must have one parameter for transform. *Resize(), RandomRotation(), RandomHorizontalFlip(), etc also can be used.
  • target_transform is for the function which must have one parameter for target(label).
  • transforms is for the function which must have two parameters for both transform and target(label). *Resize(), RandomRotation(), RandomHorizontalFlip(), etc also can be used.
  • Both transform and target_transform can be used at the same time.
  • transforms cannot be used with transform and/or target_transform at the same time.
  • According to my experiments, target_transform and transforms are useless.

<origin>

from torchvision.datasets import OxfordIIITPet

origin_data = OxfordIIITPet(
    root="data"
)

origin_data[0]
# (<PIL.Image.Image image mode=RGB size=394x500>, 0)

origin_data[50]
# (<PIL.Image.Image image mode=RGB size=500x333>, 1)

origin_data[100]
# (<PIL.Image.Image image mode=RGB size=333x500>, 2)
Enter fullscreen mode Exit fullscreen mode

<transform>

from torchvision.datasets import OxfordIIITPet
from torchvision.transforms.v2 import Resize

tfresize100_50_data = OxfordIIITPet(
    root="data",
    transform=Resize(size=[100, 50])
)

tfresize100_50_data[0]
# (<PIL.Image.Image image mode=RGB size=50x100>, 0)

tfresize100_50_data[50]
# (<PIL.Image.Image image mode=RGB size=50x100>, 1)

tfresize100_50_data[100]
# (<PIL.Image.Image image mode=RGB size=50x100>, 2)
Enter fullscreen mode Exit fullscreen mode
from torchvision.datasets import OxfordIIITPet

def tf_func(transform):
    return transform

tf_func_data = OxfordIIITPet(
    root="data",
    transform=tf_func
    # transform=lambda transform: transform    
)

tf_func_data[0]
# (<PIL.Image.Image image mode=RGB size=394x500>, 0)

tf_func_data[50]
# (<PIL.Image.Image image mode=RGB size=500x333>, 1)

tf_func_data[100]
# (<PIL.Image.Image image mode=RGB size=333x500>, 2)
Enter fullscreen mode Exit fullscreen mode
from torchvision.datasets import OxfordIIITPet

def tf_func(transform):
    return [0, 1, 2]

tf_func_data = OxfordIIITPet(
    root="data",
    transform=tf_func
    # transform=lambda transform: [0, 1, 2]
)

tf_func_data[0]
# ([0, 1, 2], 0)

tf_func_data[50]
# ([0, 1, 2], 1)

tf_func_data[100]
# ([0, 1, 2], 2)
Enter fullscreen mode Exit fullscreen mode
from torchvision.datasets import OxfordIIITPet

def tf_func():
    return [0, 1, 2]

tf_func_data = OxfordIIITPet(
    root="data",
    transform=tf_func
    # transform=lambda: [0, 1, 2]
)

tf_func_data[0]
# TypeError: tf_func() takes 0 positional arguments but 1 was given
Enter fullscreen mode Exit fullscreen mode
from torchvision.datasets import OxfordIIITPet

def tf_func(transform, target):
    return [0, 1, 2]

tf_func_data = OxfordIIITPet(
    root="data",
    transform=tf_func
    # transform=lambda transform, target: [0, 1, 2]
)

tf_func_data[0]
# TypeError: tf_func() missing 1 required positional argument: 'target'
Enter fullscreen mode Exit fullscreen mode

Comments 1 total

Add comment