You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

noise.py 2.2 kB

4 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #! /usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import tensorlayer as tl
  4. from tensorlayer import logging
  5. from tensorlayer.layers.core import Module
  6. __all__ = [
  7. 'GaussianNoise',
  8. ]
  9. class GaussianNoise(Module):
  10. """
  11. The :class:`GaussianNoise` class is noise layer that adding noise with
  12. gaussian distribution to the activation.
  13. Parameters
  14. ------------
  15. mean : float
  16. The mean. Default is 0.0.
  17. stddev : float
  18. The standard deviation. Default is 1.0.
  19. is_always : boolean
  20. Is True, add noise for train and eval mode. If False, skip this layer in eval mode.
  21. seed : int or None
  22. The seed for random noise.
  23. name : str
  24. A unique layer name.
  25. Examples
  26. --------
  27. With TensorLayer
  28. >>> net = tl.layers.Input([64, 200], name='input')
  29. >>> net = tl.layers.Dense(in_channels=200, n_units=100, act=tl.ReLU, name='dense')(net)
  30. >>> gaussianlayer = tl.layers.GaussianNoise(name='gaussian')(net)
  31. >>> print(gaussianlayer)
  32. >>> output shape : (64, 100)
  33. """
  34. def __init__(
  35. self,
  36. mean=0.0,
  37. stddev=1.0,
  38. is_always=True,
  39. seed=None,
  40. name=None, # 'gaussian_noise',
  41. ):
  42. super().__init__(name)
  43. self.mean = mean
  44. self.stddev = stddev
  45. self.seed = seed
  46. self.is_always = is_always
  47. self.build()
  48. self._built = True
  49. logging.info("GaussianNoise %s: mean: %f stddev: %f" % (self.name, self.mean, self.stddev))
  50. def __repr__(self):
  51. s = '{classname}(mean={mean}, stddev={stddev}'
  52. if self.name is not None:
  53. s += ', name=\'{name}\''
  54. s += ')'
  55. return s.format(classname=self.__class__.__name__, **self.__dict__)
  56. def build(self, inputs=None):
  57. pass
  58. def forward(self, inputs):
  59. if (self.is_train or self.is_always) is False:
  60. return inputs
  61. else:
  62. shapes = tl.get_tensor_shape(inputs)
  63. noise = tl.ops.random_normal(shape=shapes, mean=self.mean, stddev=self.stddev, seed=self.seed)
  64. print(noise)
  65. outputs = inputs + noise
  66. return outputs

TensorLayer3.0 是一款兼容多种深度学习框架为计算后端的深度学习库。计划兼容TensorFlow, Pytorch, MindSpore, Paddle.