Tutorials#

GitHub

The following tutorials can be also found as notebooks on GitHub.

Train your own data#

tfts supports multi-type time series prediction:

  • single-value single-step prediction

  • single-value multi-steps prediction

  • multi-value single-step prediction

  • multi-value multi-steps prediction

Feed the input data into the model#

# tf.data.Dataset
batch_size = 1
train_length = 10
predict_sequence_length = 5
x = tf.random.normal([batch_size, train_length, 1])
encoder_feature
  • tf.data.Dataset

  • list or tuple for (x, encoder_feature, decoder_features)

  • array for single variable prediction

Features#

  • datetime features

  • static features

  • dynamic features

from tfts.features import feature_registry, registry

feature_registry = feature_registry
feature_registry.register(["some features"])

@registry
def add_custom_features():
    return

Train the models#

import tensorflow as tf
import tfts
from tfts import AutoModel, AutoConfig, kerasTrainer

model_name = 'seq2seq
loss_fn = tf.keras.losses.MeanSquaredError()
optimizer = tf.keras.optimizers.Adam(0.003)

config = AutoConfig.for_model(model_name_or_path)
model = AutoModel.from_config(config=config, predict_sequence_length=12)

trainer = KerasTrainer(model, loss_fn=loss_fn, optimizer=optimizer)

history = trainer.train(
    dataset_train, dataset_val, epochs=10, batch_size=32,
)

Custom-defined configuration#

Change the model parameters. If you want touch more parameters in model config, please raise an issue in github.

import tensorflow as tf
import tfts
from tfts import AutoModel, AutoConfig

config = AutoConfig.for_model('rnn')
print(config)

custom_model_config = {
    "rnn_size": 128,
    "dense_size": 128,
}
config.update(custom_model_config)
model = AutoModel('rnn', config=config)

Multi-variables and multi-steps prediction#

import tensorflow as tf
import tfts
from tfts import AutoModel, AutoConfig

config = AutoConfig.for_model('rnn')
print(config)

config.update({
    "rnn_size": 128,
    "dense_size": 128,
})
print(config)

model = AutoModel.from_config(config, predict_sequence_length=7)

x = tf.random.normal([1, 14, 1])
encoder_features = tf.random.normal([1, 14, 10])
decoder_features = tf.random.normal([1, 7, 3])
model()

Custom head for classification or anomaly task#

Set up the custom-defined head layer to do the classification task or anomaly detection task

import tensorflow as tf
import tfts
from tfts import AutoModel, AutoConfig, AutoTuner

config = AutoConfig.for_model('rnn')
custom_model_head = tf.keras.Sequential(
    Dense(1)
)
model = AutoModel.from_config(config, custom_model_head=custom_model_head)

Custom-defined trainer#

You could use tfts trainer, custom trainer or use keras to train directly.

import tensorflow as tf
from tensorflow.keras.layers import Dense, Input
import tfts
from tfts import AutoModel, AutoConfig
train_length = 24
train_features = 15
predict_sequence_length = 16

inputs = Input([train_length, train_features])
config = AutoConfig.for_model('seq2seq')
backbone = AutoModel.from_config(config, predict_sequence_length=predict_sequence_length)
outputs = backbone(inputs)
outputs = Dense(1, activation="sigmoid")(outputs)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
model.compile(loss="mse", optimizer="rmsprop")
model.fit(x, y)

Deployment in tf-serving#

save the model

import tensorflow as tf
import tfts
from tfts import AutoModel, AutoConfig, AutoTuner

serve the model with tf-serving

import tensorflow as tf
import tfts
from tfts import AutoModel, AutoConfig, AutoTuner