Stats.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import os.path
  2. import itertools
  3. import Tools
  4. import random
  5. import numpy as np
  6. import scipy
  7. import scipy.stats
  8. NBTESTS = 10
  9. VECDIM = [12,14,20]
  10. def entropyTest(config,nb):
  11. inputs = []
  12. outputs = []
  13. vecDim = VECDIM[nb % len(VECDIM)]
  14. dims=np.array([NBTESTS,vecDim])
  15. for _ in range(0,NBTESTS):
  16. v = np.random.rand(vecDim)
  17. v = v / np.sum(v)
  18. e = scipy.stats.entropy(v)
  19. inputs += list(v)
  20. outputs.append(e)
  21. inputs = np.array(inputs)
  22. outputs = np.array(outputs)
  23. config.writeInput(nb, inputs,"Input")
  24. config.writeInputS16(nb, dims,"Dims")
  25. config.writeReference(nb, outputs,"RefEntropy")
  26. def logsumexpTest(config,nb):
  27. inputs = []
  28. outputs = []
  29. vecDim = VECDIM[nb % len(VECDIM)]
  30. dims=np.array([NBTESTS,vecDim])
  31. for _ in range(0,NBTESTS):
  32. v = np.random.rand(vecDim)
  33. v = v / np.sum(v)
  34. e = scipy.special.logsumexp(v)
  35. inputs += list(v)
  36. outputs.append(e)
  37. inputs = np.array(inputs)
  38. outputs = np.array(outputs)
  39. config.writeInput(nb, inputs,"Input")
  40. config.writeInputS16(nb, dims,"Dims")
  41. config.writeReference(nb, outputs,"RefLogSumExp")
  42. def klTest(config,nb):
  43. inputsA = []
  44. inputsB = []
  45. outputs = []
  46. vecDim = VECDIM[nb % len(VECDIM)]
  47. dims=np.array([NBTESTS,vecDim])
  48. for _ in range(0,NBTESTS):
  49. va = np.random.rand(vecDim)
  50. va = va / np.sum(va)
  51. vb = np.random.rand(vecDim)
  52. vb = vb / np.sum(vb)
  53. e = scipy.stats.entropy(va,vb)
  54. inputsA += list(va)
  55. inputsB += list(vb)
  56. outputs.append(e)
  57. inputsA = np.array(inputsA)
  58. inputsB = np.array(inputsB)
  59. outputs = np.array(outputs)
  60. config.writeInput(nb, inputsA,"InputA")
  61. config.writeInput(nb, inputsB,"InputB")
  62. config.writeInputS16(nb, dims,"Dims")
  63. config.writeReference(nb, outputs,"RefKL")
  64. def logSumExpDotTest(config,nb):
  65. inputsA = []
  66. inputsB = []
  67. outputs = []
  68. vecDim = VECDIM[nb % len(VECDIM)]
  69. dims=np.array([NBTESTS,vecDim])
  70. for _ in range(0,NBTESTS):
  71. va = np.random.rand(vecDim)
  72. va = va / np.sum(va)
  73. vb = np.random.rand(vecDim)
  74. vb = vb / np.sum(vb)
  75. d = 0.001
  76. # It is a proba so must be in [0,1]
  77. # But restricted to ]d,1] so that the log exists
  78. va = (1-d)*va + d
  79. vb = (1-d)*vb + d
  80. e = np.log(np.dot(va,vb))
  81. va = np.log(va)
  82. vb = np.log(vb)
  83. inputsA += list(va)
  84. inputsB += list(vb)
  85. outputs.append(e)
  86. inputsA = np.array(inputsA)
  87. inputsB = np.array(inputsB)
  88. outputs = np.array(outputs)
  89. config.writeInput(nb, inputsA,"InputA")
  90. config.writeInput(nb, inputsB,"InputB")
  91. config.writeInputS16(nb, dims,"Dims")
  92. config.writeReference(nb, outputs,"RefLogSumExpDot")
  93. def writeTests(config):
  94. entropyTest(config,1)
  95. logsumexpTest(config,2)
  96. klTest(config,3)
  97. logSumExpDotTest(config,4)
  98. PATTERNDIR = os.path.join("Patterns","DSP","Stats","Stats")
  99. PARAMDIR = os.path.join("Parameters","DSP","Stats","Stats")
  100. configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
  101. writeTests(configf32)