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)); }
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); }