Encog.Engine.Network.Activation.ActivationRamp.ActivationFunction C# (CSharp) Method

ActivationFunction() public method

public ActivationFunction ( double x, int start, int size ) : void
x double
start int
size int
return void
        public virtual void ActivationFunction(double[] x, int start,
                                               int size)
        {
            double slope = (_paras[ParamRampHighThreshold] - _paras[ParamRampLowThreshold])
                           /(_paras[ParamRampHigh] - _paras[ParamRampLow]);

            for (int i = start; i < start + size; i++)
            {
                if (x[i] < _paras[ParamRampLowThreshold])
                {
                    x[i] = _paras[ParamRampLow];
                }
                else if (x[i] > _paras[ParamRampHighThreshold])
                {
                    x[i] = _paras[ParamRampHigh];
                }
                else
                {
                    x[i] = (slope*x[i]);
                }
            }
        }

Usage Example

        public void TestRamp()
        {
            var activation = new ActivationRamp(2, -2, 3, 1);

            Assert.IsTrue(activation.HasDerivative);

            var clone = activation.Clone();

            Assert.IsInstanceOfType(clone, typeof(ActivationRamp));

            double[] input = { -3, -2, 0, 2, 3 };

            //Clone should have same parameters
            CollectionAssert.AreEqual(activation.Params, ((ActivationRamp)clone).Params);

            activation.ActivationFunction(input, 0, 5);

            Assert.AreEqual(1.0, input[0], EncogFramework.DefaultDoubleEqual);
            Assert.AreEqual(1.0, input[1], EncogFramework.DefaultDoubleEqual);
            Assert.AreEqual(2.0, input[2], EncogFramework.DefaultDoubleEqual);
            Assert.AreEqual(3.0, input[3], EncogFramework.DefaultDoubleEqual);
            Assert.AreEqual(3.0, input[4], EncogFramework.DefaultDoubleEqual);

            input[0] = activation.DerivativeFunction(-3, input[0]);
            input[2] = activation.DerivativeFunction(0, input[2]);
            input[4] = activation.DerivativeFunction(3, input[4]);
            Assert.AreEqual(0.0, input[0], EncogFramework.DefaultDoubleEqual);
            Assert.AreEqual(0.5, input[2], EncogFramework.DefaultDoubleEqual);
            Assert.AreEqual(0.0, input[4], EncogFramework.DefaultDoubleEqual);
        }