Skip to main content

TensorWrap: A high level TensorFlow wrapper for JAX.

Project description

TensorWrap

TensorWrap - A full-fledged Deep Learning Library based on JAX and TensorFlow.

PyPI version

| Install guide

What is TensorWrap?

TensorWrap is high performance neural network library that acts as a wrapper around JAX (another high performance machine learning library), bringing the familiar feel of the TensorFlow (2.x.x). This is currently aimed towards prototyping over deployment, in the current state.

TensorWrap works by creating a layer of abstraction over JAX's low level api and introducing similar TensorFlow-like component's while supporting Autograd in native JAX operations. Additionally, the api has been updated to become more simpler and concise than TensorFlow's current API, by removing the redundant API's and deprecations that it possesses. Additionally, this library aims to improve the poor design of the TensorFlow API and making it more friendly towards research and educational audiences.

This is a personal project, not professionally affliated with Google in any way. Expect bugs and several incompatibilities/difference from the original libraries. Please help by trying it out, reporting bugs, and letting me know what you think!

Contents

Examples

  1. Custom Layers
import tensorwrap as tf
from tensorwrap import nn

class Dense(nn.layers.Layer):
    def __init__(self, units) -> None:
        super().__init__() # Needed for making it JIT compatible.
        self.units = units # Defining the output shape
  
    def build(self, input_shape: tuple) -> None:
        input_shape = tf.shape(input_shape) # Getting appropriate input shape
        self.kernel = self.add_weights([input_shape, self.units],
                                       initializer = 'glorot_uniform')
        self.bias = self.add_weights([self.units],
                                     initializer = 'zeros')
        super().build(self.kernel, self.bias) # Needed to add the kernel to model.
    
    # Use call not __call__ to define the flow. No tf.function needed either.
    def call(self, inputs):
        return inputs @ self.kernel + self.bias
  1. Just In Time Compiling with tf.function
import tensorwrap as tf
from tensorwrap import nn
tf.test.is_device_available(device_type = 'cuda')

@tf.function
def mse(y_pred, y_true):
    return tf.mean(tf.square(y_pred - y_true))

print(mse(100, 102))
  1. Customizing with Module Class
class CheckPoint(Module):
    def __init__(self, metrics) -> None:
        

Current Gimmicks

  1. Current models are all compiled by JAX's internal jit, so any error may remain a bit more cryptic than PyTorchs. However, this problem is still being worked on.

  2. Also, using tensorwrap.Module is currently not recommended, since other superclasses offer more functionality and ease of use.

  3. Sometime, the JAX backend may give out and give an algorithmic error. Another high priority, though this one is hidden in the C++ api of JIT.

  4. The JIT compilation is currently double of TensorFlow's on big models. However, the speed up is immense.

  5. Graph execution is currently not available, which means that all exported models can only be deployed within a python environment.

Installation

The device installation of TensorWrap depends on its backend, being JAX. Thus, our normal install will be covering both the GPU and CPU installation.

pip install --upgrade pip
pip install --upgrade tensorwrap

On Linux, it is often necessary to first update pip to a version that supports manylinux2014 wheels. Also note that for Linux, we currently release wheels for x86_64 architectures only, other architectures require building from source. Trying to pip install with other Linux architectures may lead to jaxlib not being installed alongside jax, although jax may successfully install (but fail at runtime). These pip installations do not work with Windows, and may fail silently; see above.

Note

If any problems occur with cuda installation, please visit the JAX github page, in order to understand the problem with lower API installation.

Citations

This project have been heavily inspired by TensorFlow and once again, is built on the open-source machine learning XLA framework JAX. Therefore, I recognize the authors of JAX and TensorFlow for the exceptional work they have done and understand that my library doesn't profit in any sort of way, since it is merely an add-on to the already existing community.

@software{jax2018github,
  author = {James Bradbury and Roy Frostig and Peter Hawkins and Matthew James Johnson and Chris Leary and Dougal Maclaurin and George Necula and Adam Paszke and Jake Vander{P}las and Skye Wanderman-{M}ilne and Qiao Zhang},
  title = {{JAX}: composable transformations of {P}ython+{N}um{P}y programs},
  url = {http://github.com/google/jax},
  version = {0.3.13},
  year = {2018},
}

Reference documentation

For details about the TensorWrap API, see the [main documentation] (coming soon!)

For details about JAX, see the reference documentation.

For documentation on TensorFlow API, see the API documentation

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

tensorwrap-0.0.0.6.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

tensorwrap-0.0.0.6-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

File details

Details for the file tensorwrap-0.0.0.6.tar.gz.

File metadata

  • Download URL: tensorwrap-0.0.0.6.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.2

File hashes

Hashes for tensorwrap-0.0.0.6.tar.gz
Algorithm Hash digest
SHA256 559833f251828dc64ef940ce9723a3aa06ca420f67e0968627811720b9067da0
MD5 2561b26b7e238a6a1c83089120e944a5
BLAKE2b-256 a33dc3bbe2fb2d458d90e3b84f9b4748096af0096570f7b34e9ccadf8778507e

See more details on using hashes here.

File details

Details for the file tensorwrap-0.0.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for tensorwrap-0.0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 1961b4aef9ff3b6276921cb99f83fd393415f27d0aebb968e488cfb7c710f237
MD5 9e3afe1acbd7c1e78dc75ec1837c3935
BLAKE2b-256 d6ebe67f4165aceadbf0bb884cd06f53f0b30e087327d447647b39f500e0b9b9

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