56 from daal.algorithms.neural_networks
import layers
57 from daal.data_management
import HomogenTensor, TensorIface
59 utils_folder = os.path.realpath(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
60 if utils_folder
not in sys.path:
61 sys.path.insert(0, utils_folder)
62 from utils
import printTensor, readTensorFromCSV
65 datasetFileName = os.path.join(
"..",
"data",
"batch",
"layer.csv")
68 if __name__ ==
"__main__":
71 data = readTensorFromCSV(datasetFileName)
73 printTensor(data,
"Forward batch normalization layer input (first 5 rows):", 5)
76 dataDims = data.getDimensions()
77 dimensionSize = dataDims[dimension]
80 dimensionSizes = [dimensionSize]
83 weights = HomogenTensor(dimensionSizes, TensorIface.doAllocate, 1.0)
84 biases = HomogenTensor(dimensionSizes, TensorIface.doAllocate, 2.0)
85 populationMean = HomogenTensor(dimensionSizes, TensorIface.doAllocate, 0.0)
86 populationVariance = HomogenTensor(dimensionSizes, TensorIface.doAllocate, 0.0)
89 forwardLayer = layers.batch_normalization.forward.Batch()
90 forwardLayer.parameter.dimension = dimension
91 forwardLayer.input.setInput(layers.forward.data, data)
92 forwardLayer.input.setInput(layers.forward.weights, weights)
93 forwardLayer.input.setInput(layers.forward.biases, biases)
94 forwardLayer.input.setInputLayerData(layers.batch_normalization.forward.populationMean, populationMean)
95 forwardLayer.input.setInputLayerData(layers.batch_normalization.forward.populationVariance, populationVariance)
98 forwardResult = forwardLayer.compute()
100 printTensor(forwardResult.getResult(layers.forward.value),
"Forward batch normalization layer result (first 5 rows):", 5)
101 printTensor(forwardResult.getLayerData(layers.batch_normalization.auxMean),
"Mini-batch mean (first 5 values):", 5)
102 printTensor(forwardResult.getLayerData(layers.batch_normalization.auxStandardDeviation),
"Mini-batch standard deviation (first 5 values):", 5)
103 printTensor(forwardResult.getLayerData(layers.batch_normalization.auxPopulationMean),
"Population mean (first 5 values):", 5)
104 printTensor(forwardResult.getLayerData(layers.batch_normalization.auxPopulationVariance),
"Population variance (first 5 values):", 5)
107 inputGradientTensor = HomogenTensor(dataDims, TensorIface.doAllocate, 10.0)
110 backwardLayer = layers.batch_normalization.backward.Batch()
111 backwardLayer.parameter.dimension = dimension
112 backwardLayer.input.setInput(layers.backward.inputGradient, inputGradientTensor)
113 backwardLayer.input.setInputLayerData(layers.backward.inputFromForward, forwardResult.getResultLayerData(layers.forward.resultForBackward))
116 backwardResult = backwardLayer.compute()
118 printTensor(backwardResult.getResult(layers.backward.gradient),
"Backward batch normalization layer result (first 5 rows):", 5)
119 printTensor(backwardResult.getResult(layers.backward.weightDerivatives),
"Weight derivatives (first 5 values):", 5)
120 printTensor(backwardResult.getResult(layers.backward.biasDerivatives),
"Bias derivatives (first 5 values):", 5)