clarena.stl_datasets.sign_language_mnist
The submodule in stl_datasets for Sign Language MNIST dataset.
1r""" 2The submodule in `stl_datasets` for Sign Language MNIST dataset. 3""" 4 5__all__ = ["SignLanguageMNIST"] 6 7import logging 8from typing import Callable 9 10import torch 11from torch.utils.data import Dataset, random_split 12from torchvision.transforms import transforms 13 14from clarena.stl_datasets.base import STLDatasetFromRaw 15from clarena.stl_datasets.raw import SignLanguageMNIST as SignLanguageMNISTRaw 16 17# always get logger for built-in logging in each module 18pylogger = logging.getLogger(__name__) 19 20 21class SignLanguageMNIST(STLDatasetFromRaw): 22 r"""Sign Language MNIST dataset. The [Sign Language MNIST dataset](https://www.kaggle.com/datasets/datamunge/sign-language-mnist) is a collection of hand gesture images representing ASL letters (A-Y, excluding J). It consists of 34,627 images of 24 classes, each 28x28 grayscale image.""" 23 24 original_dataset_python_class: type[Dataset] = SignLanguageMNISTRaw 25 r"""The original dataset class.""" 26 27 def __init__( 28 self, 29 root: str, 30 validation_percentage: float, 31 batch_size: int = 1, 32 num_workers: int = 0, 33 custom_transforms: Callable | transforms.Compose | None = None, 34 repeat_channels: int | None = None, 35 to_tensor: bool = True, 36 resize: tuple[int, int] | None = None, 37 ) -> None: 38 r""" 39 **Args:** 40 - **root** (`str`): the root directory where the original Sign Language MNIST data 'SignLanguageMNIST/' live. 41 - **validation_percentage** (`float`): the percentage to randomly split some training data into validation data. 42 - **batch_size** (`int`): The batch size in train, val, test dataloader. 43 - **num_workers** (`int`): the number of workers for dataloaders. 44 - **custom_transforms** (`transform` or `transforms.Compose` or `None`): the custom transforms to apply to ONLY TRAIN dataset. Can be a single transform, composed transforms or no transform. `ToTensor()`, normalize and so on are not included. 45 - **repeat_channels** (`int` | `None`): the number of channels to repeat. Default is None, which means no repeat. If not None, it should be an integer. 46 - **to_tensor** (`bool`): whether to include `ToTensor()` transform. Default is True. 47 - **resize** (`tuple[int, int]` | `None` or list of them): the size to resize the images to. Default is None, which means no resize. If not None, it should be a tuple of two integers. 48 """ 49 super().__init__( 50 root=root, 51 batch_size=batch_size, 52 num_workers=num_workers, 53 custom_transforms=custom_transforms, 54 repeat_channels=repeat_channels, 55 to_tensor=to_tensor, 56 resize=resize, 57 ) 58 59 self.validation_percentage: float = validation_percentage 60 r"""The percentage to randomly split some training data into validation data.""" 61 62 def prepare_data(self) -> None: 63 r"""Download the original Sign Language MNIST dataset if haven't. Because the original dataset is published on Kaggle, we need to download it manually. This function will not download the original dataset automatically.""" 64 pass 65 66 def train_and_val_dataset(self) -> tuple[Dataset, Dataset]: 67 """Get the training and validation dataset. 68 69 **Returns:** 70 - **train_and_val_dataset** (`tuple[Dataset, Dataset]`): the train and validation dataset. 71 """ 72 dataset_train_and_val = SignLanguageMNISTRaw( 73 root=self.root, 74 train=True, 75 transform=self.train_and_val_transforms(), 76 target_transform=self.target_transform(), 77 download=False, 78 ) 79 80 return random_split( 81 dataset_train_and_val, 82 lengths=[1 - self.validation_percentage, self.validation_percentage], 83 generator=torch.Generator().manual_seed( 84 42 85 ), # this must be set fixed to make sure the datasets across experiments are the same. Don't handle it to global seed as it might vary across experiments 86 ) 87 88 def test_dataset(self) -> Dataset: 89 r"""Get the test dataset. 90 91 **Returns:** 92 - **test_dataset** (`Dataset`): the test dataset. 93 """ 94 95 dataset_test = SignLanguageMNISTRaw( 96 root=self.root, 97 train=False, 98 transform=self.test_transforms(), 99 target_transform=self.target_transform(), 100 download=False, 101 ) 102 103 return dataset_test
class
SignLanguageMNIST(clarena.stl_datasets.base.STLDatasetFromRaw):
22class SignLanguageMNIST(STLDatasetFromRaw): 23 r"""Sign Language MNIST dataset. The [Sign Language MNIST dataset](https://www.kaggle.com/datasets/datamunge/sign-language-mnist) is a collection of hand gesture images representing ASL letters (A-Y, excluding J). It consists of 34,627 images of 24 classes, each 28x28 grayscale image.""" 24 25 original_dataset_python_class: type[Dataset] = SignLanguageMNISTRaw 26 r"""The original dataset class.""" 27 28 def __init__( 29 self, 30 root: str, 31 validation_percentage: float, 32 batch_size: int = 1, 33 num_workers: int = 0, 34 custom_transforms: Callable | transforms.Compose | None = None, 35 repeat_channels: int | None = None, 36 to_tensor: bool = True, 37 resize: tuple[int, int] | None = None, 38 ) -> None: 39 r""" 40 **Args:** 41 - **root** (`str`): the root directory where the original Sign Language MNIST data 'SignLanguageMNIST/' live. 42 - **validation_percentage** (`float`): the percentage to randomly split some training data into validation data. 43 - **batch_size** (`int`): The batch size in train, val, test dataloader. 44 - **num_workers** (`int`): the number of workers for dataloaders. 45 - **custom_transforms** (`transform` or `transforms.Compose` or `None`): the custom transforms to apply to ONLY TRAIN dataset. Can be a single transform, composed transforms or no transform. `ToTensor()`, normalize and so on are not included. 46 - **repeat_channels** (`int` | `None`): the number of channels to repeat. Default is None, which means no repeat. If not None, it should be an integer. 47 - **to_tensor** (`bool`): whether to include `ToTensor()` transform. Default is True. 48 - **resize** (`tuple[int, int]` | `None` or list of them): the size to resize the images to. Default is None, which means no resize. If not None, it should be a tuple of two integers. 49 """ 50 super().__init__( 51 root=root, 52 batch_size=batch_size, 53 num_workers=num_workers, 54 custom_transforms=custom_transforms, 55 repeat_channels=repeat_channels, 56 to_tensor=to_tensor, 57 resize=resize, 58 ) 59 60 self.validation_percentage: float = validation_percentage 61 r"""The percentage to randomly split some training data into validation data.""" 62 63 def prepare_data(self) -> None: 64 r"""Download the original Sign Language MNIST dataset if haven't. Because the original dataset is published on Kaggle, we need to download it manually. This function will not download the original dataset automatically.""" 65 pass 66 67 def train_and_val_dataset(self) -> tuple[Dataset, Dataset]: 68 """Get the training and validation dataset. 69 70 **Returns:** 71 - **train_and_val_dataset** (`tuple[Dataset, Dataset]`): the train and validation dataset. 72 """ 73 dataset_train_and_val = SignLanguageMNISTRaw( 74 root=self.root, 75 train=True, 76 transform=self.train_and_val_transforms(), 77 target_transform=self.target_transform(), 78 download=False, 79 ) 80 81 return random_split( 82 dataset_train_and_val, 83 lengths=[1 - self.validation_percentage, self.validation_percentage], 84 generator=torch.Generator().manual_seed( 85 42 86 ), # this must be set fixed to make sure the datasets across experiments are the same. Don't handle it to global seed as it might vary across experiments 87 ) 88 89 def test_dataset(self) -> Dataset: 90 r"""Get the test dataset. 91 92 **Returns:** 93 - **test_dataset** (`Dataset`): the test dataset. 94 """ 95 96 dataset_test = SignLanguageMNISTRaw( 97 root=self.root, 98 train=False, 99 transform=self.test_transforms(), 100 target_transform=self.target_transform(), 101 download=False, 102 ) 103 104 return dataset_test
Sign Language MNIST dataset. The Sign Language MNIST dataset is a collection of hand gesture images representing ASL letters (A-Y, excluding J). It consists of 34,627 images of 24 classes, each 28x28 grayscale image.
SignLanguageMNIST( root: str, validation_percentage: float, batch_size: int = 1, num_workers: int = 0, custom_transforms: Union[Callable, torchvision.transforms.transforms.Compose, NoneType] = None, repeat_channels: int | None = None, to_tensor: bool = True, resize: tuple[int, int] | None = None)
28 def __init__( 29 self, 30 root: str, 31 validation_percentage: float, 32 batch_size: int = 1, 33 num_workers: int = 0, 34 custom_transforms: Callable | transforms.Compose | None = None, 35 repeat_channels: int | None = None, 36 to_tensor: bool = True, 37 resize: tuple[int, int] | None = None, 38 ) -> None: 39 r""" 40 **Args:** 41 - **root** (`str`): the root directory where the original Sign Language MNIST data 'SignLanguageMNIST/' live. 42 - **validation_percentage** (`float`): the percentage to randomly split some training data into validation data. 43 - **batch_size** (`int`): The batch size in train, val, test dataloader. 44 - **num_workers** (`int`): the number of workers for dataloaders. 45 - **custom_transforms** (`transform` or `transforms.Compose` or `None`): the custom transforms to apply to ONLY TRAIN dataset. Can be a single transform, composed transforms or no transform. `ToTensor()`, normalize and so on are not included. 46 - **repeat_channels** (`int` | `None`): the number of channels to repeat. Default is None, which means no repeat. If not None, it should be an integer. 47 - **to_tensor** (`bool`): whether to include `ToTensor()` transform. Default is True. 48 - **resize** (`tuple[int, int]` | `None` or list of them): the size to resize the images to. Default is None, which means no resize. If not None, it should be a tuple of two integers. 49 """ 50 super().__init__( 51 root=root, 52 batch_size=batch_size, 53 num_workers=num_workers, 54 custom_transforms=custom_transforms, 55 repeat_channels=repeat_channels, 56 to_tensor=to_tensor, 57 resize=resize, 58 ) 59 60 self.validation_percentage: float = validation_percentage 61 r"""The percentage to randomly split some training data into validation data."""
Args:
- root (
str): the root directory where the original Sign Language MNIST data 'SignLanguageMNIST/' live. - validation_percentage (
float): the percentage to randomly split some training data into validation data. - batch_size (
int): The batch size in train, val, test dataloader. - num_workers (
int): the number of workers for dataloaders. - custom_transforms (
transformortransforms.ComposeorNone): the custom transforms to apply to ONLY TRAIN dataset. Can be a single transform, composed transforms or no transform.ToTensor(), normalize and so on are not included. - repeat_channels (
int|None): the number of channels to repeat. Default is None, which means no repeat. If not None, it should be an integer. - to_tensor (
bool): whether to includeToTensor()transform. Default is True. - resize (
tuple[int, int]|Noneor list of them): the size to resize the images to. Default is None, which means no resize. If not None, it should be a tuple of two integers.
validation_percentage: float
The percentage to randomly split some training data into validation data.
def
prepare_data(self) -> None:
63 def prepare_data(self) -> None: 64 r"""Download the original Sign Language MNIST dataset if haven't. Because the original dataset is published on Kaggle, we need to download it manually. This function will not download the original dataset automatically.""" 65 pass
Download the original Sign Language MNIST dataset if haven't. Because the original dataset is published on Kaggle, we need to download it manually. This function will not download the original dataset automatically.
def
train_and_val_dataset( self) -> tuple[torch.utils.data.dataset.Dataset, torch.utils.data.dataset.Dataset]:
67 def train_and_val_dataset(self) -> tuple[Dataset, Dataset]: 68 """Get the training and validation dataset. 69 70 **Returns:** 71 - **train_and_val_dataset** (`tuple[Dataset, Dataset]`): the train and validation dataset. 72 """ 73 dataset_train_and_val = SignLanguageMNISTRaw( 74 root=self.root, 75 train=True, 76 transform=self.train_and_val_transforms(), 77 target_transform=self.target_transform(), 78 download=False, 79 ) 80 81 return random_split( 82 dataset_train_and_val, 83 lengths=[1 - self.validation_percentage, self.validation_percentage], 84 generator=torch.Generator().manual_seed( 85 42 86 ), # this must be set fixed to make sure the datasets across experiments are the same. Don't handle it to global seed as it might vary across experiments 87 )
Get the training and validation dataset.
Returns:
- train_and_val_dataset (
tuple[Dataset, Dataset]): the train and validation dataset.
def
test_dataset(self) -> torch.utils.data.dataset.Dataset:
89 def test_dataset(self) -> Dataset: 90 r"""Get the test dataset. 91 92 **Returns:** 93 - **test_dataset** (`Dataset`): the test dataset. 94 """ 95 96 dataset_test = SignLanguageMNISTRaw( 97 root=self.root, 98 train=False, 99 transform=self.test_transforms(), 100 target_transform=self.target_transform(), 101 download=False, 102 ) 103 104 return dataset_test
Get the test dataset.
Returns:
- test_dataset (
Dataset): the test dataset.