def _init_noise(self):
        """
            initializes exploration noise and populates self.noise, a callable
            that returns noise of dimension same as action
        """
        if self.agent_mode in ['eval_deterministic', 'eval_deterministic_local']:
            return
        if self.noise_type == 'normal':
            self.noise = NormalActionNoise(
                np.zeros(self.action_dim),
                np.ones(self.action_dim) * self.sigma
            )
        elif self.noise_type == 'ou_noise':
            self.noise = OrnsteinUhlenbeckActionNoise(
                mu=np.zeros(self.action_dim),
                sigma=self.sigma,
                theta=self.learner_config.algo.exploration.theta,
                dt=self.learner_config.algo.exploration.dt
            )
        else:
            raise ConfigError('Noise type {} undefined.'.format(self.noise_type))
        if self.param_noise_type == 'normal':
            self.param_noise = NormalParameterNoise(self.param_noise_sigma)
        elif self.param_noise_type == 'adaptive_normal':
            model_copy = copy.deepcopy(self.model)
            module_dict_copy = ModuleDict(self.module_dict(model_copy))
            self.param_noise = AdaptiveNormalParameterNoise(
                model_copy,
                module_dict_copy,
                self.param_noise_target_stddev,
                alpha=self.param_noise_alpha,
                sigma=self.param_noise_sigma
            )

            initializes exploration noise and populates self.noise, a callable
            that returns noise of dimension same as action
        
surreal/agent/ddpg_agent.py