Streaming Anomaly Detection Framework in Python (Outlier Detection for Streaming Data)

Overview

docs/logo.png

Python Streaming Anomaly Detection (PySAD)

PyPI GitHub release (latest by date) Documentation status Gitter Azure Pipelines Build Status Travis CI Build Status Appveyor Build status Circle CI Coverage Status PyPI - Python Version Supported Platforms License

PySAD is an open-source python framework for anomaly detection on streaming multivariate data.

Documentation

Features

Online Anomaly Detection

PySAD provides methods for online/sequential anomaly detection, i.e. anomaly detection on streaming data, where model updates itself as a new instance arrives.

Resource-Efficient

Streaming methods efficiently handle the limitied memory and processing time requirements of the data streams so that they can be used in near real-time. The methods can only store an instance or a small window of recent instances.

Streaming Anomaly Detection Tools

PySAD contains stream simulators, evaluators, preprocessors, statistic trackers, postprocessors, probability calibrators and more. In addition to streaming models, PySAD also provides integrations for batch anomaly detectors of the PyOD so that they can be used in the streaming setting.

Comprehensiveness

PySAD serves models that are specifically designed for both univariate and multivariate data. Furthermore, one can experiment via PySAD in supervised, semi-supervised and unsupervised setting.

User Friendly

Users with any experience level can easily use PySAD. One can easily design experiments and combine the tools in the framework. Moreover, the existing methods in PySAD are easy to extend.

Free and Open Source Software (FOSS)

PySAD is distributed under BSD License 2.0 and favors FOSS principles.

Installation

The PySAD framework can be installed via:

pip install -U pysad

Alternatively, you can install the library directly using the source code in Github repository by:

git clone https://github.com/selimfirat/pysad.git
cd pysad
pip install .

Required Dependencies:

  • numpy>=1.18.5
  • scipy>=1.4.1
  • scikit-learn>=0.23.2
  • pyod>=0.7.7.1

Optional Dependencies:

  • rrcf==0.4.3 (Only required for pysad.models.robust_random_cut_forest.RobustRandomCutForest)
  • PyNomaly==0.3.3 (Only required for pysad.models.loop.StreamLocalOutlierProbability)
  • mmh3==2.5.1 (Only required for pysad.models.xstream.xStream)
  • pandas==1.1.0 (Only required for pysad.utils.pandas_streamer.PandasStreamer)

Quick Links

Versioning

Semantic versioning is used for this project.

License

This project is licensed under the BSD License 2.0.

Citing PySAD

If you use PySAD for a scientific publication, we would appreciate citations to the following paper:

@article{pysad,
  title={PySAD: A Streaming Anomaly Detection Framework in Python},
  author={Yilmaz, Selim F and Kozat, Suleyman S},
  journal={arXiv preprint arXiv:2009.02572},
  year={2020}
}
Comments
  • Your docs favicon makes me think a Colab notebook stopped with an error

    Your docs favicon makes me think a Colab notebook stopped with an error

    When I'm reading your documentation, the favicon you have looks almost identical to the Colab favicon when it stopped execution because of an error. I can't possibly be the only person that has been fooled by this.

    opened by FuriouStyles 0
  • There is a problem in the method fit_partial in reference_window_model.py

    There is a problem in the method fit_partial in reference_window_model.py

    In case initial_window_X is not provided, the training of the model will stop when the size cur_window_X is equal to window_size - 1 and restart when the size cur_window_X can be divided by sliding_size. This problem occurs mainly when window_size and sliding_size have different parity.

    opened by eljabrichaymae 0
  • How can I access the training data that has been used?

    How can I access the training data that has been used?

    Hello everyone,

    When a model has been trained, such as LocalOutlierProbability. How can I access the training data that has been used?

    I have managed to access the first dataset that is used when initialising the model: LocalOutlierProbability.model.data, but I need the new batch train data which is generated after call fit_partial(X).

    Thanks in advance!

    opened by joaquinCaceres 0
  • Only xStream could detect anomalous cases in the example

    Only xStream could detect anomalous cases in the example

    Hi, I tried different models based on example_usage.py but only xStream could detect anomalous cases, the other model either fail to run or does not predict any anomalous cases. Here is the code:

    # Import modules.
    from sklearn.utils import shuffle
    from pysad.evaluation import AUROCMetric
    from pysad.models import xStream
    from pysad.models import xStream, ExactStorm, HalfSpaceTrees, IForestASD, KitNet, KNNCAD, LODA, LocalOutlierProbability, MedianAbsoluteDeviation, RelativeEntropy, RobustRandomCutForest, RSHash
    from pysad.utils import ArrayStreamer
    from pysad.transform.postprocessing import RunningAveragePostprocessor
    from pysad.transform.preprocessing import InstanceUnitNormScaler
    from pysad.transform.probability_calibration import ConformalProbabilityCalibrator, GaussianTailProbabilityCalibrator
    from pysad.utils import Data
    from tqdm import tqdm
    import numpy as np
    from pdb import set_trace
    
    # This example demonstrates the usage of the most modules in PySAD framework.
    if __name__ == "__main__":
        np.random.seed(61)  # Fix random seed.
    
        # Get data to stream.
        data = Data("data")
        X_all, y_all = data.get_data("arrhythmia.mat")
        X_all, y_all = shuffle(X_all, y_all)
    
        iterator = ArrayStreamer(shuffle=False)  # Init streamer to simulate streaming data.
        # set_trace()
        model = xStream()  # Init xStream anomaly detection model.
        # model = ExactStorm(window_size=25)
        # model = HalfSpaceTrees(feature_mins=np.zeros(X_all.shape[1]), feature_maxes=np.ones(X_all.shape[1]))
        # model = IForestASD()
        # model = KitNet(grace_feature_mapping =100, max_size_ae=100)
        # model = KNNCAD(probationary_period=10)
        # model = LODA()
        # model = LocalOutlierProbability()
        # model = MedianAbsoluteDeviation()
        # model = RelativeEntropy(min_val=0, max_val=1)
        # model = RobustRandomCutForest(num_trees=200)
        # model = RSHash(feature_mins=0, feature_maxes=1)
        
        preprocessor = InstanceUnitNormScaler()  # Init normalizer.
        postprocessor = RunningAveragePostprocessor(window_size=5)  # Init running average postprocessor.
        auroc = AUROCMetric()  # Init area under receiver-operating- characteristics curve metric.
    
        calibrator = GaussianTailProbabilityCalibrator(window_size=100)  # Init probability calibrator.
        idx = 0
        for X, y in tqdm(iterator.iter(X_all[100:], y_all[100:])):  # Stream data.
            X = preprocessor.fit_transform_partial(X)  # Fit preprocessor to and transform the instance.
    
            score = model.fit_score_partial(X)  # Fit model to and score the instance.        
            score = postprocessor.fit_transform_partial(score)  # Apply running averaging to the score.
            
            # print(score)
            auroc.update(y, score)  # Update AUROC metric.
            try:
                # set_trace()
                calibrated_score = calibrator.fit_transform(score)  # Fit & calibrate score.
            except:           
                calibrated_score = 0
                # set_trace()
            # set_trace()
            # Output if the instance is anomalous.
            if calibrated_score > 0.95:  # If probability of being normal is less than 5%.
                print(f"Alert: {idx}th data point is anomalous.")
                
            idx += 1
    
        # Output resulting AUROCS metric.
        # print("AUROC: ", auroc.get())
    
    

    Does anyone know how to fix this problem ? Thank you very much.

    opened by dangmanhtruong1995 0
  • KitNet + RunningAveragePostprocessor producing nan scores

    KitNet + RunningAveragePostprocessor producing nan scores

    It seems that maybe when i use KitNet + a RunningAveragePostprocessor i am getting nan scores from the RunningAveragePostprocessor.

    If I do this:

    # Import modules.
    from sklearn.utils import shuffle
    from pysad.evaluation import AUROCMetric
    from pysad.models import xStream, RobustRandomCutForest, KNNCAD, ExactStorm, HalfSpaceTrees, IForestASD, KitNet
    from pysad.utils import ArrayStreamer
    from pysad.transform.postprocessing import RunningAveragePostprocessor
    from pysad.transform.preprocessing import InstanceUnitNormScaler
    from pysad.utils import Data
    from tqdm import tqdm
    import numpy as np
    
    # This example demonstrates the usage of the most modules in PySAD framework.
    if __name__ == "__main__":
        np.random.seed(61)  # Fix random seed.
    
        n_initial = 100
    
        # Get data to stream.
        data = Data("data")
        X_all, y_all = data.get_data("arrhythmia.mat")
        #X_all, y_all = shuffle(X_all, y_all)
        X_initial, y_initial = X_all[:n_initial], y_all[:n_initial]
        X_stream, y_stream = X_all[n_initial:], y_all[n_initial:]
    
        iterator = ArrayStreamer(shuffle=False)  # Init streamer to simulate streaming data.
    
        model = KitNet(max_size_ae=10, grace_feature_mapping=100, grace_anomaly_detector=100, learning_rate=0.1, hidden_ratio=0.75)
        preprocessor = InstanceUnitNormScaler()  # Init normalizer.
        postprocessor = RunningAveragePostprocessor(window_size=5)  # Init running average postprocessor.
        auroc = AUROCMetric()  # Init area under receiver-operating- characteristics curve metric.
    
        for X, y in tqdm(iterator.iter(X_stream, y_stream)):  # Stream data.
            X = preprocessor.fit_transform_partial(X)  # Fit preprocessor to and transform the instance.
    
            score = model.fit_score_partial(X)  # Fit model to and score the instance.
            print(score)
            #score = postprocessor.fit_transform_partial(score)  # Apply running averaging to the score.
            #print(score)
    
            auroc.update(y, score)  # Update AUROC metric.
    
        # Output resulting AUROCS metric.
        print("\nAUROC: ", auroc.get())
    

    I see output that looks generally ok but it seem like a nan got in that kinda breaks things when it comes to the AUC

    /usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:143: FutureWarning: The sklearn.utils.testing module is  deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.utils. Anything that cannot be imported from sklearn.utils is now part of the private API.
      warnings.warn(message, FutureWarning)
    0it [00:00, ?it/s]/usr/local/lib/python3.6/dist-packages/pysad/models/kitnet_model/dA.py:119: RuntimeWarning: invalid value encountered in true_divide
      x = (x - self.norm_min) / (self.norm_max - self.norm_min + 0.0000000000000001)
    101it [00:00, 948.75it/s]Feature-Mapper: train-mode, Anomaly-Detector: off-mode
    0.0
    ...
    0.0
    The Feature-Mapper found a mapping: 274 features to 136 autoencoders.
    Feature-Mapper: execute-mode, Anomaly-Detector: train-mode
    nan
    176861904806278.84
    1.2789157528725288
    0.04468589042395759
    0.1220238749287982
    0.059888825651861544
    0.09122945608076023
    ...
    0.1389761646050123
    /usr/local/lib/python3.6/dist-packages/pysad/models/kitnet_model/utils.py:14: RuntimeWarning: overflow encountered in exp
      return 1. / (1 + numpy.exp(-x))
    220it [00:03, 54.62it/s]0.12782183995180338
    49677121607436.65
    136071359600522.08
    0.10972949863882411
    ...
    0.1299215446450402
    0.1567376498625513
    0.1494816850581486
    352it [00:05, 69.36it/s]
    0.1402801274133297
    0.18201141940107077
    52873910494109.26
    0.13997148683334693
    0.13615269873450922
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-3-8af057e15ede> in <module>()
         47 
         48     # Output resulting AUROCS metric.
    ---> 49     print("\nAUROC: ", auroc.get())
    
    6 frames
    /usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py in _assert_all_finite(X, allow_nan, msg_dtype)
         97                     msg_err.format
         98                     (type_err,
    ---> 99                      msg_dtype if msg_dtype is not None else X.dtype)
        100             )
        101     # for object dtype data, we only check for NaNs (GH-13254)
    
    ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
    

    I think the issue is the nan after the line The Feature-Mapper found a mapping: 274 features to 136 autoencoders. Feature-Mapper: execute-mode, Anomaly-Detector: train-mode

    This might be ok but if i then use it with a RunningAveragePostprocessor the nan seems to break the running average so its all just nans:

    # Import modules.
    from sklearn.utils import shuffle
    from pysad.evaluation import AUROCMetric
    from pysad.models import xStream, RobustRandomCutForest, KNNCAD, ExactStorm, HalfSpaceTrees, IForestASD, KitNet
    from pysad.utils import ArrayStreamer
    from pysad.transform.postprocessing import RunningAveragePostprocessor
    from pysad.transform.preprocessing import InstanceUnitNormScaler
    from pysad.utils import Data
    from tqdm import tqdm
    import numpy as np
    
    # This example demonstrates the usage of the most modules in PySAD framework.
    if __name__ == "__main__":
        np.random.seed(61)  # Fix random seed.
    
        n_initial = 100
    
        # Get data to stream.
        data = Data("data")
        X_all, y_all = data.get_data("arrhythmia.mat")
        #X_all, y_all = shuffle(X_all, y_all)
        X_initial, y_initial = X_all[:n_initial], y_all[:n_initial]
        X_stream, y_stream = X_all[n_initial:], y_all[n_initial:]
    
        iterator = ArrayStreamer(shuffle=False)  # Init streamer to simulate streaming data.
    
        model = KitNet(max_size_ae=10, grace_feature_mapping=100, grace_anomaly_detector=100, learning_rate=0.1, hidden_ratio=0.75)
        preprocessor = InstanceUnitNormScaler()  # Init normalizer.
        postprocessor = RunningAveragePostprocessor(window_size=5)  # Init running average postprocessor.
        auroc = AUROCMetric()  # Init area under receiver-operating- characteristics curve metric.
    
        for X, y in tqdm(iterator.iter(X_stream, y_stream)):  # Stream data.
            X = preprocessor.fit_transform_partial(X)  # Fit preprocessor to and transform the instance.
    
            score = model.fit_score_partial(X)  # Fit model to and score the instance.
            #print(score)
            score = postprocessor.fit_transform_partial(score)  # Apply running averaging to the score.
            print(score)
    
            auroc.update(y, score)  # Update AUROC metric.
    
        # Output resulting AUROCS metric.
        print("\nAUROC: ", auroc.get())
    

    So output with the nan sort of being propagated is:

    /usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:143: FutureWarning: The sklearn.utils.testing module is  deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.utils. Anything that cannot be imported from sklearn.utils is now part of the private API.
      warnings.warn(message, FutureWarning)
    0it [00:00, ?it/s]/usr/local/lib/python3.6/dist-packages/pysad/models/kitnet_model/dA.py:119: RuntimeWarning: invalid value encountered in true_divide
      x = (x - self.norm_min) / (self.norm_max - self.norm_min + 0.0000000000000001)
    101it [00:00, 881.82it/s]Feature-Mapper: train-mode, Anomaly-Detector: off-mode
    0.0
    0.0
    0.0
    ...
    0.0
    The Feature-Mapper found a mapping: 274 features to 136 autoencoders.
    Feature-Mapper: execute-mode, Anomaly-Detector: train-mode
    nan
    nan
    nan
    nan
    185it [00:02, 46.04it/s]nan
    nan
    nan
    193it [00:02, 42.56it/s]nan
    nan
    nan
    200it [00:02, 41.06it/s]nan
    nan
    nan
    nan
    Feature-Mapper: execute-mode, Anomaly-Detector: exeute-mode
    nan
    nan
    206it [00:02, 45.11it/s]/usr/local/lib/python3.6/dist-packages/pysad/models/kitnet_model/utils.py:14: RuntimeWarning: overflow encountered in exp
      return 1. / (1 + numpy.exp(-x))
    213it [00:02, 49.93it/s]nan
    nan
    nan
    nan
    nan
    nan
    ...
    
    opened by andrewm4894 2
  • KNNCAD with low probationary_period fails

    KNNCAD with low probationary_period fails

    I think I found an issue if you set the probationary_period for KNNCAD to be too low.

    This was tripping me up a little so thought worth raising in here. I'm not quite sure what the solution would be - maybe some sort of reasonable default for probationary_period in KNNCAD could help others at least avoid this in future.

    Or maybe its just fine and people should not set such a low probationary_period but it was one of the first things i did so maybe others might too :)

    Reproducible example:

    # Import modules.
    from sklearn.utils import shuffle
    from pysad.evaluation import AUROCMetric
    from pysad.models import xStream, RobustRandomCutForest, KNNCAD
    from pysad.utils import ArrayStreamer
    from pysad.transform.postprocessing import RunningAveragePostprocessor
    from pysad.transform.preprocessing import InstanceUnitNormScaler
    from pysad.utils import Data
    from tqdm import tqdm
    import numpy as np
    
    # This example demonstrates the usage of the most modules in PySAD framework.
    if __name__ == "__main__":
        np.random.seed(61)  # Fix random seed.
    
        # Get data to stream.
        data = Data("data")
        X_all, y_all = data.get_data("arrhythmia.mat")
        X_all, y_all = shuffle(X_all, y_all)
    
        iterator = ArrayStreamer(shuffle=False)  # Init streamer to simulate streaming data.
    
        model = KNNCAD(probationary_period=10)
        #model = RobustRandomCutForest()
        #model = xStream()  # Init xStream anomaly detection model.
        preprocessor = InstanceUnitNormScaler()  # Init normalizer.
        postprocessor = RunningAveragePostprocessor(window_size=5)  # Init running average postprocessor.
        auroc = AUROCMetric()  # Init area under receiver-operating- characteristics curve metric.
    
        for X, y in tqdm(iterator.iter(X_all[100:], y_all[100:])):  # Stream data.
            X = preprocessor.fit_transform_partial(X)  # Fit preprocessor to and transform the instance.
    
            score = model.fit_score_partial(X)  # Fit model to and score the instance.
            score = postprocessor.fit_transform_partial(score)  # Apply running averaging to the score.
    
            auroc.update(y, score)  # Update AUROC metric.
    
        # Output resulting AUROCS metric.
        print("\nAUROC: ", auroc.get())
    

    Gives error:

    /usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:143: FutureWarning: The sklearn.utils.testing module is  deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.utils. Anything that cannot be imported from sklearn.utils is now part of the private API.
      warnings.warn(message, FutureWarning)
    0it [00:00, ?it/s]
    ---------------------------------------------------------------------------
    IndexError                                Traceback (most recent call last)
    <ipython-input-3-c8fd98afee64> in <module>()
         31         X = preprocessor.fit_transform_partial(X)  # Fit preprocessor to and transform the instance.
         32 
    ---> 33         score = model.fit_score_partial(X)  # Fit model to and score the instance.
         34         score = postprocessor.fit_transform_partial(score)  # Apply running averaging to the score.
         35 
    
    1 frames
    /usr/local/lib/python3.6/dist-packages/pysad/models/knn_cad.py in fit_partial(self, X, y)
         73                 self.training.append(self.calibration.pop(0))
         74 
    ---> 75             self.scores.pop(0)
         76             self.calibration.append(new_item)
         77             self.scores.append(new_score)
    
    IndexError: pop from empty list
    

    If i set the probationary_period to 25 i see a slightly different error:

    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-4-fb6b7ffc5fde> in <module>()
         31         X = preprocessor.fit_transform_partial(X)  # Fit preprocessor to and transform the instance.
         32 
    ---> 33         score = model.fit_score_partial(X)  # Fit model to and score the instance.
         34         score = postprocessor.fit_transform_partial(score)  # Apply running averaging to the score.
         35 
    
    4 frames
    <__array_function__ internals> in partition(*args, **kwargs)
    
    /usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in partition(a, kth, axis, kind, order)
        744     else:
        745         a = asanyarray(a).copy(order="K")
    --> 746     a.partition(kth, axis=axis, kind=kind, order=order)
        747     return a
        748 
    
    ValueError: kth(=28) out of bounds (6)
    

    Then if I set probationary_period=50 it works.

    So feels like is some sort of edge case I may be hitting when probationary_period is low.

    I'm happy to work on a PR if some sort of easy fix we can make or even just want to set a default that might avoid people doing what I did :)

    opened by andrewm4894 0
Releases(v0.1.1)
Owner
Selim Firat Yilmaz
M.S. in Bilkent University EEE
Selim Firat Yilmaz
Official PyTorch implemention of our paper "Learning to Rectify for Robust Learning with Noisy Labels".

WarPI The official PyTorch implemention of our paper "Learning to Rectify for Robust Learning with Noisy Labels". Run python main.py --corruption_type

Haoliang Sun 3 Sep 03, 2022
CCAFNet: Crossflow and Cross-scale Adaptive Fusion Network for Detecting Salient Objects in RGB-D Images

Code and result about CCAFNet(IEEE TMM) 'CCAFNet: Crossflow and Cross-scale Adaptive Fusion Network for Detecting Salient Objects in RGB-D Images' IEE

zyrant丶 14 Dec 29, 2021
DeepOBS: A Deep Learning Optimizer Benchmark Suite

DeepOBS - A Deep Learning Optimizer Benchmark Suite DeepOBS is a benchmarking suite that drastically simplifies, automates and improves the evaluation

Aaron Bahde 7 May 12, 2020
A simple but complete full-attention transformer with a set of promising experimental features from various papers

x-transformers A concise but fully-featured transformer, complete with a set of promising experimental features from various papers. Install $ pip ins

Phil Wang 2.3k Jan 03, 2023
Learning to Disambiguate Strongly Interacting Hands via Probabilistic Per-Pixel Part Segmentation [3DV 2021 Oral]

Learning to Disambiguate Strongly Interacting Hands via Probabilistic Per-Pixel Part Segmentation [3DV 2021 Oral] Learning to Disambiguate Strongly In

Zicong Fan 40 Dec 22, 2022
Code for GNMR in ICDE 2021

GNMR Code for GNMR in ICDE 2021 Please unzip data files in Datasets/MultiInt-ML10M first. Run labcode_preSamp.py (with graph sampling) for ECommerce-c

7 Oct 27, 2022
An implementation for the loss function proposed in Decoupled Contrastive Loss paper.

Decoupled-Contrastive-Learning This repository is an implementation for the loss function proposed in Decoupled Contrastive Loss paper. Requirements P

Ramin Nakhli 71 Dec 04, 2022
Moer Grounded Image Captioning by Distilling Image-Text Matching Model

Moer Grounded Image Captioning by Distilling Image-Text Matching Model Requirements Python 3.7 Pytorch 1.2 Prepare data Please use git clone --recurse

YE Zhou 60 Dec 16, 2022
A Human-in-the-Loop workflow for creating HD images from text

A Human-in-the-Loop? workflow for creating HD images from text DALL·E Flow is an interactive workflow for generating high-definition images from text

Jina AI 2.5k Jan 02, 2023
This repository contains the code used to quantitatively evaluate counterfactual examples in the associated paper.

On Quantitative Evaluations of Counterfactuals Install To install required packages with conda, run the following command: conda env create -f requi

Frederik Hvilshøj 1 Jan 16, 2022
A reimplementation of DCGAN in PyTorch

DCGAN in PyTorch A reimplementation of DCGAN in PyTorch. Although there is an abundant source of code and examples found online (as well as an officia

Diego Porres 6 Jan 08, 2022
A tf.keras implementation of Facebook AI's MadGrad optimization algorithm

MADGRAD Optimization Algorithm For Tensorflow This package implements the MadGrad Algorithm proposed in Adaptivity without Compromise: A Momentumized,

20 Aug 18, 2022
MIMO-UNet - Official Pytorch Implementation

MIMO-UNet - Official Pytorch Implementation This repository provides the official PyTorch implementation of the following paper: Rethinking Coarse-to-

Sungjin Cho 248 Jan 02, 2023
Log4j JNDI inj. vuln scanner

Log-4-JAM - Log 4 Just Another Mess Log4j JNDI inj. vuln scanner Requirements pip3 install requests_toolbelt Usage # make sure target list has http/ht

Ashish Kunwar 66 Nov 09, 2022
modelvshuman is a Python library to benchmark the gap between human and machine vision

modelvshuman is a Python library to benchmark the gap between human and machine vision. Using this library, both PyTorch and TensorFlow models can be evaluated on 17 out-of-distribution datasets with

Bethge Lab 244 Jan 03, 2023
An implementation of Deep Forest 2021.2.1.

Deep Forest (DF) 21 DF21 is an implementation of Deep Forest 2021.2.1. It is designed to have the following advantages: Powerful: Better accuracy than

LAMDA Group, Nanjing University 795 Jan 03, 2023
Numerical-computing-is-fun - Learning numerical computing with notebooks for all ages.

As much as this series is to educate aspiring computer programmers and data scientists of all ages and all backgrounds, it is also a reminder to mysel

EKA foundation 758 Dec 25, 2022
TGRNet: A Table Graph Reconstruction Network for Table Structure Recognition

TGRNet: A Table Graph Reconstruction Network for Table Structure Recognition Xue, Wenyuan, et al. "TGRNet: A Table Graph Reconstruction Network for Ta

Wenyuan 68 Jan 04, 2023
A forwarding MPI implementation that can use any other MPI implementation via an MPI ABI

MPItrampoline MPI wrapper library: MPI trampoline library: MPI integration tests: MPI is the de-facto standard for inter-node communication on HPC sys

Erik Schnetter 31 Dec 22, 2022
Easy to use Audio Tagging in PyTorch

Audio Classification, Tagging & Sound Event Detection in PyTorch Progress: Fine-tune on audio classification Fine-tune on audio tagging Fine-tune on s

sithu3 15 Dec 22, 2022