import numpy as np
import pylab

def activation_functions():
    xmin, xmax = -4., 4.
    ymin, ymax = -3., 3.

    x = np.linspace(xmin, xmax, 500)
    y = {}
    y['lin'] = x
    y['relu'] = np.maximum (x, 0.)
    y['logistic'] = 1. / (1. + np.exp(-x))
    y['tanh'] = np.tanh(x)
    y['soft_relu'] = np.logaddexp(0., x)
    y['threshold'] = 1. * (x > 0.)

    for name, y_ in y.items():
        pylab.figure()
        pylab.plot(x, y_, 'b-', lw=2.)
        pylab.axhline(0., color='k', ls='--')
        pylab.axvline(0., color='k', ls='--')
        pylab.xlim(xmin, xmax)
        pylab.ylim(ymin, ymax)
        pylab.savefig('figures/act_{}.png'.format(name))
        

def scaling():
    xmin, xmax = -4., 4.
    ymin, ymax = 0., 1.

    x = np.linspace(xmin, xmax, 500)
    for scaling in [1, 5]:
        pylab.figure()
        y = 1. / (1. + np.exp(-scaling * x))
        pylab.plot(x, y, 'b-', lw=3.)
        pylab.axvline(0., color='k', ls='--')
        pylab.xlim(xmin, xmax)
        pylab.ylim(ymin, ymax)
        pylab.xticks(size='x-large')
        pylab.yticks(size='x-large')
        pylab.savefig('figures/scaling_{}.png'.format(scaling))


