Skip to main content

xonv: Extended convolutional layers

Project description

xonv: Extended convolutional layers

This repository contains the code for extended convolutional layers. These layers are akin to the convolutional layers in PyTorch, but with the key difference that they have spatially varying kernels.

Since the kernels are spatially varying, the convolutional layers in this repository offer more expressive power than the standard convolutional layers while having $\mathcal{O}(n)$ parameters, where $n$ is the input size. The implementation is based on matrix-vector products, which allows for scalable training and inference on GPUs.

Below is a comparison between the toeplitz-like matrix associated with a regular convolutional layer vs the extended convolutional layer (xonv):

Installation

Run the command below to install the package to be used in your Python environment.

pip install xonv

For further development and to run the examples, clone the repository and install the package in editable mode. Make sure to adapt CUDA version in setup.cfg to the one installed on your system.

# Create a new conda environment.
conda create --name xonv "python<=3.12"
conda activate xonv

# Clone the repository and install the package in editable mode.
git clone ttps://github.com/alisiahkoohi/xonv
cd xonv/
pip install -e .

Usage

The extended convolutional layers can be used as a drop-in replacement for the PyTorch convolutional layers. The following example demonstrates how to use the extended convolutional layers:

from xonv.layer import Xonv2D

input_size = (32, 32)  # Height, Width of input
in_channels = 3
out_channels = 16
kernel_size = 3
stride = 2

layer = Xonv2D(
    in_channels,
    out_channels,
    kernel_size,
    input_size,
    stride=stride,
)

input_tensor = torch.randn(1, in_channels, *input_size)
output = layer(input_tensor)

print(layer)  # Xonv2D(in_channels=3, out_channels=16, kernel_size=3, input_size=(32, 32), stride=2)
print(output.shape)  # Should be [1, 16, 16, 16]

Examples

Visualizing the associated linear matrix

To visualize the toeplitz-like matrix associated with the convolutional layer, run the following command:

python scripts/create_toeplitz_like_matrix.py

Comparing the loss landscape of Xonv2d vs torch.nn.Conv2d for a regression task

To compare the loss landscape of the extended convolutional layer with the standard convolutional layer, run the following command:

python scripts/regression_loss_landscape_comparison.py

Comparing convergence rate of Xonv2d vs torch.nn.Conv2d for a regression task

To compare the convergence rate of the extended convolutional layer with the standard convolutional layer, run the following command:

python scripts/regression_convergence_comparison.py

Questions

Please contact alisk@rice.edu for questions.

Author

Ali Siahkoohi

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

xonv-0.2.5.tar.gz (14.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xonv-0.2.5-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

File details

Details for the file xonv-0.2.5.tar.gz.

File metadata

  • Download URL: xonv-0.2.5.tar.gz
  • Upload date:
  • Size: 14.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.13

File hashes

Hashes for xonv-0.2.5.tar.gz
Algorithm Hash digest
SHA256 e66dd1c99cfc29755d64e44a8d5c1629d4d98205ce60a8cbcc70519d5ea03a32
MD5 f5a0dbb9f8c57aa041e4144e17957eab
BLAKE2b-256 7200e9543bb13458bb47d722ea3b885ec2bb69f0171d2abd210196d950cdf4f0

See more details on using hashes here.

File details

Details for the file xonv-0.2.5-py3-none-any.whl.

File metadata

  • Download URL: xonv-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.13

File hashes

Hashes for xonv-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 31bea40f8133990f5651fee9c323dd5675bf9fd75f705861fbc01b32b3fa19cc
MD5 0565c46ec35a0e35d42d5a09028fadc7
BLAKE2b-256 4b8b646f8e396b635139fd015afb997cbc75dd36c1e9af54c0cd0dbd18c26a3e

See more details on using hashes here.

Supported by

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