heart_library.estimators.classification package

Submodules

heart_library.estimators.classification.pytorch module

This module implements a JATIC compatible ART PyTorchClassifier.

class heart_library.estimators.classification.pytorch.JaticPyTorchClassifier(provider: str = '', id: str | None = None, metadata: dict[str, Any] | None = None, **kwargs: Any)[source]

Bases: PyTorchClassifier

JATIC compatible extension of ART core PyTorchClassifier

Parameters:

PyTorchClassifier (PyTorchClassifier) – ART PyTorchClassifier.

Examples

We can create a default JaticPyTorchClassifier without a provider,

using a specified model, loss function, and optimizer:

>>> from torchvision.models import resnet18, ResNet18_Weights
>>> from heart_library.estimators.classification.pytorch import JaticPyTorchClassifier
>>> import torch

Define the JaticPyTorchClassifier inputs, in this case for image classification:

>>> model = resnet18(ResNet18_Weights)
>>> loss_fn = torch.nn.CrossEntropyLoss(reduction="sum")
>>> optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
>>> jptc = JaticPyTorchClassifier(
...     model=model,
...     loss=loss_fn,
...     optimizer=optimizer,
...     input_shape=(3, 32, 32),
...     nb_classes=10,
...     clip_values=(0, 255),
...     preprocessing=(0.0, 255),
... )
>>> jptc.model.conv1
Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
metadata: dict[str, Any]
train(data: Sequence[_SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes]], **kwargs: Any) None[source]

Train the model using JATIC supported data format

Parameters:

data (Sequence[ArrayLike]) – Array of images, targets, metadata.

Returns:

None

heart_library.estimators.classification.query_efficient_bb module

This module implements a HEART compatible ART QueryEfficientGradientEstimationClassifier.

class heart_library.estimators.classification.query_efficient_bb.HeartQueryEfficientGradientEstimationClassifier(classifier: Any, num_basis: int = 20, sigma: float = 0.015625, round_samples: float = 0.0)[source]

Bases: QueryEfficientGradientEstimationClassifier

HEART compatible extension of ART core QueryEfficientGradientEstimationClassifier

Parameters:

QueryEfficientGradientEstimationClassifier (QueryEfficientGradientEstimationClassifier) – ART QueryEfficientGradientEstimationClassifier.

Examples

We can create a default HeartQueryEfficientGradientEstimationClassifier and pass in sample data for prediction:

>>> from torchvision.models import resnet18, ResNet18_Weights
>>> from heart_library.estimators.classification.pytorch import JaticPyTorchClassifier
>>> from heart_library.estimators.classification.query_efficient_bb         import HeartQueryEfficientGradientEstimationClassifier
>>> import torch
>>> import numpy

Define the JaticPyTorchClassifier, in this case passing in a resnet model:

>>> model = resnet18(ResNet18_Weights)
>>> loss_fn = torch.nn.CrossEntropyLoss(reduction="sum")
>>> optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
>>> jptc = JaticPyTorchClassifier(
...    model=model, loss=loss_fn, optimizer=optimizer, input_shape=(3, 32, 32), nb_classes=10, clip_values=(0, 255),
...    preprocessing=(0.0, 255)
... )

Define the HeartQueryEfficientGradientEstimationClassifier by passing in the JaticPyTorchClassifier.

>>> hqegec = HeartQueryEfficientGradientEstimationClassifier(
...    classifier = jptc
... )

Define the data in expected format of 4-d and 3 channels for prediction.

>>> arr = np.zeros((3,3,4,2))
>>> hqegec.predict(arr)[0][0]
0.57479644
predict(*args, **kwargs)

Perform prediction of the classifier for input x. Rounds results first.

Parameters:
  • x (NDArray[np.float32]) – Features in array of shape (nb_samples, nb_features) or (nb_samples, nb_pixels_1, nb_pixels_2, nb_channels) or (nb_samples, nb_channels, nb_pixels_1, nb_pixels_2).

  • batch_size (int, optional) – Size of batches. Defaults to 128.

Returns:

Array of predictions of shape (nb_inputs, nb_classes).

Return type:

NDArray[np.float32]

Module contents

Module providing classification estimators

class heart_library.estimators.classification.HeartQueryEfficientGradientEstimationClassifier(classifier: Any, num_basis: int = 20, sigma: float = 0.015625, round_samples: float = 0.0)[source]

Bases: QueryEfficientGradientEstimationClassifier

HEART compatible extension of ART core QueryEfficientGradientEstimationClassifier

Parameters:

QueryEfficientGradientEstimationClassifier (QueryEfficientGradientEstimationClassifier) – ART QueryEfficientGradientEstimationClassifier.

Examples

We can create a default HeartQueryEfficientGradientEstimationClassifier and pass in sample data for prediction:

>>> from torchvision.models import resnet18, ResNet18_Weights
>>> from heart_library.estimators.classification.pytorch import JaticPyTorchClassifier
>>> from heart_library.estimators.classification.query_efficient_bb         import HeartQueryEfficientGradientEstimationClassifier
>>> import torch
>>> import numpy

Define the JaticPyTorchClassifier, in this case passing in a resnet model:

>>> model = resnet18(ResNet18_Weights)
>>> loss_fn = torch.nn.CrossEntropyLoss(reduction="sum")
>>> optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
>>> jptc = JaticPyTorchClassifier(
...    model=model, loss=loss_fn, optimizer=optimizer, input_shape=(3, 32, 32), nb_classes=10, clip_values=(0, 255),
...    preprocessing=(0.0, 255)
... )

Define the HeartQueryEfficientGradientEstimationClassifier by passing in the JaticPyTorchClassifier.

>>> hqegec = HeartQueryEfficientGradientEstimationClassifier(
...    classifier = jptc
... )

Define the data in expected format of 4-d and 3 channels for prediction.

>>> arr = np.zeros((3,3,4,2))
>>> hqegec.predict(arr)[0][0]
0.57479644
predict(*args, **kwargs)

Perform prediction of the classifier for input x. Rounds results first.

Parameters:
  • x (NDArray[np.float32]) – Features in array of shape (nb_samples, nb_features) or (nb_samples, nb_pixels_1, nb_pixels_2, nb_channels) or (nb_samples, nb_channels, nb_pixels_1, nb_pixels_2).

  • batch_size (int, optional) – Size of batches. Defaults to 128.

Returns:

Array of predictions of shape (nb_inputs, nb_classes).

Return type:

NDArray[np.float32]

class heart_library.estimators.classification.JaticPyTorchClassifier(provider: str = '', id: str | None = None, metadata: dict[str, Any] | None = None, **kwargs: Any)[source]

Bases: PyTorchClassifier

JATIC compatible extension of ART core PyTorchClassifier

Parameters:

PyTorchClassifier (PyTorchClassifier) – ART PyTorchClassifier.

Examples

We can create a default JaticPyTorchClassifier without a provider,

using a specified model, loss function, and optimizer:

>>> from torchvision.models import resnet18, ResNet18_Weights
>>> from heart_library.estimators.classification.pytorch import JaticPyTorchClassifier
>>> import torch

Define the JaticPyTorchClassifier inputs, in this case for image classification:

>>> model = resnet18(ResNet18_Weights)
>>> loss_fn = torch.nn.CrossEntropyLoss(reduction="sum")
>>> optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
>>> jptc = JaticPyTorchClassifier(
...     model=model,
...     loss=loss_fn,
...     optimizer=optimizer,
...     input_shape=(3, 32, 32),
...     nb_classes=10,
...     clip_values=(0, 255),
...     preprocessing=(0.0, 255),
... )
>>> jptc.model.conv1
Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
metadata: dict[str, Any]
preprocessing_operations: list[Preprocessor]
train(data: Sequence[_SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes]], **kwargs: Any) None[source]

Train the model using JATIC supported data format

Parameters:

data (Sequence[ArrayLike]) – Array of images, targets, metadata.

Returns:

None