Skip to content

Rapidly prototype TensorFlow and PyTorch models using VGSL (Variable-size Graph Specification Language) and convert them back to VGSL spec.

License

Notifications You must be signed in to change notification settings

TimKoornstra/VGSLify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VGSLify: Variable-size Graph Specification for TensorFlow & PyTorch

PyPI Downloads License

VGSLify simplifies defining, training, and interpreting deep learning models using the Variable-size Graph Specification Language (VGSL). Inspired by Tesseract's VGSL specs, VGSLify enhances and streamlines the process for both TensorFlow and PyTorch.

Table of Contents

Installation

pip install vgslify

Install your chosen backend:

# For TensorFlow
pip install tensorflow

# For PyTorch
pip install torch

Verify installation:

python -c "import vgslify; print(vgslify.__version__)"

How VGSL Works

VGSL uses concise strings to define model architectures. For example:

None,None,64,1 Cr3,3,32 Mp2,2 Cr3,3,64 Mp2,2 Rc3 Fr64 D20 Lrs128 D20 Lrs64 D20 Fs92

Each part represents a layer: input, convolution, pooling, reshaping, fully connected, LSTM, and output. VGSL allows specifying activation functions for customization.

Quick Start

Generating a Model with VGSLify

from vgslify.generator import VGSLModelGenerator

# Define the VGSL specification
vgsl_spec = "None,None,64,1 Cr3,3,32 Mp2,2 Fs92"

# Choose backend: "tensorflow", "torch", or "auto" (defaults to whichever is available)
vgsl_gn = VGSLModelGenerator(backend="tensorflow") 
model = vgsl_gn.generate_model(vgsl_spec, model_name="MyModel")
model.summary()


vgsl_gn = VGSLModelGenerator(backend="torch") # Switch to PyTorch
model = vgsl_gn.generate_model(vgsl_spec, model_name="MyTorchModel")
print(model)

Creating Individual Layers with VGSLify

from vgslify.generator import VGSLModelGenerator

vgsl_gn = VGSLModelGenerator(backend="tensorflow")
conv2d_layer = vgsl_gn.construct_layer("Cr3,3,64")

# Integrate into an existing model:
# model = tf.keras.Sequential()
# model.add(conv2d_layer) # ...


# Example with generate_history:
history = vgsl_gn.generate_history("None,None,64,1 Cr3,3,32 Mp2,2 Fs92")
for layer in history:
    print(layer)

Converting Models to VGSL

from vgslify.utils import model_to_spec
import tensorflow as tf
# Or import torch.nn as nn

# TensorFlow example:
model = tf.keras.models.load_model("path_to_your_model.keras") # If loading from file

# PyTorch example:
# model = MyPyTorchModel() # Assuming MyPyTorchModel is defined elsewhere


vgsl_spec_string = model_to_spec(model)
print(vgsl_spec_string)

Note: Flatten/Reshape layers might require manual input shape adjustment in the generated VGSL.

Additional Documentation

See the VGSL Documentation for more details on supported layers and their specifications.

Contributing

Contributions are welcome! Fork the repository, set up your environment, make changes, and submit a pull request. Create issues for bugs or suggestions.

License

MIT License. See LICENSE file.

Acknowledgements

Thanks to the creators and contributors of the original VGSL specification.