﻿//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#include "Softmax.hpp"

#include <cmath>
#include <vector>

namespace armnn
{

/// Computes the softmax function on some inputs, into outputs, with a shape given by tensorInfo.
void Softmax(const float* in, float* out, const TensorInfo& tensorInfo, float beta)
{
    unsigned int numChannels = tensorInfo.GetShape()[1];
    for (unsigned int n = 0; n < tensorInfo.GetShape()[0]; n++)
    {
        // Find maximum channel.
        float max = in[n * numChannels];
        for (unsigned int c = 1; c < numChannels; c++)
        {
            float val = in[n * numChannels + c];
            if (val > max)
            {
                max = val;
            }
        }

        // Exponentiate all values and sum.
        std::vector<float> exponentials(numChannels);
        float              sum = 0.0f;
        for (unsigned int c = 0; c < numChannels; c++)
        {
            float val       = in[n * numChannels + c];
            exponentials[c] = expf((val - max) * beta);
            sum += exponentials[c];
        }

        // Divide exponentials by sum to give outputs.
        for (unsigned int c = 0; c < numChannels; c++)
        {
            out[n * numChannels + c] = exponentials[c] / sum;
        }
    }
}

} //namespace armnn
