From 11d3c9490ceabff15941bd9093d40337091b0882 Mon Sep 17 00:00:00 2001 From: HowToSD Date: Mon, 3 Mar 2025 18:39:52 -0800 Subject: [PATCH] Added experimental PyTorch model training. --- .gitignore | 4 +- README.md | 25 ++- __init__.py | 30 ++++ docs/images/fashion_mnist_eval.png | Bin 0 -> 121822 bytes docs/images/fashion_mnist_train.png | Bin 0 -> 169022 bytes docs/reference/node_reference.md | 13 ++ docs/reference/pt_data_loader.md | 29 ++++ .../pt_evaluate_classification_model.md | 23 +++ docs/reference/pt_load_model.md | 18 +++ docs/reference/pt_save_model.md | 18 +++ .../pt_train_classification_model.md | 24 +++ docs/reference/ptn_linear_model.md | 34 ++++ docs/reference/ptn_linear_model_def.md | 20 +++ docs/reference/pto_adam.md | 20 +++ docs/reference/ptv_dataset.md | 51 ++++++ docs/reference/ptv_dataset_loader.md | 60 +++++++ docs/reference/ptv_transforms_to_tensor.md | 12 ++ examples/workflows/fashion_mnist_eval.json | 1 + examples/workflows/fashion_mnist_train.json | 1 + modules/pytorch_wrapper/pt_data_loader.py | 81 ++++++++++ .../pt_evaluate_classification_model.py | 71 +++++++++ modules/pytorch_wrapper/pt_load_model.py | 41 +++++ modules/pytorch_wrapper/pt_save_model.py | 36 +++++ .../pt_train_classification_model.py | 111 +++++++++++++ modules/pytorch_wrapper/ptn_linear_model.py | 86 ++++++++++ .../pytorch_wrapper/ptn_linear_model_def.py | 99 ++++++++++++ modules/pytorch_wrapper/pto_adam.py | 46 ++++++ modules/pytorch_wrapper/ptv_dataset.py | 124 +++++++++++++++ modules/pytorch_wrapper/ptv_dataset_loader.py | 148 ++++++++++++++++++ .../ptv_transforms_to_tensor.py | 37 +++++ modules/pytorch_wrapper/utils.py | 54 +++++++ pyproject.toml | 2 +- requirements.txt | 3 +- tests/pytorch_wrapper/pt_data_loader_test.py | 43 +++++ .../pt_evaluate_classification_model_test.py | 79 ++++++++++ .../pt_train_classification_model_test.py | 59 +++++++ ...fication_model_with_dataset_loader_test.py | 51 ++++++ .../pytorch_wrapper/ptn_linear_model_test.py | 29 ++++ .../ptv_dataset_loader_test.py | 34 ++++ tests/pytorch_wrapper/ptv_dataset_test.py | 36 +++++ 40 files changed, 1649 insertions(+), 4 deletions(-) create mode 100644 docs/images/fashion_mnist_eval.png create mode 100644 docs/images/fashion_mnist_train.png create mode 100644 docs/reference/pt_data_loader.md create mode 100644 docs/reference/pt_evaluate_classification_model.md create mode 100644 docs/reference/pt_load_model.md create mode 100644 docs/reference/pt_save_model.md create mode 100644 docs/reference/pt_train_classification_model.md create mode 100644 docs/reference/ptn_linear_model.md create mode 100644 docs/reference/ptn_linear_model_def.md create mode 100644 docs/reference/pto_adam.md create mode 100644 docs/reference/ptv_dataset.md create mode 100644 docs/reference/ptv_dataset_loader.md create mode 100644 docs/reference/ptv_transforms_to_tensor.md create mode 100644 examples/workflows/fashion_mnist_eval.json create mode 100644 examples/workflows/fashion_mnist_train.json create mode 100644 modules/pytorch_wrapper/pt_data_loader.py create mode 100644 modules/pytorch_wrapper/pt_evaluate_classification_model.py create mode 100644 modules/pytorch_wrapper/pt_load_model.py create mode 100644 modules/pytorch_wrapper/pt_save_model.py create mode 100644 modules/pytorch_wrapper/pt_train_classification_model.py create mode 100644 modules/pytorch_wrapper/ptn_linear_model.py create mode 100644 modules/pytorch_wrapper/ptn_linear_model_def.py create mode 100644 modules/pytorch_wrapper/pto_adam.py create mode 100644 modules/pytorch_wrapper/ptv_dataset.py create mode 100644 modules/pytorch_wrapper/ptv_dataset_loader.py create mode 100644 modules/pytorch_wrapper/ptv_transforms_to_tensor.py create mode 100644 tests/pytorch_wrapper/pt_data_loader_test.py create mode 100644 tests/pytorch_wrapper/pt_evaluate_classification_model_test.py create mode 100644 tests/pytorch_wrapper/pt_train_classification_model_test.py create mode 100644 tests/pytorch_wrapper/pt_train_classification_model_with_dataset_loader_test.py create mode 100644 tests/pytorch_wrapper/ptn_linear_model_test.py create mode 100644 tests/pytorch_wrapper/ptv_dataset_loader_test.py create mode 100644 tests/pytorch_wrapper/ptv_dataset_test.py diff --git a/.gitignore b/.gitignore index cea1d96..17a60fc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ __pycache__/ **/__pycache__/ - +datasets/ +models/ +*.pth diff --git a/README.md b/README.md index f5ca4ff..0e47476 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,27 @@ # ComfyUI-Data-Analysis +## Update (March 3, 2025) +Training workflow trains the FashionMNIST model from scratch with a single click of a button. + +Experimental PyTorch model training has been added (documentation coming soon). +No coding required—training is as simple as a single click! + +Try it out: + + Training: examples/fashion_mnist_train.json + Evaluation: examples/fashion_mnist_eval.json + +This workflow trains a FashionMNIST model from scratch effortlessly. + +**Training workflow** +![Train](docs/images/fashion_mnist_train.png) + +**Eval workflow** +![Eval](docs/images/fashion_mnist_eval.png) + +Note that the training feature is a proof of concept and currently supports only the dense model. Additional models may be added based on demand. + +
+ ![Baseball tutorial](docs/images/baseball_question.jpg) ## How Can We Figure Out Which MLB Player Had the Most Hits Per Year? @@ -61,7 +84,7 @@ Note: GPU is not required to run this custom module. This will create a new subdirectory ComfyUI-Data-Analysis. 3. Rename the folder name from ComfyUI-Data-Analysis to data-analysis. Skipping this step will cause example workflows to fail, as they rely on this folder name. -4. Check if your ComfyUI environment already has pandas, matplotlib, scipy and seaborn. If not, install them using pip. +4. Check if your ComfyUI environment already has required packages listed in requirements.txt. If not, install them using pip. ``` pip install -r requirements.txt ``` diff --git a/__init__.py b/__init__.py index 3a596ea..d070694 100644 --- a/__init__.py +++ b/__init__.py @@ -141,9 +141,11 @@ from .modules.pytorch_wrapper.pt_bmm import PtBmm from .modules.pytorch_wrapper.pt_bool_create import PtBoolCreate from .modules.pytorch_wrapper.pt_cos import PtCos from .modules.pytorch_wrapper.pt_cosh import PtCosh +from .modules.pytorch_wrapper.pt_data_loader import PtDataLoader from .modules.pytorch_wrapper.pt_div import PtDiv from .modules.pytorch_wrapper.pt_einsum import PtEinsum from .modules.pytorch_wrapper.pt_eq import PtEq +from .modules.pytorch_wrapper.pt_evaluate_classification_model import PtEvaluateClassificationModel from .modules.pytorch_wrapper.pt_exp import PtExp from .modules.pytorch_wrapper.pt_flatten import PtFlatten from .modules.pytorch_wrapper.pt_float_create import PtFloatCreate @@ -159,6 +161,7 @@ from .modules.pytorch_wrapper.pt_index_select import PtIndexSelect from .modules.pytorch_wrapper.pt_int_create import PtIntCreate from .modules.pytorch_wrapper.pt_le import PtLe from .modules.pytorch_wrapper.pt_linspace import PtLinspace +from .modules.pytorch_wrapper.pt_load_model import PtLoadModel from .modules.pytorch_wrapper.pt_log import PtLog from .modules.pytorch_wrapper.pt_logical_and import PtLogicalAnd from .modules.pytorch_wrapper.pt_logical_not import PtLogicalNot @@ -184,6 +187,7 @@ from .modules.pytorch_wrapper.pt_rand_int import PtRandInt from .modules.pytorch_wrapper.pt_randn import PtRandn from .modules.pytorch_wrapper.pt_remainder import PtRemainder from .modules.pytorch_wrapper.pt_reshape import PtReshape +from .modules.pytorch_wrapper.pt_save_model import PtSaveModel from .modules.pytorch_wrapper.pt_scatter import PtScatter from .modules.pytorch_wrapper.pt_show_size import PtShowSize from .modules.pytorch_wrapper.pt_show_text import PtShowText @@ -204,11 +208,17 @@ from .modules.pytorch_wrapper.pt_to_image import PtToImage from .modules.pytorch_wrapper.pt_to_latent import PtToLatent from .modules.pytorch_wrapper.pt_to_numpy import PtToNumpy from .modules.pytorch_wrapper.pt_to_rgb_tensors import PtToRgbTensors +from .modules.pytorch_wrapper.pt_train_classification_model import PtTrainClassificationModel from .modules.pytorch_wrapper.pt_unsqueeze import PtUnsqueeze from .modules.pytorch_wrapper.pt_var import PtVar from .modules.pytorch_wrapper.pt_view import PtView from .modules.pytorch_wrapper.pt_where import PtWhere from .modules.pytorch_wrapper.pt_zeros import PtZeros +from .modules.pytorch_wrapper.ptn_linear_model import PtnLinearModel +from .modules.pytorch_wrapper.pto_adam import PtoAdam +from .modules.pytorch_wrapper.ptv_dataset import PtvDataset +from .modules.pytorch_wrapper.ptv_dataset_loader import PtvDatasetLoader +from .modules.pytorch_wrapper.ptv_transforms_to_tensor import PtvTransformsToTensor from .modules.seaborn_wrapper.sns_bar import SNSBar from .modules.seaborn_wrapper.sns_boxplot import SNSBoxplot from .modules.seaborn_wrapper.sns_heatmap import SNSHeatmap @@ -363,9 +373,11 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "PtBoolCreate": PtBoolCreate, "PtCos": PtCos, "PtCosh": PtCosh, + "PtDataLoader": PtDataLoader, "PtDiv": PtDiv, "PtEinsum": PtEinsum, "PtEq": PtEq, + "PtEvaluateClassificationModel": PtEvaluateClassificationModel, "PtExp": PtExp, "PtFlatten": PtFlatten, "PtFloatCreate": PtFloatCreate, @@ -381,6 +393,7 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "PtIntCreate": PtIntCreate, "PtLe": PtLe, "PtLinspace": PtLinspace, + "PtLoadModel": PtLoadModel, "PtLog": PtLog, "PtLogicalAnd": PtLogicalAnd, "PtLogicalNot": PtLogicalNot, @@ -406,6 +419,7 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "PtRandn": PtRandn, "PtRemainder": PtRemainder, "PtReshape": PtReshape, + "PtSaveModel": PtSaveModel, "PtScatter": PtScatter, "PtShowSize": PtShowSize, "PtShowText": PtShowText, @@ -426,11 +440,17 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "PtToLatent": PtToLatent, "PtToNumpy": PtToNumpy, "PtToRgbTensors": PtToRgbTensors, + "PtTrainClassificationModel": PtTrainClassificationModel, "PtUnsqueeze": PtUnsqueeze, "PtVar": PtVar, "PtView": PtView, "PtWhere": PtWhere, "PtZeros": PtZeros, + "PtnLinearModel": PtnLinearModel, + "PtoAdam": PtoAdam, + "PtvDataset": PtvDataset, + "PtvDatasetLoader": PtvDatasetLoader, + "PtvTransformsToTensor": PtvTransformsToTensor, "PyKvFloatCreate": PyKvFloatCreate, "PyKvIntCreate": PyKvIntCreate, "PyKvStringCreate": PyKvStringCreate, @@ -588,9 +608,11 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "PtBoolCreate": "Pt Bool Create", "PtCos": "Pt Cos", "PtCosh": "Pt Cosh", + "PtDataLoader": "Pt Data Loader", "PtDiv": "Pt Div", "PtEinsum": "Pt Einsum", "PtEq": "Pt Eq", + "PtEvaluateClassificationModel": "Pt Evaluate Classification Model", "PtExp": "Pt Exp", "PtFlatten": "Pt Flatten", "PtFloatCreate": "Pt Float Create", @@ -606,6 +628,7 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "PtIntCreate": "Pt Int Create", "PtLe": "Pt Le", "PtLinspace": "Pt Linspace", + "PtLoadModel": "Pt Load Model", "PtLog": "Pt Log", "PtLogicalAnd": "Pt Logical And", "PtLogicalNot": "Pt Logical Not", @@ -631,6 +654,7 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "PtRandn": "Pt Randn", "PtRemainder": "Pt Remainder", "PtReshape": "Pt Reshape", + "PtSaveModel": "Pt Save Model", "PtScatter": "Pt Scatter", "PtShowSize": "Pt Show Size", "PtShowText": "Pt Show Text", @@ -651,11 +675,17 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "PtToLatent": "Pt To Latent", "PtToNumpy": "Pt To Numpy", "PtToRgbTensors": "Pt To Rgb Tensors", + "PtTrainClassificationModel": "Pt Train Classification Model", "PtUnsqueeze": "Pt Unsqueeze", "PtVar": "Pt Var", "PtView": "Pt View", "PtWhere": "Pt Where", "PtZeros": "Pt Zeros", + "PtnLinearModel": "Ptn Linear Model", + "PtoAdam": "Pto Adam", + "PtvDataset": "Ptv Dataset", + "PtvDatasetLoader": "Ptv Dataset Loader", + "PtvTransformsToTensor": "Ptv Transforms To Tensor", "PyKvFloatCreate": "Py Kv Float Create", "PyKvIntCreate": "Py Kv Int Create", "PyKvStringCreate": "Py Kv String Create", diff --git a/docs/images/fashion_mnist_eval.png b/docs/images/fashion_mnist_eval.png new file mode 100644 index 0000000000000000000000000000000000000000..8278581521761543d40a449acced940cd45804e3 GIT binary patch literal 121822 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 literal 0 HcmV?d00001 diff --git a/docs/images/fashion_mnist_train.png b/docs/images/fashion_mnist_train.png new file mode 100644 index 0000000000000000000000000000000000000000..c74a788a36f3d64c7a297b18f06446288b6da187 GIT binary patch literal 169022 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 literal 0 HcmV?d00001 diff --git a/docs/reference/node_reference.md b/docs/reference/node_reference.md index 285b3fe..c6e6374 100644 --- a/docs/reference/node_reference.md +++ b/docs/reference/node_reference.md @@ -113,6 +113,7 @@ | [Pandas Load JSON](pandas_load_json.md) | Loads JSON files into a pandas DataFrame. | | [Pandas Save CSV](pandas_save_csv.md) | Saves a PandasDataFrame to a CSV file. | | [Pandas Save JSON](pandas_save_json.md) | Saves a PandasDataFrame to a JSON file. | +| [Pt Save Model](pt_save_model.md) | A wrapper class for saving a PyTorch model. | ## Math | Node | Description | | --- | --- | @@ -257,6 +258,18 @@ | [Pt To Latent](pt_to_latent.md) | Casts a PyTorch tensor as a latent tensor. | | [Pt To Numpy](pt_to_numpy.md) | Converts PyTorch tensor to NumPy ndarray. | | [Pt To Rgb Tensors](pt_to_rgb_tensors.md) | Splits a PyTorch tensor into R, G, and B tensors. | +| [Pto Adam](pto_adam.md) | Converts PyTorch tensor to NumPy ndarray. | +## PyTorch wrapper - Training +| Node | Description | +| --- | --- | +| [Pt Data Loader](pt_data_loader.md) | Loads data from a dataset node and creates a PyTorch DataLoader. | +| [Pt Evaluate Classification Model](pt_evaluate_classification_model.md) | Performs inference on test data and computes evaluation metrics. | +| [Pt Load Model](pt_load_model.md) | A wrapper class for saving a PyTorch model. | +| [Pt Train Classification Model](pt_train_classification_model.md) | Trains a classification model using a given dataset, optimizer, and number of epochs. | +| [Ptn Linear Model](ptn_linear_model.md) | A linear model consisting of dense layers. | +| [Ptv Dataset](ptv_dataset.md) | A Torchvision Dataset class wrapper. | +| [Ptv Dataset Loader](ptv_dataset_loader.md) | A node to combine the dataset and data loader into a single node. | +| [Ptv Transforms To Tensor](ptv_transforms_to_tensor.md) | Transforms elements of dataset to PyTorch tensors. | ## PyTorch wrapper - Transform | Node | Description | | --- | --- | diff --git a/docs/reference/pt_data_loader.md b/docs/reference/pt_data_loader.md new file mode 100644 index 0000000..2ae51c8 --- /dev/null +++ b/docs/reference/pt_data_loader.md @@ -0,0 +1,29 @@ +# Pt Data Loader +Loads data from a dataset node and creates a PyTorch DataLoader. + +**dataset** +Connect a PtvDataset node that provides the dataset. + +**batch size** +Specifies the number of samples per batch. + +**shuffle** +If True, shuffles the dataset before each epoch. + +## Input +| Name | Data type | +|---|---| +| dataset | Ptvdataset | +| batch_size | Int | +| shuffle | Boolean | +| parameters | String | + +## Output +| Data type | +|---| +| Ptdataloader | + +


+Category: PyTorch wrapper - Training + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/pt_evaluate_classification_model.md b/docs/reference/pt_evaluate_classification_model.md new file mode 100644 index 0000000..c78bce9 --- /dev/null +++ b/docs/reference/pt_evaluate_classification_model.md @@ -0,0 +1,23 @@ +# Pt Evaluate Classification Model +Performs inference on test data and computes evaluation metrics. + +## Input +| Name | Data type | +|---|---| +| model | Ptmodel | +| data_loader | Ptdataloader | +| use_gpu | Boolean | + +## Output +| Data type | +|---| +| Float | +| Float | +| Float | +| Float | +| Int | + +
+Category: PyTorch wrapper - Training + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/pt_load_model.md b/docs/reference/pt_load_model.md new file mode 100644 index 0000000..0466004 --- /dev/null +++ b/docs/reference/pt_load_model.md @@ -0,0 +1,18 @@ +# Pt Load Model +A wrapper class for saving a PyTorch model. + +## Input +| Name | Data type | +|---|---| +| model | Ptmodel | +| model_path | String | + +## Output +| Data type | +|---| +| Ptmodel | + +
+Category: PyTorch wrapper - Training + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/pt_save_model.md b/docs/reference/pt_save_model.md new file mode 100644 index 0000000..da2d30c --- /dev/null +++ b/docs/reference/pt_save_model.md @@ -0,0 +1,18 @@ +# Pt Save Model +A wrapper class for saving a PyTorch model. + +## Input +| Name | Data type | +|---|---| +| model | Ptmodel | +| model_path | String | + +## Output +| Data type | +|---| +| String | + +
+Category: IO + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/pt_train_classification_model.md b/docs/reference/pt_train_classification_model.md new file mode 100644 index 0000000..1ceaac6 --- /dev/null +++ b/docs/reference/pt_train_classification_model.md @@ -0,0 +1,24 @@ +# Pt Train Classification Model +Trains a classification model using a given dataset, optimizer, and number of epochs. + +## Input +| Name | Data type | +|---|---| +| model | Ptmodel | +| train_loader | Ptdataloader | +| optimizer | Ptoptimizer | +| epochs | Int | +| use_gpu | Boolean | +| val_loader | Ptdataloader | + +## Output +| Data type | +|---| +| Ptmodel | +| Tensor | +| Tensor | + +
+Category: PyTorch wrapper - Training + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/ptn_linear_model.md b/docs/reference/ptn_linear_model.md new file mode 100644 index 0000000..a13e46c --- /dev/null +++ b/docs/reference/ptn_linear_model.md @@ -0,0 +1,34 @@ +# Ptn Linear Model +A linear model consisting of dense layers. + +### Fields: +- `dim_list`: A comma-separated string representing layer dimensions. + It should contain the input dimension for the first layer and the output dimensions + for all layers. + + Example for a two-layer network: + - Input data: 784 + - Layer 1: 784 → 128 + - Layer 2: 128 → 10 + - Specify `"784, 128, 10"` + +- `bias_list`: A comma-separated string representing bias usage (True/False) per layer. + +- `num_layers`: The number of layers in the model. + +## Input +| Name | Data type | +|---|---| +| dim_list | String | +| bias_list | String | +| num_layers | Int | + +## Output +| Data type | +|---| +| Ptmodel | + +
+Category: PyTorch wrapper - Training + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/ptn_linear_model_def.md b/docs/reference/ptn_linear_model_def.md new file mode 100644 index 0000000..1841a98 --- /dev/null +++ b/docs/reference/ptn_linear_model_def.md @@ -0,0 +1,20 @@ +# Dense Model +A multi-layer dense neural network with ReLU activation after each dense layer, except for the final layer. + +Args: + dim_list (List[int]): List of feature dimensions. Should be of length `num_layers + 1`. + bias_list (List[bool]): List indicating whether each layer should have a bias. + num_layers (int): Number of layers in the model. + +Example: + For a three-layer network: + - Layer 1: input -> output1 + - Layer 2: output1 -> output2 + - Layer 3: output2 -> output3 + + `dim_list = [input_dim, output1_dim, output2_dim, output3_dim]` + +
+Category: Miscellaneous + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/pto_adam.md b/docs/reference/pto_adam.md new file mode 100644 index 0000000..fa394e9 --- /dev/null +++ b/docs/reference/pto_adam.md @@ -0,0 +1,20 @@ +# Pto Adam +Converts PyTorch tensor to NumPy ndarray. + +## Input +| Name | Data type | +|---|---| +| model | Ptmodel | +| learning_rate | Float | +| beta1 | Float | +| beta2 | Float | + +## Output +| Data type | +|---| +| Ptoptimizer | + +
+Category: PyTorch wrapper - Tensor data conversion + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/ptv_dataset.md b/docs/reference/ptv_dataset.md new file mode 100644 index 0000000..1258c76 --- /dev/null +++ b/docs/reference/ptv_dataset.md @@ -0,0 +1,51 @@ +# Ptv Dataset +A Torchvision Dataset class wrapper. + +Parameters + +**name** + Specify a dataset class name such as MNIST, FashionMNIST in string. + This will be converted to a dataset class internally. + +**download** + Set to True if you want to download. + +**root** + Specify the root directory of the downloaded dataset relative to the + dataset directory of this extension, or specify the absolute path. + If you leave as a blank, the dataset will be downloaded under the `datasets` directory + of this extension. + +**transform** + Data transforms e.g. transform to PyTorch tensor, normalize image. + Plug in the PTV Transforms node that contains Torchvision Transforms functionality. + +**parameters** + Specify other parameters in Python dict format. + For example, if you want to set Train parameter to True to download the train set, specify: + ``` + {"train": True} + ``` + or if you want to download the test set, specify: + ``` + {"train": False} + ``` + +## Input +| Name | Data type | +|---|---| +| name | String | +| download | Boolean | +| root | String | +| transform | Ptvtransform | +| parameters | String | + +## Output +| Data type | +|---| +| Ptvdataset | + +
+Category: PyTorch wrapper - Training + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/ptv_dataset_loader.md b/docs/reference/ptv_dataset_loader.md new file mode 100644 index 0000000..ee13ac5 --- /dev/null +++ b/docs/reference/ptv_dataset_loader.md @@ -0,0 +1,60 @@ +# Ptv Dataset Loader +A node to combine the dataset and data loader into a single node. + +Transform is internally called to convert input data to PyTorch tensors. + +Parameters + +**name** + Specify the dataset class name such as MNIST, FashionMNIST in string. + This will be converted to a dataset class internally. + +**download** + Set to True if you want to download. + +**root** + Specify the root directory of the downloaded dataset relative to the + dataset directory of this extension, or specify the absolute path. + If you leave as a blank, the dataset will be downloaded under the `datasets` directory + of this extension. + +**batch_size** + The number of samples per batch. + +**shuffle** + If True, shuffles the dataset before each epoch. + +**dataset parameters** + Specify other parameters in Python dict format. + For example, if you want to set Train parameter to True to download the train set, specify: + ``` + {"train": True} + ``` + or if you want to download the test set, specify: + ``` + {"train": False} + ``` + +**load parameters** + Additional parameters in Python dictionary format. + +## Input +| Name | Data type | +|---|---| +| name | String | +| download | Boolean | +| root | String | +| batch_size | Int | +| shuffle | Boolean | +| dataset_parameters | String | +| load_parameters | String | + +## Output +| Data type | +|---| +| Ptdataloader | + +
+Category: PyTorch wrapper - Training + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/docs/reference/ptv_transforms_to_tensor.md b/docs/reference/ptv_transforms_to_tensor.md new file mode 100644 index 0000000..e1ca095 --- /dev/null +++ b/docs/reference/ptv_transforms_to_tensor.md @@ -0,0 +1,12 @@ +# Ptv Transforms To Tensor +Transforms elements of dataset to PyTorch tensors. + +## Output +| Data type | +|---| +| Ptvtransform | + +
+Category: PyTorch wrapper - Training + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/examples/workflows/fashion_mnist_eval.json b/examples/workflows/fashion_mnist_eval.json new file mode 100644 index 0000000..c9e452e --- /dev/null +++ b/examples/workflows/fashion_mnist_eval.json @@ -0,0 +1 @@ +{"last_node_id":47,"last_link_id":61,"nodes":[{"id":47,"type":"PtEvaluateClassificationModel","pos":[3243.2138671875,1887.3746337890625],"size":[403.1999816894531,138],"flags":{},"order":3,"mode":0,"inputs":[{"name":"model","type":"PTMODEL","link":55},{"name":"data_loader","type":"PTDATALOADER","link":56}],"outputs":[{"name":"accuracy","type":"FLOAT","links":[57],"slot_index":0},{"name":"precision","type":"FLOAT","links":[58],"slot_index":1},{"name":"recall","type":"FLOAT","links":[59],"slot_index":2},{"name":"f1","type":"FLOAT","links":[60],"slot_index":3},{"name":"num_samples","type":"INT","links":[61],"slot_index":4}],"properties":{"Node name for S&R":"PtEvaluateClassificationModel"},"widgets_values":[true]},{"id":22,"type":"PtnLinearModel","pos":[2886.657958984375,1718.1610107421875],"size":[264.3730163574219,109.75016021728516],"flags":{},"order":0,"mode":0,"inputs":[],"outputs":[{"name":"PTMODEL","type":"PTMODEL","links":[24],"slot_index":0}],"properties":{"Node name for S&R":"PtnLinearModel"},"widgets_values":["[784,180,42,10]","[False,False,False]",3]},{"id":33,"type":"CDAShowInt","pos":[3716.05078125,2073.464111328125],"size":[210,79.09933471679688],"flags":{},"order":8,"mode":0,"inputs":[{"name":"int_scalar","type":"INT","link":61,"widget":{"name":"int_scalar"}}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6}],"title":"Num Samples","properties":{"Node name for S&R":"CDAShowInt"},"widgets_values":[0,"10000"]},{"id":31,"type":"CDAShowFloat","pos":[3937.552490234375,1932.3660888671875],"size":[210,76],"flags":{},"order":7,"mode":0,"inputs":[{"name":"float_scalar","type":"FLOAT","link":60,"widget":{"name":"float_scalar"}}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6}],"title":"F1","properties":{"Node name for S&R":"CDAShowFloat"},"widgets_values":[0,"0.8705378412983575"]},{"id":29,"type":"CDAShowFloat","pos":[3937.552490234375,1808.5174560546875],"size":[210,76],"flags":{},"order":5,"mode":0,"inputs":[{"name":"float_scalar","type":"FLOAT","link":58,"widget":{"name":"float_scalar"}}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6}],"title":"Precision","properties":{"Node name for S&R":"CDAShowFloat"},"widgets_values":[0,"0.8721685257742706"]},{"id":30,"type":"CDAShowFloat","pos":[3716.05078125,1932.3660888671875],"size":[210,76],"flags":{},"order":6,"mode":0,"inputs":[{"name":"float_scalar","type":"FLOAT","link":59,"widget":{"name":"float_scalar"}}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6}],"title":"Recall","properties":{"Node name for S&R":"CDAShowFloat"},"widgets_values":[0,"0.8715999999999999"]},{"id":28,"type":"CDAShowFloat","pos":[3716.05078125,1808.5174560546875],"size":[210,76],"flags":{},"order":4,"mode":0,"inputs":[{"name":"float_scalar","type":"FLOAT","link":57,"widget":{"name":"float_scalar"}}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6}],"title":"Accuracy","properties":{"Node name for S&R":"CDAShowFloat"},"widgets_values":[0,"0.8716"]},{"id":46,"type":"PtvDatasetLoader","pos":[2884.05078125,1908.8636474609375],"size":[266.8697814941406,246],"flags":{},"order":1,"mode":0,"inputs":[],"outputs":[{"name":"PTDATALOADER","type":"PTDATALOADER","links":[56],"slot_index":0}],"properties":{"Node name for S&R":"PtvDatasetLoader"},"widgets_values":["FashionMNIST",true,"",128,false,"{\"train\":False}","{\"num_workers\":1}"]},{"id":23,"type":"PtLoadModel","pos":[3243.927978515625,1718.1610107421875],"size":[397.5032653808594,67.37537384033203],"flags":{},"order":2,"mode":0,"inputs":[{"name":"model","type":"PTMODEL","link":24}],"outputs":[{"name":"model","type":"PTMODEL","links":[55],"slot_index":0}],"properties":{"Node name for S&R":"PtLoadModel"},"widgets_values":["fashion_mnist_ep5.pt"]}],"links":[[24,22,0,23,0,"PTMODEL"],[55,23,0,47,0,"PTMODEL"],[56,46,0,47,1,"PTDATALOADER"],[57,47,0,28,0,"FLOAT"],[58,47,1,29,0,"FLOAT"],[59,47,2,30,0,"FLOAT"],[60,47,3,31,0,"FLOAT"],[61,47,4,33,0,"INT"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.8888542618071794,"offset":[-2627.7528215343027,-1537.849355050907]},"node_versions":{"data-analysis":"dab52eaa403a5e9cdc546aca7f7d95e41ea0a943"},"ue_links":[]},"version":0.4} \ No newline at end of file diff --git a/examples/workflows/fashion_mnist_train.json b/examples/workflows/fashion_mnist_train.json new file mode 100644 index 0000000..c693a15 --- /dev/null +++ b/examples/workflows/fashion_mnist_train.json @@ -0,0 +1 @@ +{"last_node_id":56,"last_link_id":71,"nodes":[{"id":22,"type":"PtnLinearModel","pos":[2830.718017578125,1445.9212646484375],"size":[222.090087890625,128.31336975097656],"flags":{},"order":0,"mode":0,"inputs":[],"outputs":[{"name":"PTMODEL","type":"PTMODEL","links":[22,65],"slot_index":0}],"properties":{"Node name for S&R":"PtnLinearModel"},"widgets_values":["[784,180,42,10]","[False,False,False]",3]},{"id":47,"type":"PtvDatasetLoader","pos":[2830.718017578125,1652.3197021484375],"size":[239.68125915527344,246],"flags":{},"order":1,"mode":0,"inputs":[],"outputs":[{"name":"PTDATALOADER","type":"PTDATALOADER","links":[66],"slot_index":0}],"properties":{"Node name for S&R":"PtvDatasetLoader"},"widgets_values":["FashionMNIST",true,"",128,true,"{\"train\":True}","{\"num_workers\":1}"]},{"id":48,"type":"PtvDatasetLoader","pos":[2830.718017578125,1957.211181640625],"size":[239.68125915527344,246],"flags":{},"order":2,"mode":0,"inputs":[],"outputs":[{"name":"PTDATALOADER","type":"PTDATALOADER","links":[67],"slot_index":0}],"properties":{"Node name for S&R":"PtvDatasetLoader"},"widgets_values":["FashionMNIST",true,"",128,false,"{\"train\":False}","{\"num_workers\":1}"]},{"id":50,"type":"PtTrainClassificationModel","pos":[3170.615478515625,1736.97705078125],"size":[243.70773315429688,142],"flags":{},"order":9,"mode":0,"inputs":[{"name":"model","type":"PTMODEL","link":65},{"name":"train_loader","type":"PTDATALOADER","link":66},{"name":"optimizer","type":"PTOPTIMIZER","link":68},{"name":"val_loader","type":"PTDATALOADER","link":67,"shape":7}],"outputs":[{"name":"Model","type":"PTMODEL","links":[71],"slot_index":0},{"name":"train loss","type":"TENSOR","links":null},{"name":"val loss","type":"TENSOR","links":null}],"properties":{"Node name for S&R":"PtTrainClassificationModel"},"widgets_values":[5,true]},{"id":19,"type":"PtSaveModel","pos":[3464.489501953125,1694.661376953125],"size":[280.30267333984375,68.31287384033203],"flags":{},"order":10,"mode":0,"inputs":[{"name":"model","type":"PTMODEL","link":71}],"outputs":[{"name":"model full path","type":"STRING","links":[70],"slot_index":0}],"properties":{"Node name for S&R":"PtSaveModel"},"widgets_values":["fashion_mnist_ep5.pt"]},{"id":54,"type":"MarkdownNote","pos":[2582.973388671875,1955.99560546875],"size":[210,58.94380569458008],"flags":{},"order":3,"mode":0,"inputs":[],"outputs":[],"properties":{},"widgets_values":["# Load val data"],"color":"#432","bgcolor":"#653"},{"id":53,"type":"MarkdownNote","pos":[2582.973388671875,1652.8607177734375],"size":[210,58.94380569458008],"flags":{},"order":4,"mode":0,"inputs":[],"outputs":[],"properties":{},"widgets_values":["# Load train data"],"color":"#432","bgcolor":"#653"},{"id":11,"type":"PtoAdam","pos":[3170.615478515625,1445.9212646484375],"size":[265.8851013183594,108.32855224609375],"flags":{},"order":8,"mode":0,"inputs":[{"name":"model","type":"PTMODEL","link":22}],"outputs":[{"name":"PTOPTIMIZER","type":"PTOPTIMIZER","links":[68],"slot_index":0}],"properties":{"Node name for S&R":"PtoAdam"},"widgets_values":[0.001,0.9,0.999]},{"id":52,"type":"MarkdownNote","pos":[2582.973388671875,1445.9212646484375],"size":[210,58.94380569458008],"flags":{},"order":5,"mode":0,"inputs":[],"outputs":[],"properties":{},"widgets_values":["# Define model"],"color":"#432","bgcolor":"#653"},{"id":55,"type":"MarkdownNote","pos":[3170.615478515625,1953.1151123046875],"size":[210,58.94380569458008],"flags":{},"order":6,"mode":0,"inputs":[],"outputs":[],"properties":{},"widgets_values":["# Train"],"color":"#432","bgcolor":"#653"},{"id":56,"type":"MarkdownNote","pos":[3468.277099609375,1806.20458984375],"size":[210,58.94380569458008],"flags":{},"order":7,"mode":0,"inputs":[],"outputs":[],"properties":{},"widgets_values":["# Save model"],"color":"#432","bgcolor":"#653"},{"id":51,"type":"PandasShowText","pos":[3469.39404296875,1921.830078125],"size":[576.9476318359375,81.15640258789062],"flags":{},"order":11,"mode":0,"inputs":[{"name":"text","type":"STRING","link":70,"widget":{"name":"text"}}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6}],"properties":{"Node name for S&R":"PandasShowText"},"widgets_values":["","/home/dockeruser/comfy/ComfyUI/custom_nodes/data-analysis/models/fashion_mnist_ep5.pt"]}],"links":[[22,22,0,11,0,"PTMODEL"],[65,22,0,50,0,"PTMODEL"],[66,47,0,50,1,"PTDATALOADER"],[67,48,0,50,3,"PTDATALOADER"],[68,11,0,50,2,"PTOPTIMIZER"],[70,19,0,51,0,"STRING"],[71,50,0,19,0,"PTMODEL"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.8678754334266201,"offset":[-2457.1876923760833,-1312.0857787454647]},"node_versions":{"data-analysis":"dab52eaa403a5e9cdc546aca7f7d95e41ea0a943"},"ue_links":[]},"version":0.4} \ No newline at end of file diff --git a/modules/pytorch_wrapper/pt_data_loader.py b/modules/pytorch_wrapper/pt_data_loader.py new file mode 100644 index 0000000..7ec163b --- /dev/null +++ b/modules/pytorch_wrapper/pt_data_loader.py @@ -0,0 +1,81 @@ +import inspect +from typing import Any, Dict +import ast +import torch +from torch.utils.data import DataLoader + + +class PtDataLoader: + """ + Loads data from a dataset node and creates a PyTorch DataLoader. + + **dataset** + Connect a PtvDataset node that provides the dataset. + + **batch size** + Specifies the number of samples per batch. + + **shuffle** + If True, shuffles the dataset before each epoch. + + category: PyTorch wrapper - Training + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types required for data loading. + + Returns: + Dict[str, Any]: A dictionary specifying required and optional input types. + """ + return { + "required": { + "dataset": ("PTVDATASET", {}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 1e6}), + "shuffle": ("BOOLEAN", {"default": False}), + }, + "optional": { + "parameters": ("STRING", {"default": "", "multiline": True}) + } + } + + RETURN_TYPES: tuple = ("PTDATALOADER",) + FUNCTION: str = "f" + CATEGORY: str = "Training" + + @classmethod + def IS_CHANGED(cls, **kw): + return float("NaN") + + def f(self, + dataset: Any, # One of the classes defined in torchvision.datasets + batch_size: int, + shuffle: bool, + parameters: str) -> tuple: + """ + Creates a PyTorch DataLoader for the given dataset. + + Args: + dataset (torchvision.datasets.{MNIST, ...}): An instance of a dataset from torchvision.datasets. + batch_size (int): The number of samples per batch. + shuffle (bool): If True, shuffles the dataset before each epoch. + parameters (str): Additional parameters in Python dictionary format. + + Returns: + tuple: A tuple containing the created DataLoader instance. + """ + with torch.inference_mode(False): + param_dict = ast.literal_eval(parameters) + + # Get valid parameters for the DataLoader class + valid_params = inspect.signature(DataLoader).parameters + + # Filter only parameters that match the dataset's constructor + filtered_params = {k: v for k, v in param_dict.items() if k in valid_params} + + dl = DataLoader(dataset=dataset, + batch_size=batch_size, + shuffle=shuffle, + **filtered_params) + return (dl,) diff --git a/modules/pytorch_wrapper/pt_evaluate_classification_model.py b/modules/pytorch_wrapper/pt_evaluate_classification_model.py new file mode 100644 index 0000000..92fb68a --- /dev/null +++ b/modules/pytorch_wrapper/pt_evaluate_classification_model.py @@ -0,0 +1,71 @@ +from typing import Any, Dict, Tuple +import torch +import torch.nn as nn +import torch.nn.functional as F +from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score + +class PtEvaluateClassificationModel: + """ + Performs inference on test data and computes evaluation metrics. + + category: PyTorch wrapper - Training + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "model": ("PTMODEL", {}), + "data_loader": ("PTDATALOADER", {}), + "use_gpu": ("BOOLEAN", {"default":False}) + } + } + + RETURN_NAMES: Tuple[str, ...] = ("accuracy", "precision", "recall", "f1", "num_samples") + RETURN_TYPES: Tuple[str, ...] = ("FLOAT", "FLOAT", "FLOAT", "FLOAT", "INT") + FUNCTION: str = "f" + CATEGORY: str = "Training" + + def f(self, model: nn.Module, data_loader: torch.utils.data.DataLoader, use_gpu: bool) -> Tuple[float, float, float, float, int]: + """ + Performs inference on test data and computes evaluation metrics. + + Args: + model (torch.nn.Module): The PyTorch model to evaluate. + data_loader (torch.utils.data.DataLoader): DataLoader for the test dataset. + use_gpu (bool): Whether to use GPU for inference. + + Returns: + Tuple[float, float, float, float, int]: A tuple containing accuracy, precision, recall, + F1-score, and the number of samples. + """ + + with torch.inference_mode(): + if use_gpu: + model.to("cuda") + model.eval() + y_hat = [] + y = [] + + for images, labels in data_loader: + if use_gpu: + images = images.to("cuda") + labels = labels.to("cuda") + outputs = model(images) + preds = outputs.argmax(dim=1) + + y_hat.extend(preds.cpu().numpy()) + y.extend(labels.cpu().numpy()) + + accuracy = accuracy_score(y, y_hat) + precision = precision_score(y, y_hat, average='macro') + recall = recall_score(y, y_hat, average='macro') + f1 = f1_score(y, y_hat, average='macro') + num_samples = len(y) + return (accuracy, precision, recall, f1, num_samples) diff --git a/modules/pytorch_wrapper/pt_load_model.py b/modules/pytorch_wrapper/pt_load_model.py new file mode 100644 index 0000000..c40dbbc --- /dev/null +++ b/modules/pytorch_wrapper/pt_load_model.py @@ -0,0 +1,41 @@ +import os +from typing import Any, Dict +import torch +from .utils import get_model_full_path + +class PtLoadModel: + """ + A wrapper class for saving a PyTorch model. + + category: PyTorch wrapper - Training + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "model": ("PTMODEL", {}), + "model_path": ("STRING", {"default": "model.pkl"}) + } + } + + RETURN_NAMES: tuple = ("model",) + RETURN_TYPES: tuple = ("PTMODEL",) + FUNCTION: str = "f" + CATEGORY: str = "Data Analysis" + + @classmethod + def IS_CHANGED(cls, **kw): + return float("NaN") + + def f(self, model:Any, model_path: str): + model_full_path = get_model_full_path(model_path) + sd = torch.load(model_full_path) + model.load_state_dict(sd) + return (model,) \ No newline at end of file diff --git a/modules/pytorch_wrapper/pt_save_model.py b/modules/pytorch_wrapper/pt_save_model.py new file mode 100644 index 0000000..993c221 --- /dev/null +++ b/modules/pytorch_wrapper/pt_save_model.py @@ -0,0 +1,36 @@ +import os +from typing import Any, Dict +import torch +from .utils import get_model_full_path + +class PtSaveModel: + """ + A wrapper class for saving a PyTorch model. + + category: IO + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "model": ("PTMODEL", {}), + "model_path": ("STRING", {"default": "model.pkl"}) + } + } + + RETURN_NAMES: tuple = ("model full path",) + RETURN_TYPES: tuple = ("STRING",) + FUNCTION: str = "f" + CATEGORY: str = "Data Analysis" + + def f(self, model:Any, model_path: str): + model_full_path = get_model_full_path(model_path) + torch.save(model.state_dict(), model_full_path) + return (os.path.realpath(model_full_path),) \ No newline at end of file diff --git a/modules/pytorch_wrapper/pt_train_classification_model.py b/modules/pytorch_wrapper/pt_train_classification_model.py new file mode 100644 index 0000000..632d0be --- /dev/null +++ b/modules/pytorch_wrapper/pt_train_classification_model.py @@ -0,0 +1,111 @@ +from typing import Any, Dict, Optional, Tuple +import torch +import torch.nn as nn +import torch.nn.functional as F +import numpy as np + +class PtTrainClassificationModel: + """ + Trains a classification model using a given dataset, optimizer, and number of epochs. + + category: PyTorch wrapper - Training + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types required for training the model. + + Returns: + Dict[str, Any]: A dictionary specifying required and optional input types. + """ + return { + "required": { + "model": ("PTMODEL", {}), + "train_loader": ("PTDATALOADER", {}), + "optimizer": ("PTOPTIMIZER", {}), + "epochs": ("INT", {"default":1, "min":1, "max":1e6}), + "use_gpu": ("BOOLEAN", {"default":False}) + }, + "optional": { + "val_loader": ("PTDATALOADER", {}), + } + } + + RETURN_NAMES: tuple = ("Model", "train loss", "val loss") + RETURN_TYPES: tuple = ("PTMODEL","TENSOR","TENSOR") + FUNCTION: str = "f" + CATEGORY: str = "Training" + + @classmethod + def IS_CHANGED(cls, **kw): + return float("NaN") + + def f(self, model: nn.Module, + train_loader: torch.utils.data.DataLoader, + optimizer: torch.optim.Optimizer, + epochs: int, + use_gpu: bool, + val_loader: Optional[torch.utils.data.DataLoader] = None) -> Tuple[nn.Module, torch.Tensor, torch.Tensor]: + """ + Trains a classification model. + + Args: + model (torch.nn.Module): The PyTorch model to be trained. + train_loader (torch.utils.data.DataLoader): DataLoader containing the training dataset. + optimizer (torch.optim.Optimizer): Optimizer used for training. + epochs (int): Number of training epochs. + use_gpu (bool): Whether to use GPU for training. + val_loader (Optional[torch.utils.data.DataLoader]): DataLoader for validation dataset (optional). + + Returns: + Tuple[torch.nn.Module, torch.Tensor, torch.Tensor]: A tuple containing the trained model, + training loss history, and validation loss history. + """ + + with torch.inference_mode(False): + train_loss = list() + val_loss = list() + + loss_function = nn.CrossEntropyLoss(reduction="sum") + + # Train the model + for epoch in range(epochs): + if use_gpu: + model.to("cuda") + model.train() + total_loss = 0 + + for images, labels in train_loader: + if use_gpu: + images = images.to("cuda") + labels = labels.to("cuda") + optimizer.zero_grad() + outputs = model(images) + loss = loss_function(outputs, labels) + loss.backward() + optimizer.step() + total_loss += loss.item() + epoch_loss = total_loss / len(train_loader) + print(f"Epoch (train) {epoch+1}/{epochs}, Loss: {epoch_loss:.4f}") + train_loss.append(epoch_loss) + + if val_loader: + pass + with torch.no_grad(): + model.eval() + total_loss = 0 + for images, labels in val_loader: + if use_gpu: + images = images.to("cuda") + labels = labels.to("cuda") + outputs = model(images) + loss = loss_function(outputs, labels) + total_loss += loss.item() + epoch_loss = total_loss / len(val_loader) + print(f"Epoch (val) {epoch+1}/{epochs}, Loss: {epoch_loss:.4f}") + val_loss.append(epoch_loss) + + return (model, + torch.Tensor(np.asarray(train_loss)), + torch.Tensor(np.asarray(val_loss))) \ No newline at end of file diff --git a/modules/pytorch_wrapper/ptn_linear_model.py b/modules/pytorch_wrapper/ptn_linear_model.py new file mode 100644 index 0000000..3f1c9f5 --- /dev/null +++ b/modules/pytorch_wrapper/ptn_linear_model.py @@ -0,0 +1,86 @@ +from typing import Any, Dict, Tuple +import ast +import torch +import torch.nn as nn +from .ptn_linear_model_def import DenseModel + + +class PtnLinearModel: + """ + A linear model consisting of dense layers. + + ### Fields: + - `dim_list`: A comma-separated string representing layer dimensions. + It should contain the input dimension for the first layer and the output dimensions + for all layers. + + Example for a two-layer network: + - Input data: 784 + - Layer 1: 784 → 128 + - Layer 2: 128 → 10 + - Specify `"784, 128, 10"` + + - `bias_list`: A comma-separated string representing bias usage (True/False) per layer. + + - `num_layers`: The number of layers in the model. + + category: PyTorch wrapper - Training + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "dim_list": ("STRING", {"default": "784,10"}), + "bias_list": ("STRING", {"default": "{True}"}), + "num_layers": ("INT", {"default": 1, "min": 1, "max": 2000}), + } + } + + RETURN_TYPES: Tuple[str] = ("PTMODEL",) + FUNCTION: str = "f" + CATEGORY: str = "Training" + + @classmethod + def IS_CHANGED(cls, **kw): + return float("NaN") + + def f(self, dim_list: str, bias_list: str, num_layers: int) -> Tuple[nn.Module]: + """ + Constructs a dense neural network model. + + Args: + dim_list (str): A comma-separated string representing layer dimensions. + bias_list (str): A comma-separated string representing bias usage (True/False) per layer. + num_layers (int): The number of layers in the model. + + Returns: + Tuple[nn.Module]: A tuple containing the instantiated PyTorch model. + + Raises: + ValueError: If `dim_list` length does not match `num_layers + 1`. + ValueError: If `bias_list` length does not match `num_layers`. + """ + dims = ast.literal_eval(dim_list) + biases = ast.literal_eval(bias_list) + + if len(dims) - 1 != num_layers: + raise ValueError( + "dim_list and num_layers do not match. dim_list should contain " + "the input dimension for the first layer and output dimensions for all layers. " + "This list should be one element longer than the number of layers." + ) + + if len(biases) != num_layers: + raise ValueError("bias_list and num_layers do not match.") + + with torch.inference_mode(False): + model = DenseModel(dims, biases, num_layers) + + return (model,) diff --git a/modules/pytorch_wrapper/ptn_linear_model_def.py b/modules/pytorch_wrapper/ptn_linear_model_def.py new file mode 100644 index 0000000..28a10e6 --- /dev/null +++ b/modules/pytorch_wrapper/ptn_linear_model_def.py @@ -0,0 +1,99 @@ +from typing import List, Dict, Any +import torch +import torch.nn as nn + + +class DenseSingleLayer(nn.Module): + """A single dense layer followed by a ReLU activation. + + Args: + in_features (int): Number of input features. + out_features (int): Number of output features. + bias (bool): If True, adds a learnable bias to the layer. + + pragma: skip_doc + """ + + @classmethod # TODO: Dummy method to suppress ComfyUI warning + def INPUT_TYPES(cls) -> Dict[str, Any]: + return { + } + + def __init__(self, in_features: int, out_features: int, bias: bool) -> None: + super().__init__() + self.fc = nn.Linear(in_features, out_features, bias) + self.activation = nn.ReLU() + + def forward(self, inputs: torch.Tensor) -> torch.Tensor: + """Forward pass of the dense layer with ReLU activation. + + Args: + inputs (torch.Tensor): Input tensor of shape `(batch_size, in_features)`. + + Returns: + torch.Tensor: Output tensor of shape `(batch_size, out_features)`. + """ + x = self.fc(inputs) + x = self.activation(x) + return x + + +class DenseModel(nn.Module): + """A multi-layer dense neural network with ReLU activation after each dense layer, except for the final layer. + + Args: + dim_list (List[int]): List of feature dimensions. Should be of length `num_layers + 1`. + bias_list (List[bool]): List indicating whether each layer should have a bias. + num_layers (int): Number of layers in the model. + + Example: + For a three-layer network: + - Layer 1: input -> output1 + - Layer 2: output1 -> output2 + - Layer 3: output2 -> output3 + + `dim_list = [input_dim, output1_dim, output2_dim, output3_dim]` + + pragma: skip_doc + """ + + @classmethod # TODO: Dummy method to suppress ComfyUI warning + def INPUT_TYPES(cls) -> Dict[str, Any]: + return { + } + + def __init__(self, dim_list: List[int], bias_list: List[bool], num_layers: int) -> None: + super().__init__() + + self.no_activation_layers = nn.ModuleList([ + DenseSingleLayer(dim_list[i], dim_list[i + 1], bias_list[i]) + for i in range(num_layers - 1) + ]) + + self.dim_list = dim_list + self.bias_list = bias_list + self.num_layers = num_layers + + self.final_dense = nn.Linear( + dim_list[num_layers - 1], # in_features + dim_list[num_layers], # out_features + bias_list[num_layers - 1] + ) + + def forward(self, inputs: torch.Tensor) -> torch.Tensor: + """Forward pass of the dense model. + + Args: + inputs (torch.Tensor): Input tensor of shape `(batch_size, dim_list[0])`. + + Returns: + torch.Tensor: Output tensor of shape `(batch_size, dim_list[-1])`. + """ + x = inputs.view(-1, self.dim_list[0]) # Ensure correct input shape + + for i in range(self.num_layers - 1): + x = self.no_activation_layers[i](x) + + x = self.final_dense(x) + + return x diff --git a/modules/pytorch_wrapper/pto_adam.py b/modules/pytorch_wrapper/pto_adam.py new file mode 100644 index 0000000..36fcef7 --- /dev/null +++ b/modules/pytorch_wrapper/pto_adam.py @@ -0,0 +1,46 @@ +from typing import Any, Dict +import torch +import torch.nn as nn +import torch.nn.functional as F + +class PtoAdam: + """ + Converts PyTorch tensor to NumPy ndarray. + + category: PyTorch wrapper - Tensor data conversion + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "model": ("PTMODEL", {}), + "learning_rate": ("FLOAT", {"default":0.001, "min":1e-10, "max":1, "step":0.0000000001}), + "beta1": ("FLOAT", {"default":0.9, "min":1e-10, "max":1, "step":0.0000000001}), + "beta2": ("FLOAT", {"default":0.999, "min":1e-10, "max":1, "step":0.0000000001}), + } + } + + RETURN_TYPES: tuple = ("PTOPTIMIZER",) + FUNCTION: str = "f" + CATEGORY: str = "Data Analysis" + + def f(self, model, learning_rate, beta1, beta2) -> tuple: + """ + Converts PyTorch tensor to NumPy ndarray. + + Args: + tens (torch.Tensor): PyTorch Tensor + + Returns: + tuple: A tuple containing the ndarray. + """ + with torch.inference_mode(False): + opt = torch.optim.Adam(model.parameters(), lr=learning_rate, betas=(beta1, beta2)) + return(opt,) \ No newline at end of file diff --git a/modules/pytorch_wrapper/ptv_dataset.py b/modules/pytorch_wrapper/ptv_dataset.py new file mode 100644 index 0000000..29984fd --- /dev/null +++ b/modules/pytorch_wrapper/ptv_dataset.py @@ -0,0 +1,124 @@ +import inspect +from typing import Any, Dict, Optional, Callable, Tuple +import torch +import torchvision.datasets as datasets +import ast + +from .utils import get_dataset_full_path + +class PtvDataset: + """ + A Torchvision Dataset class wrapper. + + Parameters + + **name** + Specify a dataset class name such as MNIST, FashionMNIST in string. + This will be converted to a dataset class internally. + + **download** + Set to True if you want to download. + + **root** + Specify the root directory of the downloaded dataset relative to the + dataset directory of this extension, or specify the absolute path. + If you leave as a blank, the dataset will be downloaded under the `datasets` directory + of this extension. + + **transform** + Data transforms e.g. transform to PyTorch tensor, normalize image. + Plug in the PTV Transforms node that contains Torchvision Transforms functionality. + + **parameters** + Specify other parameters in Python dict format. + For example, if you want to set Train parameter to True to download the train set, specify: + ``` + {"train": True} + ``` + or if you want to download the test set, specify: + ``` + {"train": False} + ``` + + category: PyTorch wrapper - Training + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the required input types. + + Returns: + Dict[str, Any]: A dictionary of required input types. + """ + return { + "required": { + "name": ("STRING", {"default": "", "multiline": False}), + "download": ("BOOLEAN", {"default": True}), + "root": ("STRING", {"default": "", "multiline": False}), + }, + "optional": { + "transform": ("PTVTRANSFORM", {}), + "parameters": ("STRING", {"default": "", "multiline": True}) + } + } + + RETURN_TYPES: Tuple[str] = ("PTVDATASET",) + FUNCTION: str = "f" + CATEGORY: str = "Training" + + @classmethod + def IS_CHANGED(cls, **kw): + return float("NaN") + + def f(self, + name: str, + download: bool, + root: str, + parameters: str, + transform: Optional[Callable] = None) -> Tuple: + """ + Loads a dataset from Torchvision with specified parameters. + + Args: + name (str): Name of the dataset class (e.g., MNIST, FashionMNIST). + download (bool): Whether to download the dataset. + root (str): Root directory for storing the dataset. + parameters (str): Additional dataset parameters in stringified dictionary format. + transform (Optional[Callable]): Transformations to apply to the dataset. + + Returns: + Tuple: A tuple containing the dataset instance. + """ + + with torch.inference_mode(False): + param_dict = ast.literal_eval(parameters) + + # Converts the datasets class name to dataset class itself + try: + dataset_class = getattr(datasets, name) + except AttributeError: + raise ValueError(f"Dataset '{name}' is not available in torchvision.datasets") + + # Get valid parameters for the dataset class + valid_params = inspect.signature(dataset_class).parameters + + # Filter only parameters that match the dataset's constructor + filtered_params = {k: v for k, v in param_dict.items() if k in valid_params} + + if root: + dataset_path = get_dataset_full_path(root) + else: # Use default directory + dataset_path = get_dataset_full_path("") + + if transform: + dc = dataset_class(download=download, + root=dataset_path, + transform=transform, + **filtered_params) + else: + dc = dataset_class(download=download, + root=dataset_path, + **filtered_params) + + return (dc,) diff --git a/modules/pytorch_wrapper/ptv_dataset_loader.py b/modules/pytorch_wrapper/ptv_dataset_loader.py new file mode 100644 index 0000000..40ad553 --- /dev/null +++ b/modules/pytorch_wrapper/ptv_dataset_loader.py @@ -0,0 +1,148 @@ +import ast +import inspect +from typing import Any, Dict, Tuple +import torch +import torchvision.datasets as datasets +from torch.utils.data import DataLoader +import torchvision.transforms as transforms +from .utils import get_dataset_full_path + + +class PtvDatasetLoader: + """ + A node to combine the dataset and data loader into a single node. + + Transform is internally called to convert input data to PyTorch tensors. + + Parameters + + **name** + Specify the dataset class name such as MNIST, FashionMNIST in string. + This will be converted to a dataset class internally. + + **download** + Set to True if you want to download. + + **root** + Specify the root directory of the downloaded dataset relative to the + dataset directory of this extension, or specify the absolute path. + If you leave as a blank, the dataset will be downloaded under the `datasets` directory + of this extension. + + **batch_size** + The number of samples per batch. + + **shuffle** + If True, shuffles the dataset before each epoch. + + **dataset parameters** + Specify other parameters in Python dict format. + For example, if you want to set Train parameter to True to download the train set, specify: + ``` + {"train": True} + ``` + or if you want to download the test set, specify: + ``` + {"train": False} + ``` + + **load parameters** + Additional parameters in Python dictionary format. + + category: PyTorch wrapper - Training + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the required input types. + + Returns: + Dict[str, Any]: A dictionary of required input types. + """ + return { + "required": { + "name": ("STRING", {"default": "", "multiline": False}), + "download": ("BOOLEAN", {"default": True}), + "root": ("STRING", {"default": "", "multiline": False}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 1e6}), + "shuffle": ("BOOLEAN", {"default": False}), + }, + "optional": { + "dataset_parameters": ("STRING", {"default": '{"train":True}', "multiline": True}), + "load_parameters": ("STRING", {"default": '{"num_workers:1}', "multiline": True}) + } + } + + RETURN_TYPES: Tuple[str] = ("PTDATALOADER",) + FUNCTION: str = "f" + CATEGORY: str = "Training" + + @classmethod + def IS_CHANGED(cls, **kw): + return float("NaN") + + def f(self, + name: str, + download: bool, + root: str, + batch_size: int, + shuffle: bool, + dataset_parameters: str, + load_parameters: str) -> Tuple: + """ + Loads a dataset from Torchvision with specified parameters. + + Args: + name (str): Name of the dataset class (e.g., MNIST, FashionMNIST). + download (bool): Whether to download the dataset. + root (str): Root directory for storing the dataset. + batch_size (int): The number of samples per batch. + shuffle (bool): If True, shuffles the dataset before each epoch. + dataset_parameters (str): Additional dataset parameters in stringified dictionary format. + load_parameters (str): Additional parameters for data load in Python dictionary format. + + Returns: + Tuple: A tuple containing the dataset instance. + """ + + with torch.inference_mode(False): + dataset_param_dict = ast.literal_eval(dataset_parameters) + + # Converts the datasets class name to dataset class itself + try: + dataset_class = getattr(datasets, name) + except AttributeError: + raise ValueError(f"Dataset '{name}' is not available in torchvision.datasets") + + # Get valid parameters for the dataset class + valid_params = inspect.signature(dataset_class).parameters + + # Filter only parameters that match the dataset's constructor + filtered_params = {k: v for k, v in dataset_param_dict.items() if k in valid_params} + + if root: + dataset_path = get_dataset_full_path(root) + else: # Use default directory + dataset_path = get_dataset_full_path("") + + transform = transforms.Compose([transforms.ToTensor()]) + dc = dataset_class(download=download, + root=dataset_path, + transform=transform, + **filtered_params) + + + load_param_dict = ast.literal_eval(load_parameters) + + # Get valid parameters for the DataLoader class + valid_params = inspect.signature(DataLoader).parameters + + # Filter only parameters that match the dataset's constructor + filtered_params = {k: v for k, v in load_param_dict.items() if k in valid_params} + + dl = DataLoader(dataset=dc, + batch_size=batch_size, + shuffle=shuffle, + **filtered_params) + return (dl,) \ No newline at end of file diff --git a/modules/pytorch_wrapper/ptv_transforms_to_tensor.py b/modules/pytorch_wrapper/ptv_transforms_to_tensor.py new file mode 100644 index 0000000..89fdded --- /dev/null +++ b/modules/pytorch_wrapper/ptv_transforms_to_tensor.py @@ -0,0 +1,37 @@ +from typing import Any, Dict, Optional, Callable +import torchvision.transforms as transforms + + +class PtvTransformsToTensor: + """ + Transforms elements of dataset to PyTorch tensors. + + category: PyTorch wrapper - Training + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the required input types. + + Returns: + Dict[str, Any]: An empty dictionary. + """ + return { + } + + RETURN_TYPES: tuple = ("PTVTRANSFORM",) + FUNCTION: str = "f" + CATEGORY: str = "Training" + + def f(self) -> tuple: + """ + Transforms elements of dataset to PyTorch tensors. + + Returns: + tuple: A tuple containing the transform callable. + """ + c = transforms.Compose([transforms.ToTensor()]) + return(c,) + + diff --git a/modules/pytorch_wrapper/utils.py b/modules/pytorch_wrapper/utils.py index 4b459ea..f9e9cb6 100644 --- a/modules/pytorch_wrapper/utils.py +++ b/modules/pytorch_wrapper/utils.py @@ -1,3 +1,4 @@ +import os import ast from typing import Optional, Tuple, Union import torch @@ -16,6 +17,59 @@ DTYPE_MAPPING = { } +def get_resource_full_path(resource_name: str, resource_path: str) -> str: + """ + Resolves the absolute path to a resource file within the "resources" directory and + ensures that the directory exists. + + Args: + resource_path (str): The path to the resource file. If the path is a relative path, + the path is considered relative to the `resource` directory of this extension. + + Returns: + str: The absolute path to the resource file. + """ + if os.path.isabs(resource_path): + resource_full_path = resource_path + else: + resource_full_path = os.path.realpath( + os.path.join(os.path.dirname(__file__), "..", "..", resource_name, resource_path)) + resource_dir = os.path.dirname(resource_full_path) + if os.path.exists(resource_dir) is False: + os.makedirs(resource_dir) + return resource_full_path + + +def get_model_full_path(model_path: str) -> str: + """ + Resolves the absolute path to a model file within the "models" directory and + ensures that the directory exists. + + Args: + model_path (str): The path to the model file. If the path is a relative path, + the path is considered relative to the `models` directory of this extension. + + Returns: + str: The absolute path to the model file. + """ + return get_resource_full_path("models", model_path) + + +def get_dataset_full_path(dataset_path: str) -> str: + """ + Resolves the absolute path to the datasete within the "datasets" directory and + ensures that the directory exists. + + Args: + dataset_path (str): The path to the dataset file. If the path is a relative path, + the path is considered relative to the `datasets` directory of this extension. + + Returns: + str: The absolute path to the dataset file. + """ + return get_resource_full_path("datasets", dataset_path) + + def str_to_dim(dim: str) -> Optional[Union[int, Tuple[int, ...]]]: """ Converts a string representation of a dimension into an integer or a tuple of integers. diff --git a/pyproject.toml b/pyproject.toml index 01503b6..600e97f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "data-analysis" description = "Data analysis custom modules for ComfyUI - Use Pandas & Matplotlib within ComfyUI" -version = "1.4.6" +version = "2.0.0" license = {file = "LICENSE"} [project.urls] diff --git a/requirements.txt b/requirements.txt index 2dd4374..58e2f64 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ matplotlib>=3.10.0 pandas>=2.2.3 seaborn>=0.13.2 -scipy>=1.14.1 \ No newline at end of file +scipy>=1.14.1 +scikit-learn>=1.6.1 \ No newline at end of file diff --git a/tests/pytorch_wrapper/pt_data_loader_test.py b/tests/pytorch_wrapper/pt_data_loader_test.py new file mode 100644 index 0000000..6b59a75 --- /dev/null +++ b/tests/pytorch_wrapper/pt_data_loader_test.py @@ -0,0 +1,43 @@ +import os +import sys +import unittest +import torch + +PROJECT_ROOT = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) + +from pytorch_wrapper.ptv_dataset import PtvDataset +from pytorch_wrapper.ptv_transforms_to_tensor import PtvTransformsToTensor +from pytorch_wrapper.pt_data_loader import PtDataLoader + +class TestPtDataLoader(unittest.TestCase): + def setUp(self): + """Set up test data.""" + self.dataset_node = PtvDataset() + self.compose_node = PtvTransformsToTensor() + self.data_loader_node = PtDataLoader() + + def test_with_transform(self): + """Tests with transform""" + bs = 2 + transform = self.compose_node.f()[0] + dataset = self.dataset_node.f("MNIST", + True, # download + "", # root + '{"train": True}', + transform=transform)[0] + train_data = self.data_loader_node.f( + dataset=dataset, + batch_size=bs, + shuffle=True, + parameters='{"num_workers":1}' + )[0] + + x, y = next(iter(train_data)) + self.assertEqual(x.size(), torch.Size([bs, 1, 28, 28])) + self.assertEqual(y.size(), torch.Size([bs])) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/pytorch_wrapper/pt_evaluate_classification_model_test.py b/tests/pytorch_wrapper/pt_evaluate_classification_model_test.py new file mode 100644 index 0000000..262e13a --- /dev/null +++ b/tests/pytorch_wrapper/pt_evaluate_classification_model_test.py @@ -0,0 +1,79 @@ +import os +import sys +import unittest +import torch +import torch.nn as nn + +PROJECT_ROOT = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) +from pytorch_wrapper.ptn_linear_model import PtnLinearModel +from pytorch_wrapper.ptv_dataset import PtvDataset +from pytorch_wrapper.ptv_transforms_to_tensor import PtvTransformsToTensor +from pytorch_wrapper.pt_data_loader import PtDataLoader +from pytorch_wrapper.pt_evaluate_classification_model import PtEvaluateClassificationModel +from pytorch_wrapper.pt_load_model import PtLoadModel + +class TestPtEvaluate(unittest.TestCase): + def setUp(self): + """Set up test instance.""" + # Transform + compose_node = PtvTransformsToTensor() + transform = compose_node.f()[0] + + # Dataset + dataset_node = PtvDataset() + dataset = dataset_node.f("FashionMNIST", + True, # download + "", # root + '{"train": False}', + transform=transform)[0] + + # Data loader + data_loader_node = PtDataLoader() + self.data_loader = data_loader_node.f( + dataset=dataset, + batch_size=32, + shuffle=True, + parameters='{"num_workers":1}' + )[0] + + # Model + self.model_node = PtnLinearModel() + self.model = self.model_node.f( + "784,180,42,10", # input dim for first layer, output dim for each layer + "True,True,True", # bias + 3 # num layers + )[0] + + # Load weights + self.load_model = PtLoadModel() + epochs = 1 + self.loaded_model = self.load_model.f(self.model, f"fashion_mnist_{epochs}_epochs.pt") + + # Instntiates evaluation node + self.evaluate = PtEvaluateClassificationModel() + + def test_evaluation(self): + """ + Tests evaluation. + + Note that this test requires a trained model file on the file system. + Unit test will fail if you run this for the first time. + Run the unit test for training to generate the weight, and re-run this unit test. + """ + accuracy, precision, recall, f1, num_samples = \ + self.evaluate.f(self.model, self.data_loader, use_gpu=True) + print(f""" + accuracy: {accuracy} + precision: {precision} + recall: {recall} + f1: {f1} + Number of samples: {num_samples} + """) + self.assertTrue(accuracy > 0.8) + self.assertEqual(num_samples, 10000) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/pytorch_wrapper/pt_train_classification_model_test.py b/tests/pytorch_wrapper/pt_train_classification_model_test.py new file mode 100644 index 0000000..9edb822 --- /dev/null +++ b/tests/pytorch_wrapper/pt_train_classification_model_test.py @@ -0,0 +1,59 @@ +import os +import sys +import unittest +import torch +import torch.nn as nn + +PROJECT_ROOT = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) + +from pytorch_wrapper.ptn_linear_model import PtnLinearModel +from pytorch_wrapper.pto_adam import PtoAdam +from pytorch_wrapper.ptv_dataset import PtvDataset +from pytorch_wrapper.ptv_transforms_to_tensor import PtvTransformsToTensor +from pytorch_wrapper.pt_data_loader import PtDataLoader +from pytorch_wrapper.pt_train_classification_model import PtTrainClassificationModel +from pytorch_wrapper.pt_save_model import PtSaveModel + + +class TestPtTrainModel(unittest.TestCase): + def setUp(self): + """Set up test instance.""" + compose_node = PtvTransformsToTensor() + transform = compose_node.f()[0] + dataset_node = PtvDataset() + dataset = dataset_node.f("FashionMNIST", + True, # download + "", # root + '{"train": True}', + transform=transform)[0] + data_loader_node = PtDataLoader() + self.train_loader = data_loader_node.f( + dataset=dataset, + batch_size=32, + shuffle=True, + parameters='{"num_workers":1}' + )[0] + + self.model_node = PtnLinearModel() + self.model = self.model_node.f( + "784,180,42,10", # input dim for first layer, output dim for each layer + "True,True,True", # bias + 3 # num layers + )[0] + + self.optimizer = PtoAdam().f(self.model, 0.001, 0.9, 0.999)[0] + self.trainer = PtTrainClassificationModel() + self.save_model = PtSaveModel() + + def test_1(self): + epochs = 1 + trained_model = self.trainer.f(self.model, self.train_loader, self.optimizer, + epochs, # epochs + use_gpu=True)[0] + self.save_model.f(trained_model, f"fashion_mnist_{epochs}_epochs.pt") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/pytorch_wrapper/pt_train_classification_model_with_dataset_loader_test.py b/tests/pytorch_wrapper/pt_train_classification_model_with_dataset_loader_test.py new file mode 100644 index 0000000..43fead0 --- /dev/null +++ b/tests/pytorch_wrapper/pt_train_classification_model_with_dataset_loader_test.py @@ -0,0 +1,51 @@ +import os +import sys +import unittest +import torch +import torch.nn as nn + +PROJECT_ROOT = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) + +from pytorch_wrapper.ptn_linear_model import PtnLinearModel +from pytorch_wrapper.pto_adam import PtoAdam +from pytorch_wrapper.ptv_dataset_loader import PtvDatasetLoader +from pytorch_wrapper.pt_train_classification_model import PtTrainClassificationModel +from pytorch_wrapper.pt_save_model import PtSaveModel + + +class TestPtTrainModelWithDatasetLoader(unittest.TestCase): + def setUp(self): + """Set up test instance.""" + self.dataset_loader_node = PtvDatasetLoader() + self.train_loader = self.dataset_loader_node.f( + "MNIST", + True, # download + "", # root + batch_size=128, + shuffle=True, + dataset_parameters='{"train": True}', + load_parameters='{"num_workers":1}' + )[0] + self.model_node = PtnLinearModel() + self.model = self.model_node.f( + "784,180,42,10", # input dim for first layer, output dim for each layer + "True,True,True", # bias + 3 # num layers + )[0] + + self.optimizer = PtoAdam().f(self.model, 0.001, 0.9, 0.999)[0] + self.trainer = PtTrainClassificationModel() + self.save_model = PtSaveModel() + + def test_1(self): + epochs = 2 + trained_model = self.trainer.f(self.model, self.train_loader, self.optimizer, + epochs, # epochs + use_gpu=True)[0] + self.save_model.f(trained_model, f"mnist_{epochs}_epochs.pt") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/pytorch_wrapper/ptn_linear_model_test.py b/tests/pytorch_wrapper/ptn_linear_model_test.py new file mode 100644 index 0000000..124a15a --- /dev/null +++ b/tests/pytorch_wrapper/ptn_linear_model_test.py @@ -0,0 +1,29 @@ +import os +import sys +import unittest +import torch + +PROJECT_ROOT = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) +from pytorch_wrapper.ptn_linear_model import PtnLinearModel # Updated import to PtnLinear + + +class TestPtnLinearModel(unittest.TestCase): + def setUp(self): + """Set up test instance.""" + self.model_node = PtnLinearModel() + self.model = self.model_node.f( + "784,180,42,10", # input dim for first layer, output dim for each layer + "True,True,True", # bias + 3 # num layers + )[0] # HINADA note: Using roughly 0.23x ratio for reduction + + def test_forward(self): + x = torch.ones(4, 28, 28) + out = self.model(x) + self.assertEqual(out.size(), torch.Size([4, 10])) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/pytorch_wrapper/ptv_dataset_loader_test.py b/tests/pytorch_wrapper/ptv_dataset_loader_test.py new file mode 100644 index 0000000..0d01690 --- /dev/null +++ b/tests/pytorch_wrapper/ptv_dataset_loader_test.py @@ -0,0 +1,34 @@ +import os +import sys +import unittest +import torch +PROJECT_ROOT = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) +from pytorch_wrapper.ptv_dataset_loader import PtvDatasetLoader + +class TestPtDataLoader(unittest.TestCase): + def setUp(self): + """Set up test data.""" + self.dataset_loader_node = PtvDatasetLoader() + + def test1(self): + """Tests downloading data and checks dimension""" + bs = 2 + train_data = self.dataset_loader_node.f( + "MNIST", + True, # download + "", # root + batch_size=bs, + shuffle=True, + dataset_parameters='{"train": True}', + load_parameters='{"num_workers":1}' + )[0] + + x, y = next(iter(train_data)) + self.assertEqual(x.size(), torch.Size([bs, 1, 28, 28])) + self.assertEqual(y.size(), torch.Size([bs])) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/pytorch_wrapper/ptv_dataset_test.py b/tests/pytorch_wrapper/ptv_dataset_test.py new file mode 100644 index 0000000..3eeffba --- /dev/null +++ b/tests/pytorch_wrapper/ptv_dataset_test.py @@ -0,0 +1,36 @@ +import os +import sys +import unittest + +PROJECT_ROOT = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) +from pytorch_wrapper.ptv_dataset import PtvDataset +from pytorch_wrapper.ptv_transforms_to_tensor import PtvTransformsToTensor + +class TestPtvDataset(unittest.TestCase): + def setUp(self): + """Set up test data.""" + self.node = PtvDataset() + self.compose_node = PtvTransformsToTensor() + + def test_no_transform(self): + """Tests downloading without transform""" + self.node.f("MNIST", + True, # download + "", # root + '{"train": True}', + transform=None) + + def test_with_transform(self): + """Tests downloading with transform""" + transform = self.compose_node.f()[0] + self.node.f("MNIST", + True, # download + "", # root + '{"train": False}', + transform=transform) + + +if __name__ == "__main__": + unittest.main()