internal static NativeMethods.MlpKernelType ToNativeMlpKernelType(this MultilayerPerceptronKernelType type) { switch (type) { case MultilayerPerceptronKernelType.Kernel1: return(NativeMethods.MlpKernelType.Kernel1); default: throw new ArgumentOutOfRangeException(nameof(type), type, null); } }
/// <summary> /// Initializes a new instance of the <see cref="MultilayerPerceptron{T}"/> class with the specified nodes of input layer, nodes of first hidden layer, nodes of second hidden layer, nodes of output layer, alpha and momentum. /// </summary> /// <param name="nodesInInputLayer">The number of nodes for input layer.</param> /// <param name="nodesInFirstHiddenLayer">The number of nodes for first hidden layer.</param> /// <param name="nodesInSecondHiddenLayer">The number of nodes for second hidden layer.</param> /// <param name="nodesInOutputLayer">The number of nodes for output layer.</param> /// <param name="alpha">The learning rate. The default value is 0.1.</param> /// <param name="momentum">The momentum. The default value is 0.8.</param> /// <exception cref="NotSupportedException">The specified type of kernel does not supported.</exception> public MultilayerPerceptron(int nodesInInputLayer, int nodesInFirstHiddenLayer, int nodesInSecondHiddenLayer = 0, int nodesInOutputLayer = 1, double alpha = 0.1, double momentum = 0.8) { if (!SupportTypes.TryGetValue(typeof(T), out var type)) { throw new NotSupportedException($"{typeof(T).Name} does not support"); } this._MultilayerPerceptronKernelType = type; var native = type.ToNativeMlpKernelType(); this.NativePtr = NativeMethods.mlp_kernel_new(native, nodesInInputLayer, nodesInFirstHiddenLayer, nodesInSecondHiddenLayer, nodesInOutputLayer, alpha, momentum); }