static void Real()
        {
            var inputLayer  = new InputLayer3D(1, 1, 1);
            var outputLayer = new OutputLayer(1)
            {
                ActivationFunction = new ConstOutputArrayFunction()
            };
            var dataProvider = new FunctionProvider();

            InitializeTrainingData(dataProvider.TrainData);
            var perceptron1 = new PerceptronLayer(10, 2)
            {
                ActivationFunction = new SigmoidFunction()
            };
            var perceptron2 = new PerceptronLayer(10, 10)
            {
                ActivationFunction = new SigmoidFunction()
            };
            var perceptron3 = new PerceptronLayer(8, 10)
            {
                ActivationFunction = new SigmoidFunction()
            };
            var perceptron4 = new PerceptronLayer(6, 8)
            {
                ActivationFunction = new SigmoidFunction()
            };
            var perceptron5 = new PerceptronLayer(2, 6)
            {
                ActivationFunction = new SigmoidFunction()
            };

            MultiLayerPerceptron network = new MultiLayerPerceptron
            {
                InputLayer   = inputLayer,
                OutputLayer  = outputLayer,
                DataProvider = dataProvider
            };

            network.HiddenLayers.Add(perceptron1);
            network.HiddenLayers.Add(perceptron2);
            network.HiddenLayers.Add(perceptron3);
            network.HiddenLayers.Add(perceptron4);
            network.HiddenLayers.Add(perceptron5);

            var trainer = new FCTrainer(network, 10, 1, dataProvider);

            trainer.Train(1);
            var error = network.Test(1);
        }
        static void OneTrainingData()
        {
            var inputLayer  = new InputLayer3D(1, 1, 3);
            var outputLayer = new OutputLayer(2)
            {
                ActivationFunction = new ConstOutputArrayFunction()
            };
            var weight1 = new List <Array3D> {
                new Array3D(0.1, 0.3), new Array3D(0.3, 0.1)
            };
            var weight2 = new List <Array3D> {
                new Array3D(0.4, 0.5), new Array3D(0.3, 0.5)
            };
            var perceptron1 = new PerceptronLayer(weight1)
            {
                ActivationFunction = new SigmoidFunction()
            };
            var perceptron2 = new PerceptronLayer(weight2)
            {
                ActivationFunction = new SigmoidFunction()
            };
            var dataProvider = new FunctionProvider
            {
                TrainData =
                {
                    new TrainingData <Array3D, Array3D> {
                        Input = new Array3D(0.3,                         0.4, 0.5), Expected = new Array3D(0.2, 0.6)
                    },
                    new TrainingData <Array3D, Array3D> {
                        Input = new Array3D(0.2, 0.4, 0.7), Expected = new Array3D(0.1, 0.8)
                    }
                }
            };

            var network = new MultiLayerPerceptron
            {
                InputLayer   = inputLayer,
                OutputLayer  = outputLayer,
                DataProvider = dataProvider
            };

            network.HiddenLayers.Add(perceptron1);
            network.HiddenLayers.Add(perceptron2);

            var trainer = new FCTrainer(network, 2, 1, dataProvider);

            trainer.Train(100);
        }
        /// <summary>
        ///     Contains方法解析
        /// </summary>
        /// <param name="fieldType"></param>
        /// <param name="fieldName"></param>
        /// <param name="paramType"></param>
        /// <param name="paramName"></param>
        protected virtual void VisitMethodContains(MethodCallExpression m, Type fieldType, string fieldName, Type paramType, string paramName)
        {
            // 非List<>形式
            if (paramType != null && !IsGenericOrArray(paramType))
            {
                #region 搜索值串的处理
                var param = ParamList.Find(o => o.ParameterName == paramName);
                if (param != null && Regex.IsMatch(param.Value.ToString(), @"[\d]+") && (Type.GetTypeCode(fieldType) == TypeCode.Int16 || Type.GetTypeCode(fieldType) == TypeCode.Int32 || Type.GetTypeCode(fieldType) == TypeCode.Decimal || Type.GetTypeCode(fieldType) == TypeCode.Double || Type.GetTypeCode(fieldType) == TypeCode.Int64 || Type.GetTypeCode(fieldType) == TypeCode.UInt16 || Type.GetTypeCode(fieldType) == TypeCode.UInt32 || Type.GetTypeCode(fieldType) == TypeCode.UInt64))
                {
                    param.Value  = "," + param.Value + ",";
                    param.DbType = DbType.String;
                    if (DbProvider.KeywordAegis("").Length > 0)
                    {
                        fieldName = "','+" + fieldName.Substring(1, fieldName.Length - 2) + "+','";
                    }
                    else
                    {
                        fieldName = "','+" + fieldName + "+','";
                    }
                }
                #endregion

                // 判断是不是字段调用Contains
                var isFieldCall = m.Object != null && m.Object.NodeType == ExpressionType.MemberAccess && ((MemberExpression)m.Object).Expression != null && ((MemberExpression)m.Object).Expression.NodeType == ExpressionType.Parameter;
                SqlList.Push(isFieldCall ? FunctionProvider.CharIndex(fieldName, paramName, IsNot) : FunctionProvider.CharIndex(paramName, fieldName, IsNot));
            }
            else
            {
                // 删除参数化,后面需要改成多参数
                var paramValue = CurrentDbParameter.Value.ToString();
                ParamList.RemoveAt(ParamList.Count - 1);

                // 参数类型,转换成多参数
                var lstParamName = new List <string>();
                var index        = 0;
                foreach (var val in paramValue.Split(','))
                {
                    var param = DbProvider.CreateDbParam(CurrentDbParameter.ParameterName.Substring(1) + "_" + index++, val, fieldType);
                    lstParamName.Add(param.ParameterName);
                    ParamList.Add(param);
                }

                SqlList.Push(FunctionProvider.In(fieldName, lstParamName, IsNot));
            }
        }
        /// <summary>
        ///     将属性变量转换成T-SQL字段名
        /// </summary>
        protected override Expression VisitMemberAccess(MemberExpression m)
        {
            if (m == null)
            {
                return(null);
            }
            //if (m.NodeType == ExpressionType.Constant) { return base.VisitMemberAccess(m); }

            CurrentField = SetMap.PhysicsMap.GetState(m.Member.Name);
            // 解析带SQL函数的字段
            if (CurrentField.Key == null)
            {
                switch (m.Member.Name)
                {
                case "Count":
                case "Length":
                {
                    VisitMemberAccess((MemberExpression)m.Expression);
                    SqlList.Push(FunctionProvider.Len(SqlList.Pop()));
                    return(m);
                }
                }
                if (m.Expression != null && m.Expression.NodeType == ExpressionType.MemberAccess)
                {
                    VisitMemberAccess((MemberExpression)m.Expression);
                    return(m);
                }

                // 加入Sql队列
                CurrentFieldName = m.Member.Name;
                SqlList.Push(DbProvider.KeywordAegis(CurrentFieldName));
                return(m);
            }

            // 加入Sql队列
            CurrentFieldName = CurrentField.Value.Field.Name;
            VisitMemberAccess(CurrentField);
            return(m);
        }
        static void Xor()
        {
            const int batchSize = 4;
            const int epochSize = 16;

            var inputLayer  = new InputLayer3D(1, 1, 1);
            var outputLayer = new OutputLayer(1)
            {
                ActivationFunction = new ConstOutputArrayFunction()
            };
            var dataProvider = new FunctionProvider
            {
                TrainData =
                {
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(0, 0), Expected = new Array3D(0.0)
                    },
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(0, 1), Expected = new Array3D(1.0)
                    },
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(1, 0), Expected = new Array3D(1.0)
                    },
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(1, 1), Expected = new Array3D(0.0)
                    }
                },
                TestData = { new TrainingData <Array3D, Array3D>
                             {
                                 Input = new Array3D(0, 0), Expected = new Array3D(0)
                             },
                             new TrainingData <Array3D, Array3D>
                             {
                                 Input = new Array3D(0, 1), Expected = new Array3D(1)
                             },
                             new TrainingData <Array3D, Array3D>
                             {
                                 Input = new Array3D(1, 0), Expected = new Array3D(1)
                             },
                             new TrainingData <Array3D, Array3D>
                             {
                                 Input = new Array3D(1, 1), Expected = new Array3D(0)
                             } },
                IsQueue = false
            };
            var oneData = new FunctionProvider {
                TrainData =
                {
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(0, 0), Expected = new Array3D(0.0)
                    },
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(1, 1), Expected = new Array3D(0.0)
                    }
                }, IsQueue = false
            };
            var function = new FunctionProvider(x => Math.Pow(x, 2));

            var weight1 = new List <Array3D> {
                new Array3D(0.1, 0.3), new Array3D(0.3, 0.1)
            };
            var weight2 = new List <Array3D> {
                new Array3D(0.4, 0.5)
            };
            var perceptron1 = new PerceptronLayer(5, 2)
            {
                ActivationFunction = new TanhActivationFunction()
            };

            perceptron1.Trainer = new MiniBatchPerceptronTrainer(perceptron1.Neurals, false)
            {
                BatchSize = batchSize, ActivationFunction = new TanhActivationFunction(), LearningRate = 0.1, Momentum = 0.1
            };
            var perceptron2 = new PerceptronLayer(1, 5)
            {
                ActivationFunction = new TanhActivationFunction()
            };

            perceptron2.Trainer = new MiniBatchPerceptronTrainer(perceptron2.Neurals, true)
            {
                BatchSize = batchSize, ActivationFunction = new TanhActivationFunction(), LearningRate = 0.1, Momentum = 0.1
            };

            var network = new MultiLayerPerceptron
            {
                InputLayer   = inputLayer,
                OutputLayer  = outputLayer,
                DataProvider = dataProvider
            };

            network.HiddenLayers.Add(perceptron1);
            network.HiddenLayers.Add(perceptron2);

            var trainer = new FCTrainer(network, epochSize, batchSize, dataProvider);

            trainer.Train(200);
        }
 /// <summary>
 ///     ToShortDate方法解析
 /// </summary>
 /// <param name="fieldType"></param>
 /// <param name="fieldName"></param>
 protected virtual void VisitMethodToShortDate(Type fieldType, string fieldName)
 {
     SqlList.Push(FunctionProvider.ToShortDate(fieldName));
 }
 /// <summary>
 ///     IsEquals方法解析
 /// </summary>
 /// <param name="fieldType"></param>
 /// <param name="fieldName"></param>
 /// <param name="paramType"></param>
 /// <param name="paramName"></param>
 protected virtual void VisitMethodEquals(Type fieldType, string fieldName, Type paramType, string paramName)
 {
     SqlList.Push(FunctionProvider.IsEquals(fieldName, paramName, IsNot));
 }
 /// <summary>
 ///     EndSwith方法解析
 /// </summary>
 /// <param name="fieldType"></param>
 /// <param name="fieldName"></param>
 /// <param name="paramType"></param>
 /// <param name="paramName"></param>
 protected virtual void VisitMethodEndswith(Type fieldType, string fieldName, Type paramType, string paramName)
 {
     SqlList.Push(FunctionProvider.EndsWith(fieldName, paramName, IsNot));
     CurrentDbParameter.Value = $"%{CurrentDbParameter.Value}";
 }
 /// <summary>
 ///     StartSwith方法解析
 /// </summary>
 /// <param name="fieldType"></param>
 /// <param name="fieldName"></param>
 /// <param name="paramType"></param>
 /// <param name="paramName"></param>
 protected virtual void VisitMethodStartswith(Type fieldType, string fieldName, Type paramType, string paramName)
 {
     SqlList.Push(FunctionProvider.CharIndex(fieldName, paramName, IsNot));
 }
Exemple #10
0
        private void InitializeNetwork()
        {
            var inputLayer  = new InputLayer3D(1, 1, 1);
            var outputLayer = new OutputLayer(1)
            {
                ActivationFunction = new ConstOutputArrayFunction()
            };
            var dataProvider = new FunctionProvider
            {
                TrainData =
                {
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(0, 0), Expected = new Array3D(0.0)
                    },
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(0, 1), Expected = new Array3D(1.0)
                    },
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(1, 0), Expected = new Array3D(1.0)
                    },
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(1, 1), Expected = new Array3D(0.0)
                    }
                },
                TestData = { new TrainingData <Array3D, Array3D>
                             {
                                 Input = new Array3D(0, 0), Expected = new Array3D(0)
                             },
                             new TrainingData <Array3D, Array3D>
                             {
                                 Input = new Array3D(0, 1), Expected = new Array3D(1)
                             },
                             new TrainingData <Array3D, Array3D>
                             {
                                 Input = new Array3D(1, 0), Expected = new Array3D(1)
                             },
                             new TrainingData <Array3D, Array3D>
                             {
                                 Input = new Array3D(1, 1), Expected = new Array3D(0)
                             } },
                IsQueue = false
            };
            var oneData = new FunctionProvider
            {
                TrainData =
                {
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(0, 0), Expected = new Array3D(0.0)
                    },
                    new TrainingData <Array3D, Array3D>
                    {
                        Input = new Array3D(1, 1), Expected = new Array3D(0.0)
                    }
                },
                IsQueue = false
            };
            var function = new FunctionProvider(x => Math.Pow(x, 2));

            var perceptron1 = new PerceptronLayer(10, 1)
            {
                ActivationFunction = new TanhActivationFunction()
            };

            perceptron1.Trainer = new MiniBatchPerceptronTrainer(perceptron1.Neurals, false)
            {
                BatchSize = BatchSize, ActivationFunction = new TanhActivationFunction(), LearningRate = 0.1, Momentum = 0.1
            };
            var perceptron2 = new PerceptronLayer(1, 10)
            {
                ActivationFunction = new TanhActivationFunction()
            };

            perceptron2.Trainer = new MiniBatchPerceptronTrainer(perceptron2.Neurals, true)
            {
                BatchSize = BatchSize, ActivationFunction = new TanhActivationFunction(), LearningRate = 0.1, Momentum = 0.1
            };

            Network = new MultiLayerPerceptron
            {
                InputLayer   = inputLayer,
                OutputLayer  = outputLayer,
                DataProvider = function
            };
            Network.HiddenLayers.Add(perceptron1);
            Network.HiddenLayers.Add(perceptron2);

            Trainer = new FCTrainer(Network, EpochSize, BatchSize, function);
        }