--- title: MINIROCKETPlus Pytorch keywords: fastai sidebar: home_sidebar summary: "A Very Fast (Almost) Deterministic Transform for Time Series Classification." description: "A Very Fast (Almost) Deterministic Transform for Time Series Classification." nb_path: "nbs/111d_models.MINIROCKETPlus_Pytorch.ipynb" ---
This is a modified Pytorch implementation of MiniRocket originally developed by Malcolm McLean and Ignacio Oguiza and based on:
Dempster, A., Schmidt, D. F., & Webb, G. I. (2020). MINIROCKET: A Very Fast (Almost) Deterministic Transform for Time Series Classification. arXiv preprint arXiv:2012.08791.
Original paper: https://arxiv.org/abs/2012.08791
Original code: https://github.com/angus924/minirocket
from fastai.torch_core import default_device
from fastai.metrics import accuracy
from fastai.callback.tracker import ReduceLROnPlateau
from tsai.data.all import *
from tsai.learner import *
dsid = 'ECGFiveDays'
X, y, splits = get_UCR_data(dsid, split_data=False)
mrf = MiniRocketFeaturesPlus(c_in=X.shape[1], seq_len=X.shape[2]).to(default_device())
X_train = X[splits[0]] # X_train may either be a np.ndarray or a torch.Tensor
mrf.fit(X_train)
X_tfm = get_minirocket_features(X, mrf).cpu().numpy()
tfms = [None, TSClassification()]
batch_tfms = TSStandardize(by_var=True)
dls = get_ts_dls(X_tfm, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=256)
learn = ts_learner(dls, MiniRocketHead, metrics=accuracy)
learn.fit(1, 1e-4, cbs=ReduceLROnPlateau(factor=0.5, min_lr=1e-8, patience=10))
from fastai.torch_core import default_device
from tsai.data.all import *
from tsai.learner import *
dsid = 'ECGFiveDays'
X, y, splits = get_UCR_data(dsid, split_data=False)
tfms = [None, TSClassification()]
batch_tfms = TSStandardize()
dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=256)
learn = ts_learner(dls, MiniRocketPlus, kernel_size=7, metrics=accuracy)
learn.fit_one_cycle(1, 1e-2)
from fastcore.test import *
from tsai.models.utils import build_ts_model
bs, c_in, seq_len = 8, 3, 50
c_out = 2
xb = torch.randn(bs, c_in, seq_len)
model = build_ts_model(MiniRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len)
test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
model = build_ts_model(MiniRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len, add_lsaz=True)
test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
from fastcore.test import *
from tsai.models.utils import build_ts_model
bs, c_in, seq_len = 8, 3, 50
c_out = 2
xb = torch.randn(bs, c_in, seq_len)
model = build_ts_model(InceptionRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len)
test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
model = build_ts_model(InceptionRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len, add_lsaz=True)
test_eq(model.to(xb.device)(xb).shape, (bs, c_out))