33 from daal.algorithms.neural_networks
import initializers
34 from daal.algorithms.neural_networks
import layers
35 from daal.algorithms
import optimization_solver
36 from daal.algorithms.neural_networks
import training, prediction
37 from daal.data_management
import NumericTable, HomogenNumericTable
39 utils_folder = os.path.realpath(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
40 if utils_folder
not in sys.path:
41 sys.path.insert(0, utils_folder)
42 from utils
import printTensors, readTensorFromCSV
45 trainDatasetFile = os.path.join(
"..",
"data",
"batch",
"neural_network_train.csv")
46 trainGroundTruthFile = os.path.join(
"..",
"data",
"batch",
"neural_network_train_ground_truth.csv")
47 testDatasetFile = os.path.join(
"..",
"data",
"batch",
"neural_network_test.csv")
48 testGroundTruthFile = os.path.join(
"..",
"data",
"batch",
"neural_network_test_ground_truth.csv")
59 fullyConnectedLayer1 = layers.fullyconnected.Batch(5)
60 fullyConnectedLayer1.parameter.weightsInitializer = initializers.uniform.Batch(-0.001, 0.001)
61 fullyConnectedLayer1.parameter.biasesInitializer = initializers.uniform.Batch(0, 0.5)
64 fullyConnectedLayer2 = layers.fullyconnected.Batch(2)
65 fullyConnectedLayer2.parameter.weightsInitializer = initializers.uniform.Batch(0.5, 1)
66 fullyConnectedLayer2.parameter.biasesInitializer = initializers.uniform.Batch(0.5, 1)
69 softmaxCrossEntropyLayer = layers.loss.softmax_cross.Batch()
72 topology = training.Topology()
75 topology.push_back(fullyConnectedLayer1)
76 topology.push_back(fullyConnectedLayer2)
77 topology.push_back(softmaxCrossEntropyLayer)
78 topology.get(fc1).addNext(fc2)
79 topology.get(fc2).addNext(sm1)
85 trainingData = readTensorFromCSV(trainDatasetFile)
86 trainingGroundTruth = readTensorFromCSV(trainGroundTruthFile,
True)
88 sgdAlgorithm = optimization_solver.sgd.Batch(fptype=np.float32)
92 sgdAlgorithm.parameter.learningRateSequence = HomogenNumericTable(1, 1, NumericTable.doAllocate, learningRate)
94 sgdAlgorithm.parameter.batchSize = batchSize
95 sgdAlgorithm.parameter.nIterations = int(trainingData.getDimensionSize(0) / sgdAlgorithm.parameter.batchSize)
98 net = training.Batch(sgdAlgorithm)
100 sampleSize = trainingData.getDimensions()
101 sampleSize[0] = batchSize
104 topology = configureNet()
105 net.initialize(sampleSize, topology)
108 net.input.setInput(training.data, trainingData)
109 net.input.setInput(training.groundTruth, trainingGroundTruth)
112 trainingModel = net.compute().get(training.model)
114 return trainingModel.getPredictionModel_Float32()
117 def testModel(predictionModel):
119 predictionData = readTensorFromCSV(testDatasetFile)
122 net = prediction.Batch()
124 net.parameter.batchSize = predictionData.getDimensionSize(0)
127 net.input.setModelInput(prediction.model, predictionModel)
128 net.input.setTensorInput(prediction.data, predictionData)
135 def printResults(predictionResult):
137 predictionGroundTruth = readTensorFromCSV(testGroundTruthFile)
139 printTensors(predictionGroundTruth, predictionResult.getResult(prediction.prediction),
140 "Ground truth",
"Neural network predictions: each class probability",
141 "Neural network classification results (first 20 observations):", 20)
145 if __name__ ==
"__main__":
147 predictionModel = trainModel()
149 predictionResult = testModel(predictionModel)
151 printResults(predictionResult)