/// <summary> /// See the base. /// </summary> public override bool Equals(object obj) { if (obj == null) { return(false); } ActivationSettings cmpSettings = obj as ActivationSettings; if (FunctionType != cmpSettings.FunctionType || !Arg1.Equals(cmpSettings.Arg1) || !Arg2.Equals(cmpSettings.Arg2) || !Arg3.Equals(cmpSettings.Arg3) || !Arg4.Equals(cmpSettings.Arg4) || !Arg5.Equals(cmpSettings.Arg5) || !Arg6.Equals(cmpSettings.Arg6) || !Arg7.Equals(cmpSettings.Arg7) || !Arg8.Equals(cmpSettings.Arg8) || !Arg9.Equals(cmpSettings.Arg9) || !Arg10.Equals(cmpSettings.Arg10) || !Arg11.Equals(cmpSettings.Arg11) || !Arg12.Equals(cmpSettings.Arg12) || !Arg13.Equals(cmpSettings.Arg13) || !Arg14.Equals(cmpSettings.Arg14) || !Arg15.Equals(cmpSettings.Arg15) ) { return(false); } return(true); }
/// <summary> /// Copy constructor /// </summary> /// <param name="source">Source instance</param> public ActivationSettings(ActivationSettings source) { FunctionType = source.FunctionType; Arg1 = source.Arg1; Arg2 = source.Arg2; Arg3 = source.Arg3; Arg4 = source.Arg4; Arg5 = source.Arg5; Arg6 = source.Arg6; Arg7 = source.Arg7; Arg8 = source.Arg8; Arg9 = source.Arg9; Arg10 = source.Arg10; Arg11 = source.Arg11; Arg12 = source.Arg12; Arg13 = source.Arg13; Arg14 = source.Arg14; Arg15 = source.Arg15; return; }
/// <summary> /// Creates the deep copy instance of this instance /// </summary> public ActivationSettings DeepClone() { ActivationSettings clone = new ActivationSettings(this); return(clone); }
/// <summary> /// Returns the new instance of the activation function /// </summary> /// <param name="settings"> /// Specific activation settings /// </param> public static IActivationFunction Create(ActivationSettings settings) { switch (settings.FunctionType) { case Function.AdExpIF: return(new AdExpIF(double.IsNaN(settings.Arg1) ? 5 : settings.Arg1, //membraneTimeScale (ms) double.IsNaN(settings.Arg2) ? 500 : settings.Arg2, //membraneResistance (MOhm) double.IsNaN(settings.Arg3) ? -70 : settings.Arg3, //restV (mV) double.IsNaN(settings.Arg4) ? -51 : settings.Arg4, //resetV (mV) double.IsNaN(settings.Arg5) ? -50 : settings.Arg5, //rheobaseV (mV) double.IsNaN(settings.Arg6) ? -30 : settings.Arg6, //firingThresholdV (mV) double.IsNaN(settings.Arg7) ? 2 : settings.Arg7, //sharpnessDeltaT (mV) double.IsNaN(settings.Arg8) ? 0.5 : settings.Arg8, //adaptationVoltageCoupling (nS) double.IsNaN(settings.Arg9) ? 100 : settings.Arg9, //adaptationTimeConstant (ms) double.IsNaN(settings.Arg10) ? 7 : settings.Arg10, //spikeTriggeredAdaptationIncrement (pA) double.IsNaN(settings.Arg11) ? 200 : settings.Arg11 //stimuliCoeff (pA) )); case Function.AdSimpleIF: return(new AdSimpleIF(double.IsNaN(settings.Arg1) ? 15 : settings.Arg1, //membraneResistance (MOhm) double.IsNaN(settings.Arg2) ? 0.1 : settings.Arg2, //membrane decay rate double.IsNaN(settings.Arg3) ? 5 : settings.Arg3, //resetV (mV) double.IsNaN(settings.Arg4) ? 20 : settings.Arg4, //firingThresholdV (mV) double.IsNaN(settings.Arg5) ? 1 : settings.Arg5 //initial stimuli coeff )); case Function.BentIdentity: return(new BentIdentity()); case Function.Elliot: return(new Elliot((double.IsNaN(settings.Arg1) ? 1 : settings.Arg1))); case Function.ExpIF: return(new ExpIF(double.IsNaN(settings.Arg1) ? 12 : settings.Arg1, //membraneTimeScale (ms) double.IsNaN(settings.Arg2) ? 20 : settings.Arg2, //membraneResistance (MOhm) double.IsNaN(settings.Arg3) ? -65 : settings.Arg3, //restV (mV) double.IsNaN(settings.Arg4) ? -60 : settings.Arg4, //resetV (mV) double.IsNaN(settings.Arg5) ? -55 : settings.Arg5, //rheobaseV (mV) double.IsNaN(settings.Arg6) ? -30 : settings.Arg6, //firingThresholdV (mV) double.IsNaN(settings.Arg7) ? 2 : settings.Arg7, //sharpnessDeltaT (mV) double.IsNaN(settings.Arg8) ? 1 : settings.Arg8, //refractoryPeriods (ms) double.IsNaN(settings.Arg9) ? 5.5 : settings.Arg9 //stimuli coeff )); case Function.Gaussian: return(new Gaussian()); case Function.Identity: return(new Identity()); case Function.ISRU: return(new ISRU((double.IsNaN(settings.Arg1) ? 1 : settings.Arg1))); case Function.LeakyIF: return(new LeakyIF(double.IsNaN(settings.Arg1) ? 8 : settings.Arg1, //membraneTimeScale (ms) double.IsNaN(settings.Arg2) ? 10 : settings.Arg2, //membraneResistance (MOhm) double.IsNaN(settings.Arg3) ? -70 : settings.Arg3, //restV (mV) double.IsNaN(settings.Arg4) ? -65 : settings.Arg4, //resetV (mV) double.IsNaN(settings.Arg5) ? -50 : settings.Arg5, //firingThresholdV (mV) double.IsNaN(settings.Arg6) ? 1 : settings.Arg6, //refractoryPeriods (ms) double.IsNaN(settings.Arg7) ? 5.5 : settings.Arg7 //stimuli coeff )); case Function.LeakyReLU: return(new LeakyReLU((double.IsNaN(settings.Arg1) ? 0.01 : settings.Arg1))); case Function.Sigmoid: return(new Sigmoid()); case Function.SimpleIF: return(new SimpleIF(double.IsNaN(settings.Arg1) ? 15 : settings.Arg1, //membraneResistance (MOhm) double.IsNaN(settings.Arg2) ? 0.05 : settings.Arg2, //membrane decay rate double.IsNaN(settings.Arg3) ? 5 : settings.Arg3, //resetV (mV) double.IsNaN(settings.Arg4) ? 20 : settings.Arg4, //firingThresholdV (mV) double.IsNaN(settings.Arg5) ? 0 : settings.Arg5, //refractoryPeriods (ms) double.IsNaN(settings.Arg6) ? 1 : settings.Arg6 //stimuli coeff )); case Function.Sinc: return(new Sinc()); case Function.Sinusoid: return(new Sinusoid()); case Function.SoftExponential: return(new SoftExponential((double.IsNaN(settings.Arg1) ? 0 : settings.Arg1))); case Function.SoftPlus: return(new SoftPlus()); case Function.TanH: return(new TanH()); default: throw new ArgumentException($"Unsupported activation function type: {settings.FunctionType}"); } }