Ejemplo n.º 1
0
class Sine(ActivationFunction):
    nameInfo = NameInfo(name='sine',
                        caption='Sine激活函数',
                        description='sin(2*x)',
                        cataory='triangle')

    def __init__(self, k=1., omega=2., f=0.):
        '''
        线性激活函数
        '''
        self.k = k
        self.omega = omega
        self.f = f
        self.nameInfo = Sin.nameInfo

    def getParamNames(self):
        '''
        计算所需参数名
        :return:
        '''
        return [self.k, self.omega, self.f]

    def calculate(self, inputs, params):
        '''
        计算函数
        :param inputs:      输入
        :param modelparams: 模型参数
        :return:状态值(float)和是否激活(bool)
        '''
        value = self.k * np.sin(self.omega * inputs + self.f)
        return value, value > 0
Ejemplo n.º 2
0
class BipolarGaussian(ActivationFunction):
    nameInfo = NameInfo(name='bipolargaussian',
                        caption='BipolarGaussian激活函数',
                        description='2*e^(-(input*2.5)^2) - 1)',
                        cataory='gaussian')

    def __init__(self, center=0.0, sigma=1.0):
        '''
        高斯激活函数
        :param center:  float 均值缺省值,注意这里只是缺省值,实际计算会从上下文中传入
        :param sigma:   float 方差缺省值
        '''

        self.center = center
        self.sigma = sigma
        self.nameInfo = Gaussian.nameInfo

    def getParamNames(self):
        '''
        计算所需参数名
        :return:
        '''
        return ['center', 'sigma']

    # 激活函数执行
    def calculate(self, inputs, params):
        '''
        计算函数
        :param inputs:      输入
        :param modelparams: 模型参数
        :return: 状态值(float)和是否激活(bool)
        '''
        value = 2 * math.exp(-(inputs * 2.5) * (inputs * 2.5)) - 1
        return value, value > 0
Ejemplo n.º 3
0
class Linear(ActivationFunction):
    nameInfo = NameInfo(name='linear',
                        caption='线性激活函数',
                        description='y = max(-1,min(1,x))',
                        cataory='linear')

    def __init__(self):
        '''
        线性激活函数
        '''
        self.nameInfo = Linear.nameInfo

    def getParamNames(self):
        '''
        计算所需参数名
        :return:
        '''
        return []

    def calculate(self, inputs, params):
        '''
        计算函数
        :param inputs:      输入
        :param modelparams: 模型参数
        :return:状态值(float)和是否激活(bool)
        '''
        value = max(-1., min(1., inputs))
        return value, value > 0
Ejemplo n.º 4
0
class BipolarSigmoid(ActivationFunction):
    nameInfo = NameInfo(name='bipolarsigmoid',
                        caption='BipolarSigmoid激活函数',
                        description='2.0/(1.0 + exp(-4.9*x)) - 1.0',
                        cataory='sigmods')

    def __init__(self, a=2.0, b=1.0, T=1.0):
        '''
        高斯激活函数
        :param a:   float 参量a的缺省值
        :param b:   float 参量b的缺省值
        :param T:   float 参量T的缺省值
        '''
        self.a = a
        self.b = b
        self.T = T
        self.nameInfo = Sigmod.nameInfo

    def getParamNames(self):
        '''
        计算所需参数名
        :return:
        '''
        return ['a', 'b', 'T']

    def calculate(self, inputs, params):
        '''
        计算函数
        :param inputs:      输入
        :param modelparams: 模型参数
        :return:状态值(float)和是否激活(bool)
        '''
        value = 2.0 / (1.0 + math.exp(-4.9 * inputs)) - 1.0
        return value, value > 0.5
Ejemplo n.º 5
0
 def __init__(self, name):
     '''
     激活函数
     '''
     self.nameInfo = name if isinstance(name, NameInfo) else NameInfo(
         str(name))
     self.vars = {}  #激活函数的参量
Ejemplo n.º 6
0
class Sigmod(ActivationFunction):
    nameInfo = NameInfo(name='sigmod',
                        caption='Sigmod激活函数',
                        description='a/(b*(1+exp(-T*x)))',
                        cataory='sigmods')

    def __init__(self, a=1.0, b=1.0, T=1.0):
        '''
        高斯激活函数
        :param a:   float 参量a的缺省值
        :param b:   float 参量b的缺省值
        :param T:   float 参量T的缺省值
        '''
        self.a = a
        self.b = b
        self.T = T
        self.nameInfo = Sigmod.nameInfo

    def getParamNames(self):
        '''
        计算所需参数名
        :return:
        '''
        return ['a', 'b', 'T']

    def calculate(self, inputs, params=None):
        '''
        计算函数
        :param inputs:      输入
        :param modelparams: 模型参数
        :return:状态值(float)和是否激活(bool)
        '''
        if params is None: params = {}
        a = params.get('a', self.a)
        b = params.get('b', self.b)
        T = params.get('T', self.T)
        value = 0.
        try:
            value = a / (b * (1 + math.exp(-T * inputs)))
        except OverflowError as err:
            print("activation error: {0},inputs={1}".format(err, inputs))
        return value, value > 0.5
Ejemplo n.º 7
0
class Gaussian(ActivationFunction):
    nameInfo = NameInfo(name='gaussian',
                        caption='高斯激活函数',
                        description='exp(-(x-center)^2/sigma^2)',
                        cataory='gaussian')

    def __init__(self, center=0.0, sigma=1.0):
        '''
        高斯激活函数
        :param center:  float 均值缺省值,注意这里只是缺省值,实际计算会从上下文中传入
        :param sigma:   float 方差缺省值
        '''

        self.center = center
        self.sigma = sigma
        self.nameInfo = Gaussian.nameInfo

    def getParamNames(self):
        '''
        计算所需参数名
        :return:
        '''
        return ['center', 'sigma']

    # 激活函数执行
    def calculate(self, inputs, params):
        '''
        计算函数
        :param inputs:      输入
        :param modelparams: 模型参数
        :return: 状态值(float)和是否激活(bool)
        '''
        if params is None: params = {}
        center = params.get('center', self.center)
        sigma = params.get('sigma', self.sigma)
        value = math.exp(-math.pow(inputs - center, 2) / math.pow(sigma, 2))
        return value, value > 0.5