- Notifications
You must be signed in to change notification settings - Fork56
Library of autoencoders for sequential data
License
shobrook/sequitur
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
sequitur is a library that lets you create and train an autoencoder for sequential data in just two lines of code. It implements three different autoencoder architectures in PyTorch, and a predefined training loop.sequitur is ideal for working with sequential data ranging from single and multivariate time series to videos, and is geared for those who want to get startedquickly with autoencoders.
importtorchfromsequitur.modelsimportLINEAR_AEfromsequiturimportquick_traintrain_seqs= [torch.randn(4)for_inrange(100)]# 100 sequences of length 4encoder,decoder,_,_=quick_train(LINEAR_AE,train_seqs,encoding_dim=2,denoise=True)encoder(torch.randn(4))# => torch.tensor([0.19, 0.84])
Each autoencoder learns to represent input sequences as lower-dimensional, fixed-size vectors. This can be useful for finding patterns among sequences, clustering sequences, or converting sequences into inputs for other algorithms.
Requires Python 3.X and PyTorch 1.2.X
You can installsequitur withpip:
$ pip install sequitur
First, you need to prepare a set of example sequences to train an autoencoder on. This training set should be a list oftorch.Tensor objects, where each tensor has shape[num_elements, *num_features]. So, if each example in your training set is a sequence of 10 5x5 matrices, then each example would be a tensor with shape[10, 5, 5].
Next, you need to choose an autoencoder model. If you're working with sequences of numbers (e.g. time series) or 1D vectors (e.g. word vectors), then you should use theLINEAR_AE orLSTM_AE model. For sequences of 2D matrices (e.g. videos) or 3D matrices (e.g. fMRI scans), you'll want to useCONV_LSTM_AE. Each model is a PyTorch module, and can be imported like so:
fromsequitur.modelsimportCONV_LSTM_AE
More details about each model are in the "Models" section below.
From here, you can either initialize the model yourself and write your own training loop, or import thequick_train function and plug in the model, training set, and desired encoding size, like so:
importtorchfromsequitur.modelsimportCONV_LSTM_AEfromsequiturimportquick_traintrain_set= [torch.randn(10,5,5)for_inrange(100)]encoder,decoder,_,_=quick_train(CONV_LSTM_AE,train_set,encoding_dim=4)
After training,quick_train returns theencoder anddecoder models, which are PyTorch modules that can encode and decode new sequences. These can be used like so:
x=torch.randn(10,5,5)z=encoder(x)# Tensor with shape [4]x_prime=decoder(z)# Tensor with shape [10, 5, 5]
quick_train(model, train_set, encoding_dim, verbose=False, lr=1e-3, epochs=50, denoise=False, **kwargs)
Lets you train an autoencoder with just one line of code. This is useful if you don't want to create your own training loop. Training involves learning a vector encoding of each input sequence, reconstructing the original sequence from the encoding, and calculating the loss (mean-squared error) between the reconstructed input and the original input. The autoencoder weights are updated using the Adam optimizer.
Parameters:
model(torch.nn.Module): Autoencoder model to train (imported fromsequitur.models)train_set(list): List of sequences (each atorch.Tensor) to train the model on; has shape[num_examples, seq_len, *num_features]encoding_dim(int): Desired size of the vector encodingverbose(bool, optional (default=False)): Whether or not to print the loss at each epochlr(float, optional (default=1e-3)): Learning rateepochs(int, optional (default=50)): Number of epochs to train for
**kwargs: Parameters to pass intomodelwhen it's instantiated
Returns:
encoder(torch.nn.Module): Trained encoder model; takes a sequence (as a tensor) as input and returns an encoding of the sequence as a tensor of shape[encoding_dim]decoder(torch.nn.Module): Trained decoder model; takes an encoding (as a tensor) and returns a decoded sequenceencodings(list): List of tensors corresponding to the final vector encodings of each sequence in the training setlosses(list): List of average MSE values at each epoch
Every autoencoder inherits fromtorch.nn.Module and has anencoder attribute and adecoder attribute, both of which also inherit fromtorch.nn.Module.
LINEAR_AE(input_dim, encoding_dim, h_dims=[], h_activ=torch.nn.Sigmoid(), out_activ=torch.nn.Tanh())
Consists of fully-connected layers stacked on top of each other. Can only be used if you're dealing with sequences of numbers, not vectors or matrices.
Parameters:
input_dim(int): Size of each input sequenceencoding_dim(int): Size of the vector encodingh_dims(list, optional (default=[])): List of hidden layer sizes for the encoderh_activ(torch.nn.Module or None, optional (default=torch.nn.Sigmoid())): Activation function to use for hidden layers; ifNone, no activation function is usedout_activ(torch.nn.Module or None, optional (default=torch.nn.Tanh())): Activation function to use for the output layer in the encoder; ifNone, no activation function is used
Example:
To create the autoencoder shown in the diagram above, use the following arguments:
fromsequitur.modelsimportLINEAR_AEmodel=LINEAR_AE(input_dim=10,encoding_dim=4,h_dims=[8,6],h_activ=None,out_activ=None)x=torch.randn(10)# Sequence of 10 numbersz=model.encoder(x)# z.shape = [4]x_prime=model.decoder(z)# x_prime.shape = [10]
LSTM_AE(input_dim, encoding_dim, h_dims=[], h_activ=torch.nn.Sigmoid(), out_activ=torch.nn.Tanh())
Autoencoder for sequences of vectors which consists of stacked LSTMs. Can be trained on sequences of varying length.
Parameters:
input_dim(int): Size of each sequence element (vector)encoding_dim(int): Size of the vector encodingh_dims(list, optional (default=[])): List of hidden layer sizes for the encoderh_activ(torch.nn.Module or None, optional (default=torch.nn.Sigmoid())): Activation function to use for hidden layers; ifNone, no activation function is usedout_activ(torch.nn.Module or None, optional (default=torch.nn.Tanh())): Activation function to use for the output layer in the encoder; ifNone, no activation function is used
Example:
To create the autoencoder shown in the diagram above, use the following arguments:
fromsequitur.modelsimportLSTM_AEmodel=LSTM_AE(input_dim=3,encoding_dim=7,h_dims=[64],h_activ=None,out_activ=None)x=torch.randn(10,3)# Sequence of 10 3D vectorsz=model.encoder(x)# z.shape = [7]x_prime=model.decoder(z,seq_len=10)# x_prime.shape = [10, 3]
CONV_LSTM_AE(input_dims, encoding_dim, kernel, stride=1, h_conv_channels=[1], h_lstm_channels=[])
Autoencoder for sequences of 2D or 3D matrices/images, loosely based on the CNN-LSTM architecture described inBeyond Short Snippets: Deep Networks for Video Classification. Uses a CNN to create vector encodings of each image in an input sequence, and then an LSTM to create encodings of the sequence of vectors.
Parameters:
input_dims(tuple): Shape of each 2D or 3D image in the input sequencesencoding_dim(int): Size of the vector encodingkernel(int or tuple): Size of the convolving kernel; use tuple to specify a different size for each dimensionstride(int or tuple, optional (default=1)): Stride of the convolution; use tuple to specify a different stride for each dimensionh_conv_channels(list, optional (default=[1])): List of hidden channel sizes for the convolutional layersh_lstm_channels(list, optional (default=[])): List of hidden channel sizes for the LSTM layers
Example:
fromsequitur.modelsimportCONV_LSTM_AEmodel=CONV_LSTM_AE(input_dims=(50,100),encoding_dim=16,kernel=(5,8),stride=(3,5),h_conv_channels=[4,8],h_lstm_channels=[32,64])x=torch.randn(22,50,100)# Sequence of 22 50x100 imagesz=model.encoder(x)# z.shape = [16]x_prime=model.decoder(z,seq_len=22)# x_prime.shape = [22, 50, 100]
About
Library of autoencoders for sequential data
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.



