Package: tfts
Documentation|Tutorials|Release Notes|中文TFTS(TensorFlow Time Series) is an easy-to-use python package for time series, supporting the classical and SOTA deep learning methods in TensorFlow or Keras.Flexible and powerful design for time series taskAdvanced deep learning models for industry, research and competitionDocumentation lives attime-series-prediction.readthedocs.ioTutorialInstallationpython >= 3.7tensorflow >= 2.4$pipinstalltftsBasic usageimportmatplotlib.pyplotaspltimporttftsfromtftsimportAutoModel,AutoConfig,KerasTrainertrain_length=24predict_length=8(x_train,y_train),(x_valid,y_valid)=tfts.get_data("sine",train_length,predict_length,test_size=0.2)model=AutoModel("seq2seq",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 dataYou could train your own data by preparing 3D data as inputs, for both inputs and targetsoption1np.ndarrayoption2tf.data.DatasetEncoder only model inputstrain_length=49predict_length=10n_feature=2x_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)model=AutoModel("rnn",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.ndarraytrain_length=49predict_length=10n_encoder_feature=2n_decoder_feature=3x_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)model=AutoModel("seq2seq",predict_length=predict_length)trainer=KerasTrainer(model)trainer.train((x_train,y_train),(x_valid,y_valid),n_epochs=1)# option2: tf.data.DatasetclassFakeReader(object):def__init__(self,predict_length):train_length=49n_encoder_feature=2n_decoder_feature=3self.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):returnlen(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]defiter(self):foriinrange(len(self.x)):yieldself[i]predict_length=10train_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)model=AutoModel("seq2seq",predict_length=predict_length)trainer=KerasTrainer(model)trainer.train(train_dataset=train_loader,valid_dataset=valid_loader,n_epochs=1)Prepare custom model paramsimporttensorflowastfimporttftsfromtftsimportAutoModel,AutoConfigconfig=AutoConfig('rnn').get_config()print(config)custom_model_params={"rnn_size":128,"dense_size":128,}model=AutoModel('rnn',predict_length=7,custom_model_params=custom_model_params)Build your own modelFull list of model tfts supported using AutoModelrnntcnbertnbeatsseq2seqwavenettransformerinformerYou could build the custom model based on tfts, especiallyadd custom-defined embeddings for categorical variablesadd custom-defined head layers for classification or anomaly taskimporttensorflowastffromtensorflow.keras.layersimportInput,DensefromtftsimportAutoModeldefbuild_model():train_length=24train_features=15predict_length=16inputs=Input([train_length,train_features])backbone=AutoModel("seq2seq",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")returnmodelExamplesTFTS-Bertwins the3rd placein KDD Cup 2022-wind power forecastingTFTS-Seq2seqwins the4th placein Tianchi-ENSO prediction 2021For other DL frameworks, trypytorch-forecasting,gluonts,paddletsCitationIf 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}},
}