DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

transform vs target_transform vs transforms in PyTorch (3)

Buy Me a Coffee

*Memos:

  • My post explains origin and transform.
  • My post explains target_transform and transform & target_transform.

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

<transforms>

from torchvision.datasets import OxfordIIITPet from torchvision.transforms.v2 import Resize tfsresize100_50_func_data = OxfordIIITPet( root="data", transforms=Resize(size=[100, 50]) ) tfsresize100_50_func_data[0] # (<PIL.Image.Image image mode=RGB size=50x100>, 0)  tfsresize100_50_func_data[50] # (<PIL.Image.Image image mode=RGB size=50x100>, 1)  tfsresize100_50_func_data[100] # (<PIL.Image.Image image mode=RGB size=50x100>, 2) 
Enter fullscreen mode Exit fullscreen mode
from torchvision.datasets import OxfordIIITPet def tfs_func(transform, target): return [transform, target] tfs_func_data = OxfordIIITPet( root="data", transforms=tfs_func # transforms=lambda transform, target: [transform, target] ) tfs_func_data[0] # (<PIL.Image.Image image mode=RGB size=394x500>, 0)  tfs_func_data[50] # (<PIL.Image.Image image mode=RGB size=500x333>, 1)  tfs_func_data[100] # (<PIL.Image.Image image mode=RGB size=333x500>, 2) 
Enter fullscreen mode Exit fullscreen mode
from torchvision.datasets import OxfordIIITPet def tfs_func(transform, target): return [target, transform] tfs_func_data = OxfordIIITPet( root="data", transforms=tfs_func # transforms=lambda transform, target: [target, transform] ) tfs_func_data[0] # (0, <PIL.Image.Image image mode=RGB size=394x500>)  tfs_func_data[50] # (1, <PIL.Image.Image image mode=RGB size=500x333>)  tfs_func_data[100] # (2, <PIL.Image.Image image mode=RGB size=333x500>) 
Enter fullscreen mode Exit fullscreen mode
from torchvision.datasets import OxfordIIITPet def tfs_func(transform, target): return [[0, 1, 2], [3, 4, 5]] tfs_func_data = OxfordIIITPet( root="data", transforms=tfs_func # transforms=lambda transform, target: [[0, 1, 2], [3, 4, 5]] ) tfs_func_data[0] # ([0, 1, 2], [3, 4, 5])  tfs_func_data[50] # ([0, 1, 2], [3, 4, 5])  tfs_func_data[100] # ([0, 1, 2], [3, 4, 5]) 
Enter fullscreen mode Exit fullscreen mode
from torchvision.datasets import OxfordIIITPet def tfs_func(): return [[0, 1, 2], [3, 4, 5]] tfs_func_data = OxfordIIITPet( root="data", transforms=tfs_func # transforms=lambda: [[0, 1, 2], [3, 4, 5]] ) tfs_func_data[0] # TypeError: tfs_func() takes 0 positional arguments but 2 were given 
Enter fullscreen mode Exit fullscreen mode
from torchvision.datasets import OxfordIIITPet def tfs_func(transform): return [[0, 1, 2], [3, 4, 5]] tfs_func_data = OxfordIIITPet( root="data", transforms=tfs_func # transforms=lambda transform: [[0, 1, 2], [3, 4, 5]] ) tfs_func_data[0] # TypeError: tfs_func() takes 1 positional argument but 2 were given 
Enter fullscreen mode Exit fullscreen mode
from torchvision.datasets import OxfordIIITPet def tfs_func(transform, target, param): return [[0, 1, 2], [3, 4, 5]] tfs_func_data = OxfordIIITPet( root="data", transforms=tfs_func # transforms=lambda transform, target, param: [[0, 1, 2], [3, 4, 5]] ) tfs_func_data[0] # TypeError: tfs_func() missing 1 required positional argument: 'param' 
Enter fullscreen mode Exit fullscreen mode

<transform & target_transform & transforms>

from torchvision.datasets import OxfordIIITPet def tf_func(transform): return [0, 1, 2] def tgt_func(target): return [3, 4, 5] def tfs_func(transform, target): return [[0, 1, 2], [3, 4, 5]] tf_tfs_func_data = OxfordIIITPet( root="data", transform=tf_func, transforms=tfs_func # transform=lambda transform: [0, 1, 2],  # transforms=lambda transform, target: [[0, 1, 2], [3, 4, 5]] ) # ValueError: Only transforms or transform/target_transform can be passed # as argument  tgt_tfs_func_data = OxfordIIITPet( root="data", target_transform=tgt_func, transforms=tfs_func # target_transform=lambda target: [3, 4, 5],  # transforms=lambda transform, target: [[0, 1, 2], [3, 4, 5]] ) # ValueError: Only transforms or transform/target_transform can be passed # as argument  tf_tgt_tfs_func_data = OxfordIIITPet( root="data", transform=tf_func, target_transform=tgt_func, transforms=tfs_func # transform=lambda transform: [0, 1, 2],  # target_transform=lambda target: [3, 4, 5],  # transforms=lambda transform, target: [[0, 1, 2], [3, 4, 5]] ) # ValueError: Only transforms or transform/target_transform can be passed # as argument 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)