Torch Tensor Type - Practical pyTorch Pipelining

Torch Tensor Types

This package is a Quality of Life improvement when prototyping and processing Tensor objects from the pyTorch library.
The TensorType class is a Pipeline for preprocessing tensors automatically, and include multiple utility methods. my_TensorType<<myData
You can add TensorTypes together to have a longer preprocessing pipeline. myTensorType + myOtherTensorType

For example, this code

1
fake_image = model(torch.unsqueeze(real_image, 0).cuda()).cpu().detach().numpy()[0]

can be replaced by

1
fake_image = SingleDisplayableImage<<model(ModelInputFormat<<real_image)

The list of arguments to the constructor is:

1
2
3
4
TensorType:
__init__(shape=None, transforms=[],
to_batch=False, device=None, from_single_value=False,
random_values=False, to_numpy=False, detach=False):

All of these should be pretty telling by their name, if you know pyTorch.

  • TensorType.shape: the input will be viewed as this shape
  • TensorType.transforms: a list of functions that will be applied at the end
  • TorchType.to_batch: will unsqueeze the data into a batch with a single sample
  • TorchType.device: transfers the tensor to a device
  • TorchType.from_single_value: creates a uniform tensor from a single value
  • TorchType.random_values: creates a tensor from torch.rand
  • TensorType.to_numpy: outputs a numpy array
  • TensorType.detach: detachs the tensor from the graph

Syntax

1
2
3
4
5
6
7
8
9
from TTT import TensorType as TT
# Creates a uniform image tensor pipeline
myTensorType = TT(shape=(3, 224, 224), from_single_value=True)
# A black image
data = myTensorType<<0
# "myTensorType" will parse first, then the other TT
myDisplayableImage = myTensorType + TT(to_numpy=True, transforms=[np.transpose])
# A white image ready to display
myDisplayableImage<<1