| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import os.path
- import itertools
- import Tools
- import random
- import numpy as np
- import scipy
- import scipy.stats
- NBTESTS = 10
- VECDIM = [12,14,20]
- def entropyTest(config,nb):
- inputs = []
- outputs = []
- vecDim = VECDIM[nb % len(VECDIM)]
- dims=np.array([NBTESTS,vecDim])
- for _ in range(0,NBTESTS):
- v = np.random.rand(vecDim)
- v = v / np.sum(v)
- e = scipy.stats.entropy(v)
- inputs += list(v)
- outputs.append(e)
- inputs = np.array(inputs)
- outputs = np.array(outputs)
- config.writeInput(nb, inputs,"Input")
- config.writeInputS16(nb, dims,"Dims")
- config.writeReference(nb, outputs,"RefEntropy")
- def logsumexpTest(config,nb):
- inputs = []
- outputs = []
- vecDim = VECDIM[nb % len(VECDIM)]
- dims=np.array([NBTESTS,vecDim])
- for _ in range(0,NBTESTS):
- v = np.random.rand(vecDim)
- v = v / np.sum(v)
- e = scipy.special.logsumexp(v)
- inputs += list(v)
- outputs.append(e)
- inputs = np.array(inputs)
- outputs = np.array(outputs)
- config.writeInput(nb, inputs,"Input")
- config.writeInputS16(nb, dims,"Dims")
- config.writeReference(nb, outputs,"RefLogSumExp")
- def klTest(config,nb):
- inputsA = []
- inputsB = []
- outputs = []
- vecDim = VECDIM[nb % len(VECDIM)]
- dims=np.array([NBTESTS,vecDim])
- for _ in range(0,NBTESTS):
- va = np.random.rand(vecDim)
- va = va / np.sum(va)
- vb = np.random.rand(vecDim)
- vb = vb / np.sum(vb)
- e = scipy.stats.entropy(va,vb)
- inputsA += list(va)
- inputsB += list(vb)
- outputs.append(e)
- inputsA = np.array(inputsA)
- inputsB = np.array(inputsB)
- outputs = np.array(outputs)
- config.writeInput(nb, inputsA,"InputA")
- config.writeInput(nb, inputsB,"InputB")
- config.writeInputS16(nb, dims,"Dims")
- config.writeReference(nb, outputs,"RefKL")
- def logSumExpDotTest(config,nb):
- inputsA = []
- inputsB = []
- outputs = []
- vecDim = VECDIM[nb % len(VECDIM)]
- dims=np.array([NBTESTS,vecDim])
- for _ in range(0,NBTESTS):
- va = np.random.rand(vecDim)
- va = va / np.sum(va)
- vb = np.random.rand(vecDim)
- vb = vb / np.sum(vb)
- d = 0.001
- # It is a proba so must be in [0,1]
- # But restricted to ]d,1] so that the log exists
- va = (1-d)*va + d
- vb = (1-d)*vb + d
- e = np.log(np.dot(va,vb))
- va = np.log(va)
- vb = np.log(vb)
- inputsA += list(va)
- inputsB += list(vb)
- outputs.append(e)
- inputsA = np.array(inputsA)
- inputsB = np.array(inputsB)
- outputs = np.array(outputs)
- config.writeInput(nb, inputsA,"InputA")
- config.writeInput(nb, inputsB,"InputB")
- config.writeInputS16(nb, dims,"Dims")
- config.writeReference(nb, outputs,"RefLogSumExpDot")
- def writeTests(config):
- entropyTest(config,1)
- logsumexpTest(config,2)
- klTest(config,3)
- logSumExpDotTest(config,4)
- PATTERNDIR = os.path.join("Patterns","DSP","Stats","Stats")
- PARAMDIR = os.path.join("Parameters","DSP","Stats","Stats")
- configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
- writeTests(configf32)
|