Mnist datamodule
MNIST DataModule.
MNISTDataModule
#
Bases: LightningDataModule
LightningDataModule
for the MNIST dataset.
The MNIST database of handwritten digits has a training set of 60,000 examples, and a test set of 10,000 examples. It is a subset of a larger set available from NIST. The digits have been size-normalized and centered in a fixed-size image. The original black and white images from NIST were size normalized to fit in a 20x20 pixel box while preserving their aspect ratio. The resulting images contain grey levels as a result of the anti-aliasing technique used by the normalization algorithm. the images were centered in a 28x28 image by computing the center of mass of the pixels, and translating the image so as to position this point at the center of the 28x28 field.
A LightningDataModule
implements 7 key methods:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
This allows you to share a full dataset without explaining how to download, split, transform and process the data.
Read the docs
https://lightning.ai/docs/pytorch/latest/data/datamodule.html
Source code in src/data/mnist_datamodule.py
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
|
num_classes: int
property
#
Get the number of classes.
:return: The number of MNIST classes (10).
__init__(data_dir='data/', train_val_test_split=(55000, 5000, 10000), batch_size=64, num_workers=0, pin_memory=False)
#
Initialize a MNISTDataModule
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
data_dir
|
str
|
The data directory. Defaults to |
'data/'
|
train_val_test_split
|
tuple[int, int, int]
|
The train, validation and test split. Defaults to |
(55000, 5000, 10000)
|
batch_size
|
int
|
The batch size. Defaults to |
64
|
num_workers
|
int
|
The number of workers. Defaults to |
0
|
pin_memory
|
bool
|
Whether to pin memory. Defaults to |
False
|
Source code in src/data/mnist_datamodule.py
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
|
load_state_dict(state_dict)
#
Called when loading a checkpoint. Implement to reload datamodule state given datamodule state_dict()
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
state_dict
|
dict[str, Any]
|
The datamodule state returned by |
required |
Source code in src/data/mnist_datamodule.py
202 203 204 205 206 207 208 |
|
prepare_data()
#
Download data if needed.
Lightning ensures that self.prepare_data()
is called only
within a single process on CPU, so you can safely add your downloading logic within. In
case of multi-node training, the execution of this hook depends upon
self.prepare_data_per_node()
.
Do not use it to assign state (self.x = y).
Source code in src/data/mnist_datamodule.py
97 98 99 100 101 102 103 104 105 106 107 108 |
|
setup(stage=None)
#
Load data. Set variables: self.data_train
, self.data_val
, self.data_test
.
This method is called by Lightning before trainer.fit()
, trainer.validate()
, trainer.test()
, and
trainer.predict()
, so be careful not to execute things like random split twice! Also, it is called after
self.prepare_data()
and there is a barrier in between which ensures that all the processes proceed to
self.setup()
once the data is prepared and available for use.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
stage
|
str | None
|
The stage to setup. Either |
None
|
Source code in src/data/mnist_datamodule.py
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
|
state_dict()
#
Called when saving a checkpoint. Implement to generate and save the datamodule state.
Returns:
Type | Description |
---|---|
dict[Any, Any]
|
A dictionary containing the datamodule state that you want to save. |
Source code in src/data/mnist_datamodule.py
194 195 196 197 198 199 200 |
|
teardown(stage=None)
#
Lightning hook for cleaning up after trainer main functions.
trainer.fit()
, trainer.validate()
,trainer.test()
, and trainer.predict()
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
stage
|
str | None
|
The stage being torn down. Either |
None
|
Source code in src/data/mnist_datamodule.py
183 184 185 186 187 188 189 190 191 192 |
|
test_dataloader()
#
Create and return the test dataloader.
Returns:
Type | Description |
---|---|
DataLoader[Any]
|
The test dataloader. |
Source code in src/data/mnist_datamodule.py
169 170 171 172 173 174 175 176 177 178 179 180 181 |
|
train_dataloader()
#
Create and return the train dataloader.
Returns:
Type | Description |
---|---|
DataLoader[Any]
|
The train dataloader. |
Source code in src/data/mnist_datamodule.py
141 142 143 144 145 146 147 148 149 150 151 152 153 |
|
val_dataloader()
#
Create and return the validation dataloader.
Returns:
Type | Description |
---|---|
DataLoader[Any]
|
The validation dataloader. |
Source code in src/data/mnist_datamodule.py
155 156 157 158 159 160 161 162 163 164 165 166 167 |
|