Source code for das.kapre.augmentation

# -*- coding: utf-8 -*-
from __future__ import absolute_import
import numpy as np
from tensorflow.keras import backend as K
from tensorflow.keras.layers import Layer


[docs]class AdditiveNoise(Layer): """Adds Gaussian noise to the spectrogram.""" def __init__(self, power: float = 0.1, random_gain: True = False, noise_type: str = "white", **kwargs): """Init. Args: power (float, optional): Standard deviation of the noise. Defaults to 0.1. random_gain (True, optional): If `True`, gain is sampled from `uniform(low=0.0, high=power)` in every batch. Defaults to False. noise_type (str, optional): Only supports white. Defaults to 'white'. """ assert noise_type in ["white"] self.supports_masking = True self.power = power self.random_gain = random_gain self.noise_type = noise_type self.uses_learning_phase = True super(AdditiveNoise, self).__init__(**kwargs)
[docs] def call(self, x): if self.random_gain: power = np.random.uniform(0.0, self.power) else: power = self.power noise_x = x + K.random_normal(shape=K.shape(x), mean=0.0, stddev=power) return K.in_train_phase(noise_x, x)
[docs] def get_config(self): config = {"power": self.power, "random_gain": self.random_gain, "noise_type": self.noise_type} base_config = super(AdditiveNoise, self).get_config() return dict(list(base_config.items()) + list(config.items()))