Skip to main content

Simple hierarchal models in PyTorch.

Project description

hierarchy network

simple-hierarchy

Simple PyTorch hierarchical models.

tests status codecov of simple-hierarchy pypi version most recent docs supported python versions Code style: black Code style: black Downloads License: MIT



Hierarchical Classification Networks

When looking at the task for classifying something where hierarchies were intrinsic to the classes, I searched for any libraries that might do very simple classification using grouped classes with hierarchies. However, I did not find any libraries that were suited for this relatively simple task. So I sought to create a more general solution that others can hopefully benefit from.

The concept is quite simple: create general architecture for groupings of classes dependent on each other. So starting with a basic concept of model, I looked to make something in PyTorch that represented my idea.

Example Use Case

Let us take an image geolocation problem where we want the location for city, county, and district. We will call these groupings a,b,c respectively. Given an image input, we want to predict all 3 classes but also need an architecture in which these relationships are properly represented. The network architecture below illustrates a possible solution (that this package will attempt to implement with a degree of adaptability). The architecture can be visualized as so with an input image: Network Architecture

where the class hierarchy is like so

Class Heirarchy

The class hierarchy is a similar structure to an example within this package. Each node has a tuple of a named grouping and the number of classes within that grouping. This the reason for the sizes in the final outputs in the network architecture. The large green plus signs within circles are used to indicate concatenation of the two input (green arrowed lines) leading into them. This is why the sections for class b and c have input size 4096 + 1024 = 5120.

Installation

The required version of Python for this package is >= 3.7.

To install this package, first, install PyTorch. You can use requirements.txt to install PyTorch 1.7, however, the best way to install is to go to PyTorch's website and follow the instructions there. This package may work with versions less than 1.7, but it was only tested on PyTorch 1.7. This package will allow for versions of PyTorch >= 1.0, but please know only 1.7 is tested. Using pip makes this installation easy and simple once PyTorch is installed. This can be installed through

pip install simple-hierarchy

The repository can also be cloned and then built from source using poetry.

Finally, this repository can simply be downloaded and imported as python code since there are essentially only two required classes here.

Getting Started

This architecture allows for simple yet adaptable hierarchal classifications for basic tasks that involve finite hierarchies. The package was targeted towards image classifications where there are multiple groups to classify something as but may serve other purposes equally well. Below is an example of how to use the package along with the defined class:

from simple_hierarchy.hierarchal_model import HierarchalModel
hierarchy = {
    ('A', 2) : [('B', 5)],
    ('B', 5) : [('C', 7)]
}
model_base = nn.Sequential(
  nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5),
  nn.ReLU(),
  nn.MaxPool2d(kernel_size=2, stride=2),
  nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5),
  nn.ReLU(),
  nn.MaxPool2d(kernel_size=2, stride=2),
  nn.Flatten(start_dim=1),
  nn.Linear(in_features=1296, out_features=120),
  nn.ReLU(),
  nn.Linear(in_features=120, out_features=84),
  nn.ReLU()
)
model = HierarchalModel(hierarchy, (84, 32, 32),base_model=model_base)
# Example input
a = torch.rand(3,50,50).unsqueeze(0)
model(a)

Then the model can be trained on an image dataset like any other model.

Additionally, there is a Jupyter notebook or colab notebook within this repository that illustrates some examples of how to use and run these classes. These notebooks each contain 2 examples of how to use this package with some short explanations on what each parameter means.

The formulation is quite simple, so it should not be too much additional work to incorporate the HierarchalModel into your networks. However, the solution given here is quite simple and therefore can be implemented easily for specific cases. The HierarchalModel class just provides a general solution for more use cases and gave me chance to test and build some architectural ideas.

Authors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simple-hierarchy-1.0.2.tar.gz (14.6 kB view details)

Uploaded Source

Built Distribution

simple_hierarchy-1.0.2-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file simple-hierarchy-1.0.2.tar.gz.

File metadata

  • Download URL: simple-hierarchy-1.0.2.tar.gz
  • Upload date:
  • Size: 14.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.5 CPython/3.8.9 Linux/5.4.0-1043-azure

File hashes

Hashes for simple-hierarchy-1.0.2.tar.gz
Algorithm Hash digest
SHA256 1484f22cbbe18d137db68ded791acafde83dce9f6946b441b4c21b2c58fe529a
MD5 2d26d713b78a851261f469d11c488dcc
BLAKE2b-256 af2b0b672acf11ab8edf4760d8a01c04db092ed1e41097a7391445f6c5e0027d

See more details on using hashes here.

File details

Details for the file simple_hierarchy-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: simple_hierarchy-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 13.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.5 CPython/3.8.9 Linux/5.4.0-1043-azure

File hashes

Hashes for simple_hierarchy-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2acaab1a3999928ac3874862dc00a59ae5cf76b2822b46c7f963419e03a45bb5
MD5 aaaaebdc977a4b5a123c72ee748511c8
BLAKE2b-256 a32b7316bf4b06724e5e92236e63a6e07244c89a3f337a79fa91382ba1146dd9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page