DFT-LRP

Based on the below paper, we included the previously published utility codes to enable generating frequency-aware explanations though virtual inspection layers. This is essentially applicable to time series data, enabling a detailled view on frequency components.

@article{Vielhaben2024,
    title = {Explainable {AI} for time series via Virtual Inspection Layers},
    journal = {Pattern Recognition},
    volume = {150},
    pages = {110309},
    year = {2024},
    issn = {0031-3203},
    doi = {10.1016/j.patcog.2024.110309},
    author = {Johanna Vielhaben and Sebastian Lapuschkin and Grégoire Montavon and Wojciech Samek},
}

Basic usage:

from zennit.attribution import Gradient
from signxai2.composites import EpsilonStdX

composite = EpsilonStdX(mu=0, stdfactor=0.3, signstdfactor=0.3)
with Gradient(model=model, composite=composite) as attributor:
     output, relevance = attributor(data, target)

signal_freq, relevance_freq, signal_timefreq, relevance_timefreq = calculate_dft_explanation(signal_time, relevance_time)

print('EpsilonStdX-DFT-Freq:', relevance_freq)
print('EpsilonStdX-DFT-TimeFreq:', relevance_timefreq)