Deep learning time series with TensorFlow
Project description
Documentation | Tutorials | Release Notes | 中文
TFTS (TensorFlow Time Series) is an easy-to-use time series package, supporting the classical and latest deep learning methods in TensorFlow or Keras.
- Support sota performance for time series task (prediction, classification, anomaly detection)
- Provide advanced deep learning models for industry, research and competition
- Documentation lives at time-series-prediction.readthedocs.io
Tutorial
Installation
- python >= 3.7
- tensorflow >= 2.4
pip install tfts
Quick start
import matplotlib.pyplot as plt
import tfts
from tfts import AutoModel, AutoConfig, KerasTrainer
train_length = 24
predict_length = 8
(x_train, y_train), (x_valid, y_valid) = tfts.get_data("sine", train_length, predict_length, test_size=0.2)
model_name_or_path = 'seq2seq'
config = AutoConfig.for_model(model_name_or_path)
model = AutoModel.from_config(config, predict_length=predict_length)
trainer = KerasTrainer(model)
trainer.train((x_train, y_train), (x_valid, y_valid), n_epochs=3)
pred = trainer.predict(x_valid)
trainer.plot(history=x_valid, true=y_valid, pred=pred)
plt.show()
Prepare your own data
You could train your own data by preparing 3D data as inputs, for both inputs and targets
- option1
np.ndarray
- option2
tf.data.Dataset
Encoder only model inputs
import numpy as np
from tfts import AutoConfig, AutoModel, KerasTrainer
train_length = 49
predict_length = 10
n_feature = 2
x_train = np.random.rand(1, train_length, n_feature) # inputs: (batch, train_length, feature)
y_train = np.random.rand(1, predict_length, 1) # target: (batch, predict_length, 1)
x_valid = np.random.rand(1, train_length, n_feature)
y_valid = np.random.rand(1, predict_length, 1)
config = AutoConfig.for_model('rnn')
model = AutoModel.from_config(config, predict_length=predict_length)
trainer = KerasTrainer(model)
trainer.train(train_dataset=(x_train, y_train), valid_dataset=(x_valid, y_valid), n_epochs=1)
Encoder-decoder model inputs
# option1: np.ndarray
import numpy as np
from tfts import AutoConfig, AutoModel, KerasTrainer
train_length = 49
predict_length = 10
n_encoder_feature = 2
n_decoder_feature = 3
x_train = (
np.random.rand(1, train_length, 1), # inputs: (batch, train_length, 1)
np.random.rand(1, train_length, n_encoder_feature), # encoder_feature: (batch, train_length, encoder_features)
np.random.rand(1, predict_length, n_decoder_feature), # decoder_feature: (batch, predict_length, decoder_features)
)
y_train = np.random.rand(1, predict_length, 1) # target: (batch, predict_length, 1)
x_valid = (
np.random.rand(1, train_length, 1),
np.random.rand(1, train_length, n_encoder_feature),
np.random.rand(1, predict_length, n_decoder_feature),
)
y_valid = np.random.rand(1, predict_length, 1)
config = AutoConfig.for_model("seq2seq")
model = AutoModel.from_config(config, predict_length=predict_length)
trainer = KerasTrainer(model)
trainer.train((x_train, y_train), (x_valid, y_valid), n_epochs=1)
# option2: tf.data.Dataset
import tensorflow as tf
from tfts import AutoConfig, AutoModel, KerasTrainer
class FakeReader(object):
def __init__(self, predict_length):
train_length = 49
n_encoder_feature = 2
n_decoder_feature = 3
self.x = np.random.rand(15, train_length, 1)
self.encoder_feature = np.random.rand(15, train_length, n_encoder_feature)
self.decoder_feature = np.random.rand(15, predict_length, n_decoder_feature)
self.target = np.random.rand(15, predict_length, 1)
def __len__(self):
return len(self.x)
def __getitem__(self, idx):
return {
"x": self.x[idx],
"encoder_feature": self.encoder_feature[idx],
"decoder_feature": self.decoder_feature[idx],
}, self.target[idx]
def iter(self):
for i in range(len(self.x)):
yield self[i]
predict_length = 10
train_reader = FakeReader(predict_length=predict_length)
train_loader = tf.data.Dataset.from_generator(
train_reader.iter,
({"x": tf.float32, "encoder_feature": tf.float32, "decoder_feature": tf.float32}, tf.float32),
)
train_loader = train_loader.batch(batch_size=1)
valid_reader = FakeReader(predict_length=predict_length)
valid_loader = tf.data.Dataset.from_generator(
valid_reader.iter,
({"x": tf.float32, "encoder_feature": tf.float32, "decoder_feature": tf.float32}, tf.float32),
)
valid_loader = valid_loader.batch(batch_size=1)
config = AutoConfig.for_model("seq2seq")
model = AutoModel.from_config(config, predict_length=predict_length)
trainer = KerasTrainer(model)
trainer.train(train_dataset=train_loader, valid_dataset=valid_loader, n_epochs=1)
Prepare custom model config
import tensorflow as tf
import tfts
from tfts import AutoModel, AutoConfig
config = AutoConfig.for_model('rnn')
print(config)
config.rnn_hidden_size = 128
model = AutoModel.from_config(config, predict_length=7, )
Build your own model
Full list of model tfts supported using AutoModel
- rnn
- tcn
- bert
- nbeats
- seq2seq
- wavenet
- transformer
- informer
You could build the custom model based on tfts, especially
- add custom-defined embeddings for categorical variables
- add custom-defined head layers for classification or anomaly task
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tfts import AutoModel, AutoConfig
def build_model():
train_length = 24
train_features = 15
predict_length = 16
inputs = Input([train_length, train_features])
config = AutoConfig.for_model("seq2seq")
backbone = AutoModel.from_config(config, predict_length=predict_length)
outputs = backbone(inputs)
outputs = Dense(1, activation="sigmoid")(outputs)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
model.compile(loss="mse", optimizer="rmsprop")
return model
Examples
- TFTS-Bert wins the 3rd place in KDD Cup 2022-wind power forecasting
- TFTS-Seq2seq wins the 4th place in Tianchi-ENSO prediction 2021
For other DL frameworks, try pytorch-forecasting, gluonts, paddlets
Citation
If you find tfts project useful in your research, please consider cite:
@misc{tfts2020,
author = {Longxing Tan},
title = {Time series prediction},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/longxingtan/time-series-prediction}},
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file tfts-0.0.12.tar.gz
.
File metadata
- Download URL: tfts-0.0.12.tar.gz
- Upload date:
- Size: 40.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.4 Linux/6.5.0-1024-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4874fe680d49802cd326591c5127a23a306ec46b7b01faf9f16bab34e082fc34 |
|
MD5 | 68bfcacd8201eadec58b10b059dfea6c |
|
BLAKE2b-256 | db5f7168904e396f4503827e31bd8b490283f32747c945a2df16e69f00611ae3 |
File details
Details for the file tfts-0.0.12-py3-none-any.whl
.
File metadata
- Download URL: tfts-0.0.12-py3-none-any.whl
- Upload date:
- Size: 56.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.4 Linux/6.5.0-1024-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 31a53808ab47a4a0125d416a8dc8e626748ac5fc7474401146f3eb1176a67a5f |
|
MD5 | d13e34f1a54edfeb366482fc507cfd0f |
|
BLAKE2b-256 | cb560838baf931729dd7e0c4af32eeda781cb95027e0f5e8059ae0ed6fd56e29 |