#include "daal.h"
#include "service.h"
using namespace std;
using namespace daal;
using namespace daal::algorithms;
using namespace daal::algorithms::neural_networks::layers;
using namespace daal::data_management;
using namespace daal::services;
string datasetFileName = "../data/batch/layer.csv";
int main(int argc, char *argv[])
{
checkArguments(argc, argv, 1, &datasetFileName);
TensorPtr data = readTensorFromCSV(datasetFileName);
size_t nDim = data->getNumberOfDimensions();
printTensor(data, "Forward one-dimensional maximum pooling layer input (first 10 rows):", 10);
maximum_pooling1d::forward::Batch<> forwardLayer(nDim);
forwardLayer.input.set(forward::data, data);
forwardLayer.compute();
maximum_pooling1d::forward::ResultPtr forwardResult = forwardLayer.getResult();
printTensor(forwardResult->get(forward::value), "Forward one-dimensional maximum pooling layer result (first 5 rows):", 5);
printTensor(forwardResult->get(maximum_pooling1d::auxSelectedIndices),
"Forward one-dimensional maximum pooling layer selected indices (first 5 rows):", 5);
maximum_pooling1d::backward::Batch<> backwardLayer(nDim);
backwardLayer.input.set(backward::inputGradient, forwardResult->get(forward::value));
backwardLayer.input.set(backward::inputFromForward, forwardResult->get(forward::resultForBackward));
backwardLayer.compute();
backward::ResultPtr backwardResult = backwardLayer.getResult();
printTensor(backwardResult->get(backward::gradient),
"Backward one-dimensional maximum pooling layer result (first 10 rows):", 10);
return 0;
}