{"id":17671452,"url":"https://github.com/ai-fast-track/timeseries","last_synced_at":"2025-04-15T16:35:46.702Z","repository":{"id":40180585,"uuid":"238271862","full_name":"ai-fast-track/timeseries","owner":"ai-fast-track","description":"Time Series package for fastai v2","archived":false,"fork":false,"pushed_at":"2023-04-12T00:04:54.000Z","size":155015,"stargazers_count":95,"open_issues_count":10,"forks_count":15,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-28T22:24:15.269Z","etag":null,"topics":["cam","class-activation-map","classification","deep-learning","fastai","fastai2","neural-network","time-series","timeseries"],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ai-fast-track.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-04T18:06:18.000Z","updated_at":"2025-03-04T09:02:01.000Z","dependencies_parsed_at":"2024-10-24T08:15:39.714Z","dependency_job_id":null,"html_url":"https://github.com/ai-fast-track/timeseries","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"fastai/nbdev_template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-fast-track%2Ftimeseries","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-fast-track%2Ftimeseries/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-fast-track%2Ftimeseries/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-fast-track%2Ftimeseries/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ai-fast-track","download_url":"https://codeload.github.com/ai-fast-track/timeseries/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249109328,"owners_count":21214130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cam","class-activation-map","classification","deep-learning","fastai","fastai2","neural-network","time-series","timeseries"],"created_at":"2024-10-24T03:42:34.041Z","updated_at":"2025-04-15T16:35:46.684Z","avatar_url":"https://github.com/ai-fast-track.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `timeseries` package for fastai2\n\u003e **`timeseries`** is a Timeseries Classification and Regression package for fastai2.\n\n\n\u003ca href=\"https://colab.research.google.com/github/ai-fast-track/timeseries/blob/master/nbs/index.ipynb\" target=\"_parent\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/\u003e\u003c/a\u003e\n\n![](nbs/images/docs.png) [timeseries package documentation](https://ai-fast-track.github.io/timeseries/)\n\n## Installation\n\u003e There are may ways to install `timeseries` package. Since `timeseries` is built using `fastai2`, there are also different ways to install fastai2. We will show 2 differents ways to install them and explain the motivation behin each one of them.\n\n### Method 1 : Editable Version\n#### 1A - Installing fastai2\n\u003e Important :Only if you have not already installed `fastai2`,install [fastai2](https://dev.fast.ai/#Installing) by following the steps described there.\n\n#### 1B - Installing `timeseries` on a local machine\n\u003e Note :Installing an editable version of a package means that you will install a package from its corresponding github repository on your local machine. By doing so, you can pull the latest version whenever a new version is pushed.\nTo install `timeseries` editable package, follow the instructions here below:\n\n```\ngit clone https://github.com/ai-fast-track/timeseries.git\ncd timeseries\npip install -e .\n```\n\n### Method 2 : Non Editable version\n\u003e Note :Everytime you run the `!pip install git+https:// ...`, you are installing the package latest version stored on github. \u003e Important :As both fastai2 and `timeseries` are still under development, this is an easy way to use them in Google Colab or any other online platform. You can also use it on your local machine.\n\n#### 2A - Installing `fastai2` from its github repository\n\n```\n# Run this cell to install the latest version of fastai shared on github\n!pip install git+https://github.com/fastai/fastai2.git\n```\n\n```\n# Run this cell to install the latest version of fastcore shared on github\n!pip install git+https://github.com/fastai/fastcore.git\n```\n\n#### 2B - Installing `timeseries` from its github repository\n\n```\n# Run this cell to install the latest version of timeseries shared on github\n!pip install git+https://github.com/ai-fast-track/timeseries.git\n```\n\n## `Usage`\n\n```\n%reload_ext autoreload\n%autoreload 2\n%matplotlib inline\n```\n\n    The history saving thread hit an unexpected error (DatabaseError('database disk image is malformed',)).History will not be written to the database.\n\n\n```\nfrom fastai2.basics import *\n```\n\n```\nfrom timeseries.all import *\n```\n\n## Tutorial on timeseries package for fastai2\n\n## Example : NATOS dataset\n\n### Description\nThe data is generated by sensors on the hands, elbows, wrists and thumbs. The data are the x,y,z coordinates for each of the eight locations. The order of the data is as follows:\n\n![](nbs/images/NATOPS.jpg)\n\n**Right Arm vs Left Arm time series for the 'Not clear' Command ((#3) (see picture here above)**\n\n![](nbs/images/ts-left-arm.png)\n![](nbs/images/ts-right-arm.png)\n\n### Channels (24)\n| Hand                |  Elbow            | Hand               |  Elbow                |\n|:------------------- |:----------------- |:------------------ |:--------------------  | \n| 0. Hand tip left, X | 6. Elbow left, X  | 12.\tWrist left, X  | 18.\tThumb left, X  |\n| 1. Hand tip left, Y | 7. Elbow left, Y  | 13.\tWrist left, X  | 19.\tThumb left, X  |\n| 2. Hand tip left, Z | 8. Elbow left, Z  | 14.\tWrist left, X  | 20.\tThumb left, X  |\n| 3. Hand tip righ, X | 9. Elbow righ, X  | 15.\tWrist righ, X  | 21.\tThumb righ, X  |\n| 4. Hand tip righ, Y | 10. Elbow righ, Y | 16.\tWrist righ, X  | 22.\tThumb righ, X  |\n| 5. Hand tip righ, Z | 11. Elbow righ, Z | 17.\tWrist righ, X  | 23.\tThumb righ, X  |\n\n\n### Classes (6)\n\nThe six classes are separate actions, with the following meaning:\n\n|                   |                |                |                |                |                       |\n|:----------------- |:-------------- |:-------------- |:-------------- |:-------------- |:-------------- |\n| 1: I have command | 2: All clear   | 3: Not clear  | 4: Spread wings  | 5: Fold wings |6: Lock wings   |\n\n## Downloading and unzipping a time series dataset\n\n```\ndsname =  'NATOPS' #'NATOPS', 'LSST', 'Wine', 'Epilepsy', 'HandMovementDirection'\n```\n\n```\n# url = 'http://www.timeseriesclassification.com/Downloads/NATOPS.zip'\npath = unzip_data(URLs_TS.NATOPS)\npath\n```\n\n\n\n\n    Path('/home/farid/.fastai/data/NATOPS')\n\n\n\n## Why do I have to concatenate train and test data?\nBoth Train and Train dataset contains 180 samples each. We concatenate them in order to have one big dataset and then split into train and valid dataset using our own split percentage (20%, 30%, or whatever number you see fit)\n\n```\nfname_train = f'{dsname}_TRAIN.arff'\nfname_test = f'{dsname}_TEST.arff'\nfnames = [path/fname_train, path/fname_test]\nfnames\n```\n\n\n\n\n    [Path('/home/farid/.fastai/data/NATOPS/NATOPS_TRAIN.arff'),\n     Path('/home/farid/.fastai/data/NATOPS/NATOPS_TEST.arff')]\n\n\n\n```\ndata = TSData.from_arff(fnames)\nprint(data)\n```\n\n    TSData:\n     Datasets names (concatenated): ['NATOPS_TRAIN', 'NATOPS_TEST']\n     Filenames:                     [Path('/home/farid/.fastai/data/NATOPS/NATOPS_TRAIN.arff'), Path('/home/farid/.fastai/data/NATOPS/NATOPS_TEST.arff')]\n     Data shape: (360, 24, 51)\n     Targets shape: (360,)\n     Nb Samples: 360\n     Nb Channels:           24\n     Sequence Length: 51\n\n\n```\nitems = data.get_items()\n```\n\n```\nidx = 1\nx1, y1 = data.x[idx],  data.y[idx]\ny1\n```\n\n\n\n\n    '3.0'\n\n\n\n```\n\n# You can select any channel to display buy supplying a list of channels and pass it to `chs` argument\n# LEFT ARM\n# show_timeseries(x1, title=y1, chs=[0,1,2,6,7,8,12,13,14,18,19,20])\n\n```\n\n```\n# RIGHT ARM\n# show_timeseries(x1, title=y1, chs=[3,4,5,9,10,11,15,16,17,21,22,23])\n```\n\n```\n# ?show_timeseries(x1, title=y1, chs=range(0,24,3)) # Only the x axis coordinates\n\n```\n\n```\nseed = 42\nsplits = RandomSplitter(seed=seed)(range_of(items)) #by default 80% for train split and 20% for valid split are chosen \nsplits\n```\n\n\n\n\n    ((#288) [304,281,114,329,115,130,338,294,94,310...],\n     (#72) [222,27,96,253,274,35,160,172,302,146...])\n\n\n\n## Using `Datasets` class\n\n### Creating a Datasets object\n\n```\nlbl_dict = dict([\n    ('1.0', 'I have command'),   \n    ('2.0', 'All clear'),   \n    ('3.0', 'Not clear'),   \n    ('4.0', 'Spread wings'),   \n    ('5.0', 'Fold wings'),   \n    ('6.0', 'Lock wings')]\n)\n```\n\n```\ntfms = [[ItemGetter(0), ToTensorTS()], [ItemGetter(1), lbl_dict.get, Categorize()]]\n\n# Create a dataset\nds = Datasets(items, tfms, splits=splits)\n```\n\n```\nax = show_at(ds, 2, figsize=(1,1))\n```\n\n    Not clear\n\n\n\n![svg](docs/images/output_36_1.svg)\n\n\n## Creating a `Dataloaders` object\n\n### 1st method : using `Datasets` object\n\n```\nbs = 128                            \n# Normalize at batch time\ntfm_norm = Normalize(scale_subtype = 'per_sample_per_channel', scale_range=(0, 1)) # per_sample , per_sample_per_channel\n# tfm_norm = Standardize(scale_subtype = 'per_sample')\nbatch_tfms = [tfm_norm]\n\ndls1 = ds.dataloaders(bs=bs, val_bs=bs * 2, after_batch=batch_tfms, num_workers=0, device=default_device()) \n```\n\n```\ndls1.show_batch(max_n=9, chs=range(0,12,3))\n```\n\n\n![svg](docs/images/output_40_0.svg)\n\n\n# Using `DataBlock` class\n\n### 2nd method : using `DataBlock` and `DataBlock.get_items()` \n\n```\ntsdb = DataBlock(blocks=(TSBlock, CategoryBlock),\n                   get_items=get_ts_items,\n                   get_x = ItemGetter(0),\n                   get_y = Pipeline([ItemGetter(1), lbl_dict.get]),\n                   splitter=RandomSplitter(seed=seed),\n                   batch_tfms = batch_tfms)\n```\n\n```\ntsdb.summary(fnames)\n```\n\n    Setting-up type transforms pipelines\n    Collecting items from [Path('/home/farid/.fastai/data/NATOPS/NATOPS_TRAIN.arff'), Path('/home/farid/.fastai/data/NATOPS/NATOPS_TEST.arff')]\n    Found 360 items\n    2 datasets of sizes 288,72\n    Setting up Pipeline: ItemGetter -\u003e ToTensorTS\n    Setting up Pipeline: ItemGetter -\u003e dict.get -\u003e Categorize\n    \n    Building one sample\n      Pipeline: ItemGetter -\u003e ToTensorTS\n        starting from\n          ([[-0.540579 -0.54101  -0.540603 ... -0.56305  -0.566314 -0.553712]\n     [-1.539567 -1.540042 -1.538992 ... -1.532014 -1.534645 -1.536015]\n     [-0.608539 -0.604609 -0.607679 ... -0.593769 -0.592854 -0.599014]\n     ...\n     [ 0.454542  0.449924  0.453195 ...  0.480281  0.45537   0.457275]\n     [-1.411445 -1.363464 -1.390869 ... -1.468123 -1.368706 -1.386574]\n     [-0.473406 -0.453322 -0.463813 ... -0.440582 -0.427211 -0.435581]], 2.0)\n        applying ItemGetter gives\n          [[-0.540579 -0.54101  -0.540603 ... -0.56305  -0.566314 -0.553712]\n     [-1.539567 -1.540042 -1.538992 ... -1.532014 -1.534645 -1.536015]\n     [-0.608539 -0.604609 -0.607679 ... -0.593769 -0.592854 -0.599014]\n     ...\n     [ 0.454542  0.449924  0.453195 ...  0.480281  0.45537   0.457275]\n     [-1.411445 -1.363464 -1.390869 ... -1.468123 -1.368706 -1.386574]\n     [-0.473406 -0.453322 -0.463813 ... -0.440582 -0.427211 -0.435581]]\n        applying ToTensorTS gives\n          TensorTS of size 24x51\n      Pipeline: ItemGetter -\u003e dict.get -\u003e Categorize\n        starting from\n          ([[-0.540579 -0.54101  -0.540603 ... -0.56305  -0.566314 -0.553712]\n     [-1.539567 -1.540042 -1.538992 ... -1.532014 -1.534645 -1.536015]\n     [-0.608539 -0.604609 -0.607679 ... -0.593769 -0.592854 -0.599014]\n     ...\n     [ 0.454542  0.449924  0.453195 ...  0.480281  0.45537   0.457275]\n     [-1.411445 -1.363464 -1.390869 ... -1.468123 -1.368706 -1.386574]\n     [-0.473406 -0.453322 -0.463813 ... -0.440582 -0.427211 -0.435581]], 2.0)\n        applying ItemGetter gives\n          2.0\n        applying dict.get gives\n          All clear\n        applying Categorize gives\n          TensorCategory(0)\n    \n    Final sample: (TensorTS([[-0.5406, -0.5410, -0.5406,  ..., -0.5630, -0.5663, -0.5537],\n            [-1.5396, -1.5400, -1.5390,  ..., -1.5320, -1.5346, -1.5360],\n            [-0.6085, -0.6046, -0.6077,  ..., -0.5938, -0.5929, -0.5990],\n            ...,\n            [ 0.4545,  0.4499,  0.4532,  ...,  0.4803,  0.4554,  0.4573],\n            [-1.4114, -1.3635, -1.3909,  ..., -1.4681, -1.3687, -1.3866],\n            [-0.4734, -0.4533, -0.4638,  ..., -0.4406, -0.4272, -0.4356]]), TensorCategory(0))\n    \n    \n    Setting up after_item: Pipeline: ToTensor\n    Setting up before_batch: Pipeline: \n    Setting up after_batch: Pipeline: Normalize\n    \n    Building one batch\n    Applying item_tfms to the first sample:\n      Pipeline: ToTensor\n        starting from\n          (TensorTS of size 24x51, TensorCategory(0))\n        applying ToTensor gives\n          (TensorTS of size 24x51, TensorCategory(0))\n    \n    Adding the next 3 samples\n    \n    No before_batch transform to apply\n    \n    Collating items in a batch\n    \n    Applying batch_tfms to the batch built\n      Pipeline: Normalize\n        starting from\n          (TensorTS of size 4x24x51, TensorCategory([0, 3, 1, 3]))\n        applying Normalize gives\n          (TensorTS of size 4x24x51, TensorCategory([0, 3, 1, 3]))\n\n\n```\n# num_workers=0 is Microsoft Windows\ndls2 = tsdb.dataloaders(fnames, num_workers=0, device=default_device())\n```\n\n```\ndls2.show_batch(max_n=9, chs=range(0,12,3))\n```\n\n\n![svg](docs/images/output_46_0.svg)\n\n\n### 3rd method : using `DataBlock` and passing `items` object to the `DataBlock.dataloaders()`\n\n```\n# getters = [ItemGetter(0), ItemGetter(1)] \ntsdb = DataBlock(blocks=(TSBlock, CategoryBlock),\n                   get_x = ItemGetter(0),\n                   get_y = Pipeline([ItemGetter(1), lbl_dict.get]),\n                   splitter=RandomSplitter(seed=seed))\n```\n\n```\ndls3 = tsdb.dataloaders(data.get_items(), batch_tfms=batch_tfms, num_workers=0, device=default_device())\n```\n\n```\ndls3.show_batch(max_n=9, chs=range(0,12,3))\n```\n\n\n![svg](docs/images/output_50_0.svg)\n\n\n### 4th method : using `TSDataLoaders` class and `TSDataLoaders.from_files()`\n\n```\ndls4 = TSDataLoaders.from_files(fnames=fnames, path=path, batch_tfms=batch_tfms, lbl_dict=lbl_dict, num_workers=0, device=default_device())\n```\n\n```\ndls4.show_batch(max_n=9, chs=range(0,12,3))\n```\n\n\n![svg](docs/images/output_53_0.svg)\n\n\n## Training a Model\n\n```\n# Number of channels (i.e. dimensions in ARFF and TS files jargon)\nc_in = get_n_channels(dls2.train) # data.n_channels\n# Number of classes\nc_out= dls2.c \nc_in,c_out\n```\n\n\n\n\n    (24, 6)\n\n\n\n### Creating a model\n\n```\nmodel = inception_time(c_in, c_out).to(device=default_device())\nmodel\n```\n\n\n\n\n    Sequential(\n      (0): SequentialEx(\n        (layers): ModuleList(\n          (0): InceptionModule(\n            (convs): ModuleList(\n              (0): Conv1d(24, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n              (1): Conv1d(24, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n              (2): Conv1d(24, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n            )\n            (maxpool_bottleneck): Sequential(\n              (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n              (1): Conv1d(24, 32, kernel_size=(1,), stride=(1,), bias=False)\n            )\n            (bn_relu): Sequential(\n              (0): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n              (1): ReLU()\n            )\n          )\n        )\n      )\n      (1): SequentialEx(\n        (layers): ModuleList(\n          (0): InceptionModule(\n            (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,))\n            (convs): ModuleList(\n              (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n              (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n              (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n            )\n            (maxpool_bottleneck): Sequential(\n              (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n              (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n            )\n            (bn_relu): Sequential(\n              (0): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n              (1): ReLU()\n            )\n          )\n        )\n      )\n      (2): SequentialEx(\n        (layers): ModuleList(\n          (0): InceptionModule(\n            (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,))\n            (convs): ModuleList(\n              (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n              (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n              (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n            )\n            (maxpool_bottleneck): Sequential(\n              (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n              (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n            )\n            (bn_relu): Sequential(\n              (0): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n              (1): ReLU()\n            )\n          )\n          (1): Shortcut(\n            (act_fn): ReLU(inplace=True)\n            (conv): Conv1d(128, 128, kernel_size=(1,), stride=(1,), bias=False)\n            (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n          )\n        )\n      )\n      (3): SequentialEx(\n        (layers): ModuleList(\n          (0): InceptionModule(\n            (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,))\n            (convs): ModuleList(\n              (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n              (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n              (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n            )\n            (maxpool_bottleneck): Sequential(\n              (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n              (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n            )\n            (bn_relu): Sequential(\n              (0): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n              (1): ReLU()\n            )\n          )\n        )\n      )\n      (4): SequentialEx(\n        (layers): ModuleList(\n          (0): InceptionModule(\n            (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,))\n            (convs): ModuleList(\n              (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n              (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n              (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n            )\n            (maxpool_bottleneck): Sequential(\n              (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n              (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n            )\n            (bn_relu): Sequential(\n              (0): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n              (1): ReLU()\n            )\n          )\n        )\n      )\n      (5): SequentialEx(\n        (layers): ModuleList(\n          (0): InceptionModule(\n            (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,))\n            (convs): ModuleList(\n              (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n              (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n              (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n            )\n            (maxpool_bottleneck): Sequential(\n              (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n              (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n            )\n            (bn_relu): Sequential(\n              (0): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n              (1): ReLU()\n            )\n          )\n          (1): Shortcut(\n            (act_fn): ReLU(inplace=True)\n            (conv): Conv1d(128, 128, kernel_size=(1,), stride=(1,), bias=False)\n            (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n          )\n        )\n      )\n      (6): AdaptiveConcatPool1d(\n        (ap): AdaptiveAvgPool1d(output_size=1)\n        (mp): AdaptiveMaxPool1d(output_size=1)\n      )\n      (7): Flatten(full=False)\n      (8): Linear(in_features=256, out_features=6, bias=True)\n    )\n\n\n\n### Creating a Learner object\n\n```\n# opt_func = partial(Adam, lr=3e-3, wd=0.01)\n#Or use Ranger\ndef opt_func(p, lr=slice(3e-3)): return Lookahead(RAdam(p, lr=lr, mom=0.95, wd=0.01)) \n```\n\n```\n#Learner    \nloss_func = LabelSmoothingCrossEntropy() \nlearn = Learner(dls2, model, opt_func=opt_func, loss_func=loss_func, metrics=accuracy)\n\nprint(learn.summary())\n```\n\n    Sequential (Input shape: ['64 x 24 x 51'])\n    ================================================================\n    Layer (type)         Output Shape         Param #    Trainable \n    ================================================================\n    Conv1d               64 x 32 x 51         29,952     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         14,592     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         6,912      True      \n    ________________________________________________________________\n    MaxPool1d            64 x 24 x 51         0          False     \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         768        True      \n    ________________________________________________________________\n    BatchNorm1d          64 x 128 x 51        256        True      \n    ________________________________________________________________\n    ReLU                 64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         4,128      True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         39,936     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         19,456     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         9,216      True      \n    ________________________________________________________________\n    MaxPool1d            64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         4,096      True      \n    ________________________________________________________________\n    BatchNorm1d          64 x 128 x 51        256        True      \n    ________________________________________________________________\n    ReLU                 64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         4,128      True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         39,936     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         19,456     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         9,216      True      \n    ________________________________________________________________\n    MaxPool1d            64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         4,096      True      \n    ________________________________________________________________\n    BatchNorm1d          64 x 128 x 51        256        True      \n    ________________________________________________________________\n    ReLU                 64 x 128 x 51        0          False     \n    ________________________________________________________________\n    ReLU                 64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 128 x 51        16,384     True      \n    ________________________________________________________________\n    BatchNorm1d          64 x 128 x 51        256        True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         4,128      True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         39,936     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         19,456     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         9,216      True      \n    ________________________________________________________________\n    MaxPool1d            64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         4,096      True      \n    ________________________________________________________________\n    BatchNorm1d          64 x 128 x 51        256        True      \n    ________________________________________________________________\n    ReLU                 64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         4,128      True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         39,936     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         19,456     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         9,216      True      \n    ________________________________________________________________\n    MaxPool1d            64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         4,096      True      \n    ________________________________________________________________\n    BatchNorm1d          64 x 128 x 51        256        True      \n    ________________________________________________________________\n    ReLU                 64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         4,128      True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         39,936     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         19,456     True      \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         9,216      True      \n    ________________________________________________________________\n    MaxPool1d            64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 32 x 51         4,096      True      \n    ________________________________________________________________\n    BatchNorm1d          64 x 128 x 51        256        True      \n    ________________________________________________________________\n    ReLU                 64 x 128 x 51        0          False     \n    ________________________________________________________________\n    ReLU                 64 x 128 x 51        0          False     \n    ________________________________________________________________\n    Conv1d               64 x 128 x 51        16,384     True      \n    ________________________________________________________________\n    BatchNorm1d          64 x 128 x 51        256        True      \n    ________________________________________________________________\n    AdaptiveAvgPool1d    64 x 128 x 1         0          False     \n    ________________________________________________________________\n    AdaptiveMaxPool1d    64 x 128 x 1         0          False     \n    ________________________________________________________________\n    Flatten              64 x 256             0          False     \n    ________________________________________________________________\n    Linear               64 x 6               1,542      True      \n    ________________________________________________________________\n    \n    Total params: 472,742\n    Total trainable params: 472,742\n    Total non-trainable params: 0\n    \n    Optimizer used: \u003cfunction opt_func at 0x7fb11c99f400\u003e\n    Loss function: LabelSmoothingCrossEntropy()\n    \n    Callbacks:\n      - TrainEvalCallback\n      - Recorder\n      - ProgressCallback\n\n\n### LR find \n\n```\nlr_min, lr_steep = learn.lr_find()\nlr_min, lr_steep\n```\n\n\n\n\u003cdiv\u003e\n    \u003cstyle\u003e\n        /* Turns off some styling */\n        progress {\n            /* gets rid of default border in Firefox and Opera. */\n            border: none;\n            /* Needs to be in here for Safari polyfill so background images work as expected. */\n            background-size: auto;\n        }\n        .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n            background: #F44336;\n        }\n    \u003c/style\u003e\n  \u003cprogress value='0' class='' max='26', style='width:300px; height:20px; vertical-align: middle;'\u003e\u003c/progress\u003e\n\n\u003c/div\u003e\n\n\n\n\n\n\n\n    (0.00831763744354248, 0.0006918309954926372)\n\n\n\n\n![svg](docs/images/output_62_2.svg)\n\n\n### Train\n\n```\nlearn.fit_one_cycle(25, lr_max=1e-3)\n```\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: left;\"\u003e\n      \u003cth\u003eepoch\u003c/th\u003e\n      \u003cth\u003etrain_loss\u003c/th\u003e\n      \u003cth\u003evalid_loss\u003c/th\u003e\n      \u003cth\u003eaccuracy\u003c/th\u003e\n      \u003cth\u003etime\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e3.001498\u003c/td\u003e\n      \u003ctd\u003e1.795478\u003c/td\u003e\n      \u003ctd\u003e0.222222\u003c/td\u003e\n      \u003ctd\u003e00:01\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e2.909164\u003c/td\u003e\n      \u003ctd\u003e1.799713\u003c/td\u003e\n      \u003ctd\u003e0.222222\u003c/td\u003e\n      \u003ctd\u003e00:01\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e2\u003c/td\u003e\n      \u003ctd\u003e2.758937\u003c/td\u003e\n      \u003ctd\u003e1.805732\u003c/td\u003e\n      \u003ctd\u003e0.222222\u003c/td\u003e\n      \u003ctd\u003e00:01\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e3\u003c/td\u003e\n      \u003ctd\u003e2.552927\u003c/td\u003e\n      \u003ctd\u003e1.810526\u003c/td\u003e\n      \u003ctd\u003e0.222222\u003c/td\u003e\n      \u003ctd\u003e00:01\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e4\u003c/td\u003e\n      \u003ctd\u003e2.272452\u003c/td\u003e\n      \u003ctd\u003e1.817920\u003c/td\u003e\n      \u003ctd\u003e0.180556\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e5\u003c/td\u003e\n      \u003ctd\u003e1.995428\u003c/td\u003e\n      \u003ctd\u003e1.829209\u003c/td\u003e\n      \u003ctd\u003e0.111111\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e6\u003c/td\u003e\n      \u003ctd\u003e1.776214\u003c/td\u003e\n      \u003ctd\u003e1.749636\u003c/td\u003e\n      \u003ctd\u003e0.222222\u003c/td\u003e\n      \u003ctd\u003e00:01\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e7\u003c/td\u003e\n      \u003ctd\u003e1.597963\u003c/td\u003e\n      \u003ctd\u003e1.653429\u003c/td\u003e\n      \u003ctd\u003e0.347222\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e8\u003c/td\u003e\n      \u003ctd\u003e1.453098\u003c/td\u003e\n      \u003ctd\u003e1.463801\u003c/td\u003e\n      \u003ctd\u003e0.444444\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e9\u003c/td\u003e\n      \u003ctd\u003e1.337819\u003c/td\u003e\n      \u003ctd\u003e1.185544\u003c/td\u003e\n      \u003ctd\u003e0.666667\u003c/td\u003e\n      \u003ctd\u003e00:01\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e10\u003c/td\u003e\n      \u003ctd\u003e1.241440\u003c/td\u003e\n      \u003ctd\u003e0.982497\u003c/td\u003e\n      \u003ctd\u003e0.777778\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e11\u003c/td\u003e\n      \u003ctd\u003e1.160481\u003c/td\u003e\n      \u003ctd\u003e0.845832\u003c/td\u003e\n      \u003ctd\u003e0.819444\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e12\u003c/td\u003e\n      \u003ctd\u003e1.089517\u003c/td\u003e\n      \u003ctd\u003e0.751684\u003c/td\u003e\n      \u003ctd\u003e0.833333\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e13\u003c/td\u003e\n      \u003ctd\u003e1.026505\u003c/td\u003e\n      \u003ctd\u003e0.733695\u003c/td\u003e\n      \u003ctd\u003e0.833333\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e14\u003c/td\u003e\n      \u003ctd\u003e0.973174\u003c/td\u003e\n      \u003ctd\u003e0.693617\u003c/td\u003e\n      \u003ctd\u003e0.861111\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e15\u003c/td\u003e\n      \u003ctd\u003e0.926334\u003c/td\u003e\n      \u003ctd\u003e0.686428\u003c/td\u003e\n      \u003ctd\u003e0.805556\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e16\u003c/td\u003e\n      \u003ctd\u003e0.884449\u003c/td\u003e\n      \u003ctd\u003e0.684725\u003c/td\u003e\n      \u003ctd\u003e0.875000\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e17\u003c/td\u003e\n      \u003ctd\u003e0.848235\u003c/td\u003e\n      \u003ctd\u003e0.659447\u003c/td\u003e\n      \u003ctd\u003e0.833333\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e18\u003c/td\u003e\n      \u003ctd\u003e0.814864\u003c/td\u003e\n      \u003ctd\u003e0.654701\u003c/td\u003e\n      \u003ctd\u003e0.847222\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e19\u003c/td\u003e\n      \u003ctd\u003e0.784517\u003c/td\u003e\n      \u003ctd\u003e0.654098\u003c/td\u003e\n      \u003ctd\u003e0.875000\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e20\u003c/td\u003e\n      \u003ctd\u003e0.757529\u003c/td\u003e\n      \u003ctd\u003e0.648219\u003c/td\u003e\n      \u003ctd\u003e0.875000\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e21\u003c/td\u003e\n      \u003ctd\u003e0.732877\u003c/td\u003e\n      \u003ctd\u003e0.649778\u003c/td\u003e\n      \u003ctd\u003e0.861111\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e22\u003c/td\u003e\n      \u003ctd\u003e0.710833\u003c/td\u003e\n      \u003ctd\u003e0.644054\u003c/td\u003e\n      \u003ctd\u003e0.875000\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e23\u003c/td\u003e\n      \u003ctd\u003e0.691595\u003c/td\u003e\n      \u003ctd\u003e0.641094\u003c/td\u003e\n      \u003ctd\u003e0.875000\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e24\u003c/td\u003e\n      \u003ctd\u003e0.674118\u003c/td\u003e\n      \u003ctd\u003e0.639970\u003c/td\u003e\n      \u003ctd\u003e0.861111\u003c/td\u003e\n      \u003ctd\u003e00:02\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n### Ploting the loss function\n\n```\nlearn.recorder.plot_loss()\n```\n\n\n![svg](docs/images/output_66_0.svg)\n\n\n### Showing the results\n\n```\nlearn.show_results(max_n=9, chs=range(0,12,3))\n```\n\n\n\n\u003cdiv\u003e\n    \u003cstyle\u003e\n        /* Turns off some styling */\n        progress {\n            /* gets rid of default border in Firefox and Opera. */\n            border: none;\n            /* Needs to be in here for Safari polyfill so background images work as expected. */\n            background-size: auto;\n        }\n        .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n            background: #F44336;\n        }\n    \u003c/style\u003e\n  \u003cprogress value='0' class='' max='1', style='width:300px; height:20px; vertical-align: middle;'\u003e\u003c/progress\u003e\n\n\u003c/div\u003e\n\n\n\n\n![svg](docs/images/output_68_1.svg)\n\n\n### Showing the confusion matrix\n\n```\ninterp = ClassificationInterpretation.from_learner(learn)\ninterp.plot_confusion_matrix(figsize=(10,8))\n```\n\n\n\n\u003cdiv\u003e\n    \u003cstyle\u003e\n        /* Turns off some styling */\n        progress {\n            /* gets rid of default border in Firefox and Opera. */\n            border: none;\n            /* Needs to be in here for Safari polyfill so background images work as expected. */\n            background-size: auto;\n        }\n        .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n            background: #F44336;\n        }\n    \u003c/style\u003e\n  \u003cprogress value='0' class='' max='2', style='width:300px; height:20px; vertical-align: middle;'\u003e\u003c/progress\u003e\n\n\u003c/div\u003e\n\n\n\n\n![svg](docs/images/output_70_1.svg)\n\n\n![](nbs/images/tree.jpg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fai-fast-track%2Ftimeseries","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fai-fast-track%2Ftimeseries","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fai-fast-track%2Ftimeseries/lists"}