/// <summary> /// Set Data To GraphInfo with out redraw grid /// </summary> /// <param name="graphInfo"></param> public void SetDataToGraphInfo(GraphLib.GraphInfo graphInfo) { this.graphViewer.UpdateGraphInfo(graphInfo, false, false); }
/// <summary> /// OnGridCreated /// </summary> /// <param name="graphGridLine"></param> private void OnGridCreated(GraphLib.Model.GraphGridLine graphGridLine) { try { //add gridmodel to canvas if (this.gridAxis.Children != null) { Canvas gridcanvas = null; Canvas labelxcanvas = null; Canvas labelycanvas = null; if (this.gridAxis.Children.Count == 3) { gridcanvas = this.gridAxis.Children[0] as Canvas; labelxcanvas = this.gridAxis.Children[1] as Canvas; labelycanvas = this.gridAxis.Children[2] as Canvas; } else { this.gridAxis.Children.Clear(); gridcanvas = new Canvas(); labelxcanvas = new Canvas(); labelycanvas = new Canvas(); this.gridAxis.Children.Add(gridcanvas); this.gridAxis.Children.Add(labelxcanvas); this.gridAxis.Children.Add(labelycanvas); } //Grid items if (gridcanvas != null && labelxcanvas != null && labelycanvas != null) { if (gridcanvas.Children.Count >= 11) { ((Button)gridcanvas.Children[4]).Click -= new RoutedEventHandler(this.BtnZoomInX_Click); ((Button)gridcanvas.Children[5]).Click -= new RoutedEventHandler(this.BtnZoomOutX_Click); ((Button)gridcanvas.Children[6]).Click -= new RoutedEventHandler(this.BtnZoomInY_Click); ((Button)gridcanvas.Children[6]).PreviewMouseLeftButtonUp -= new MouseButtonEventHandler(this.BtnZoomInY_MouseUp); ((Button)gridcanvas.Children[6]).PreviewMouseLeftButtonDown -= new MouseButtonEventHandler(this.BtnZoomInY_MouseDown); ((Button)gridcanvas.Children[7]).Click -= new RoutedEventHandler(this.BtnZoomOutY_Click); ((Button)gridcanvas.Children[7]).PreviewMouseLeftButtonUp -= new MouseButtonEventHandler(this.BtnZoomOutY_MouseUp); ((Button)gridcanvas.Children[7]).PreviewMouseLeftButtonDown -= new MouseButtonEventHandler(this.BtnZoomOutY_MouseDown); ((Button)gridcanvas.Children[8]).Click -= new RoutedEventHandler(this.BtnMeasureX_Click); ((Button)gridcanvas.Children[9]).Click -= new RoutedEventHandler(this.BtnMeasureY_Click); ((Button)gridcanvas.Children[10]).Click -= new RoutedEventHandler(this.BtnMeasureY2_Click); } gridcanvas.Children.Clear(); gridcanvas.Children.Add(graphGridLine.AxisShapeData); gridcanvas.Children.Add(graphGridLine.GridShapeData); gridcanvas.Children.Add(graphGridLine.AxisLabelX); gridcanvas.Children.Add(graphGridLine.AxisLabelY); gridcanvas.Children.Add(graphGridLine.ButtonZoomInX); gridcanvas.Children.Add(graphGridLine.ButtonZoomOutX); gridcanvas.Children.Add(graphGridLine.ButtonZoomInY); gridcanvas.Children.Add(graphGridLine.ButtonZoomOutY); gridcanvas.Children.Add(graphGridLine.ButtonMeasureX); gridcanvas.Children.Add(graphGridLine.ButtonMeasureY); gridcanvas.Children.Add(graphGridLine.ButtonMeasureY2); //For Test Speed //gridcanvas.Children.Add(graphGridLine.CreateSpeedCheckLabel()); //For Test Speed //button click event graphGridLine.ButtonMeasureX.Click += new RoutedEventHandler(this.BtnMeasureX_Click); graphGridLine.ButtonMeasureY.Click += new RoutedEventHandler(this.BtnMeasureY_Click); graphGridLine.ButtonMeasureY2.Click += new RoutedEventHandler(this.BtnMeasureY2_Click); graphGridLine.ButtonZoomInX.Click += new RoutedEventHandler(this.BtnZoomInX_Click); graphGridLine.ButtonZoomOutX.Click += new RoutedEventHandler(this.BtnZoomOutX_Click); graphGridLine.ButtonZoomInY.Click += new RoutedEventHandler(this.BtnZoomInY_Click); graphGridLine.ButtonZoomInY.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(this.BtnZoomInY_MouseDown); graphGridLine.ButtonZoomInY.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(this.BtnZoomInY_MouseUp); graphGridLine.ButtonZoomOutY.Click += new RoutedEventHandler(this.BtnZoomOutY_Click); graphGridLine.ButtonZoomOutY.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(this.BtnZoomOutY_MouseDown); graphGridLine.ButtonZoomOutY.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(this.BtnZoomOutY_MouseUp); if (_IsAxisXZoomEnable) { graphGridLine.ButtonZoomInX.Visibility = System.Windows.Visibility.Visible; graphGridLine.ButtonZoomOutX.Visibility = System.Windows.Visibility.Visible; } else { graphGridLine.ButtonZoomInX.Visibility = System.Windows.Visibility.Hidden; graphGridLine.ButtonZoomOutX.Visibility = System.Windows.Visibility.Hidden; } if (_IsMeasureButtonShow) { graphGridLine.ButtonMeasureX.Visibility = System.Windows.Visibility.Visible; graphGridLine.ButtonMeasureY.Visibility = System.Windows.Visibility.Visible; graphGridLine.ButtonMeasureY2.Visibility = System.Windows.Visibility.Visible; } else { graphGridLine.ButtonMeasureX.Visibility = System.Windows.Visibility.Hidden; graphGridLine.ButtonMeasureY.Visibility = System.Windows.Visibility.Hidden; graphGridLine.ButtonMeasureY2.Visibility = System.Windows.Visibility.Hidden; } //label x labelxcanvas.Children.Clear(); for (int i = 0; i < graphGridLine.LabelValueX.Length; i++) { if (_IsShowValueLabelX) graphGridLine.LabelValueX[i].Visibility = System.Windows.Visibility.Visible; else graphGridLine.LabelValueX[i].Visibility = System.Windows.Visibility.Hidden; labelxcanvas.Children.Add(graphGridLine.LabelValueX[i]); } if (_GraphInfo.ShowDateTimeAxisX) { UpdateLabelValueX(); } //label y labelycanvas.Children.Clear(); for (int i = 0; i < graphGridLine.LabelValueY.Length; i++) { if (_IsShowValueLabelY) graphGridLine.LabelValueY[i].Visibility = System.Windows.Visibility.Visible; else graphGridLine.LabelValueY[i].Visibility = System.Windows.Visibility.Hidden; labelycanvas.Children.Add(graphGridLine.LabelValueY[i]); } } } //add measuremodel to canvas if (this.gridMain.Children != null) { Canvas measurecontainer = null; Canvas currentlinecanvas = null; if (this.gridMain.Children.Count == 3) { measurecontainer = new Canvas(); currentlinecanvas = new Canvas(); // index 2 is legend extender this.gridMain.Children.Insert(2, measurecontainer); this.gridMain.Children.Insert(3, currentlinecanvas); } else if (this.gridMain.Children.Count == 5) { measurecontainer = this.gridMain.Children[2] as Canvas; currentlinecanvas = this.gridMain.Children[3] as Canvas; } //Measure Model if (measurecontainer != null) { if (measurecontainer.Children.Count >= 9) { ((Canvas)measurecontainer.Children[0]).MouseDown -= new MouseButtonEventHandler(this.UpperMeasureModelY_MouseDown); ((Canvas)measurecontainer.Children[1]).MouseDown -= new MouseButtonEventHandler(this.UpperMeasureModelY_MouseDown); ((Canvas)measurecontainer.Children[3]).MouseDown -= new MouseButtonEventHandler(this.UpperMeasureModelX_MouseDown); ((Canvas)measurecontainer.Children[4]).MouseDown -= new MouseButtonEventHandler(this.UpperMeasureModelX_MouseDown); ((Canvas)measurecontainer.Children[6]).MouseDown -= new MouseButtonEventHandler(this.UpperMeasureModelY2_MouseDown); ((Canvas)measurecontainer.Children[7]).MouseDown -= new MouseButtonEventHandler(this.UpperMeasureModelY2_MouseDown); } measurecontainer.Children.Clear(); double leftpos = (grid1.Width - _GraphModel.MeasureLabelY.Model.Width) / 2 + _GraphModel.GridLineData.Margin.Left; _GraphModel.MeasureLabelY.Model.Margin = new Thickness(leftpos, 0, 0, 0); AddMeasureModule(_IsMeasureYShown, "Y", measurecontainer); double toppos = (grid1.Height - _GraphModel.MeasureLabelX.Model.Height) / 2 + _GraphModel.GridLineData.Margin.Top; _GraphModel.MeasureLabelX.Model.Margin = new Thickness(0, toppos, 0, 0); AddMeasureModule(_IsMeasureXShown, "X", measurecontainer); double leftpos2 = (grid1.Width - _GraphModel.MeasureLabelY2.Model.Width) / 2 + _GraphModel.GridLineData.Margin.Left; _GraphModel.MeasureLabelY2.Model.Margin = new Thickness(leftpos2, 0, 0, 0); AddMeasureModule(_IsMeasureY2Shown, "Y2", measurecontainer); } //currentline model if (currentlinecanvas != null) { currentlinecanvas.Children.Clear(); if (!_IsCurrentLine) { _GraphModel.CurrentLineModel.Visibility = System.Windows.Visibility.Collapsed; } else { _GraphModel.CurrentLineModel.Visibility = System.Windows.Visibility.Visible; } currentlinecanvas.Children.Add(_GraphModel.CurrentLineModel); } } this.Background = new SolidColorBrush(_GraphModel.GraphBackgroundColor); this.Background.Freeze(); _IsCreateGrid = true; } catch (Exception ex) { _Log4NetClass.ShowError(ex.ToString(), "OnGridCreated"); } }
static void Main(string[] args) { WriteLine("Execution begins"); var fn = @"c:\DEMO\Data\train.csv"; var f = File.ReadLines(fn); var data = from t in f.Skip(1) let zz = t.Split(',').Select(float.Parse) select new Digit { Label = (int)zz.First(), Image = zz.Skip(1).Select(x => x / 256f).ToArray() }; var train = data.Take(40000).ToArray(); var test = data.Skip(40000).Take(1000).ToArray(); WriteLine("Creating network"); DeviceDescriptor device = DeviceDescriptor.CPUDevice; int inputDim = 784; int outputDim = 10; var inputShape = new NDShape(1, inputDim); var outputShape = new NDShape(1, outputDim); Variable features = Variable.InputVariable(inputShape, DataType.Float); Variable label = Variable.InputVariable(outputShape, DataType.Float); var W = new Parameter(new [] { outputDim, inputDim }, DataType.Float, CNTKLib.GlorotUniformInitializer(), device, "w"); var b = new Parameter(new [] { outputDim }, DataType.Float, 0, device, "b"); var z = CNTKLib.Times(W, features) + b; var loss = CNTKLib.CrossEntropyWithSoftmax(z, label); var evalError = CNTKLib.ClassificationError(z, label); CNTK.TrainingParameterScheduleDouble learningRatePerSample = new CNTK.TrainingParameterScheduleDouble(0.02, 1); IList <Learner> parameterLearners = new List <Learner>() { Learner.SGDLearner(z.Parameters(), learningRatePerSample) }; var trainer = Trainer.CreateTrainer(z, loss, evalError, parameterLearners); int minibatchSize = 64; int numMinibatchesToTrain = 500; var feat = new BatchSource <float[]>((from x in train select x.Image).ToArray(), minibatchSize); var labl = new BatchSource <float[]>((from x in train select x.Label.ToOneHot10(10).ToFloatArray()).ToArray(), minibatchSize); var gr = new List <float>(); // train the model for (int ep = 0; ep < numMinibatchesToTrain; ep++) { Value ft, lb; feat.MoveNext(); labl.MoveNext(); ft = Value.CreateBatchOfSequences <float>(inputShape, feat.Current, device); lb = Value.CreateBatchOfSequences <float>(outputShape, labl.Current, device); trainer.TrainMinibatch( new Dictionary <Variable, Value>() { { features, ft }, { label, lb } }, device); if (ep % 50 == 0) { var _loss = trainer.PreviousMinibatchLossAverage(); var _eval = trainer.PreviousMinibatchEvaluationAverage(); WriteLine($"Epoch={ep}, loss={_loss}, eval={_eval}"); gr.Add((float)_loss); } } var G = new GraphLib(); G.Plot(gr, System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line); int count = 0, correct = 0; // Test the model foreach (var x in test) { var imap = new Dictionary <Variable, Value> { { features, Value.CreateBatch(inputShape, x.Image, device) } }; var omap = new Dictionary <Variable, Value> { { z, null } }; z.Evaluate(imap, omap, device); var o = omap[z].GetDenseData <float>(z).First(); var res = o.MaxIndex(); WriteLine("{0} => {1}", x.Label, res); if (x.Label == res) { correct++; } count++; } WriteLine("Done, {0} of {1} correct ({2}%)", correct, count, (double)correct / (double)count * 100); Console.ReadKey(); }
public void Main() { WriteLine("Starting"); var G = new GraphLib(); WriteLine("Generating sample data"); // Создаём случайные точки двух типов float cx1 = -1.0f, cy1 = -1.0f; float cx2 = 1.0f, cy2 = 1.0f; var Rnd = new Random(); var x = new List <float>(); var y = new List <float>(); var lab = new List <float>(); var lab_oh = new List <float[]>(); for (int i = 0; i < 200; i++) { x.Add(cx1 + Rnd.Next(-2.0, 2.0)); y.Add(cy1 + Rnd.Next(-2.0, 2.0)); lab.Add(-1.0f); lab_oh.Add(new float[] { 1.0f, 0.0f }); x.Add(cx2 + Rnd.Next(-2.0, 2.0)); y.Add(cy2 + Rnd.Next(-2.0, 2.0)); lab.Add(1.0f); lab_oh.Add(new float[] { 0.0f, 1.0f }); } G.Plot(x, y); WriteLine("Doing data split"); var x_train = x.Take(150).ToArray(); var y_train = y.Take(150).ToArray(); var l_train = lab.Take(150).ToArray(); var l_oh_train = lab_oh.Take(150).ToArray(); var x_test = x.Skip(150).ToArray(); var y_test = y.Skip(150).ToArray(); var l_test = lab.Skip(150).ToArray(); var l_oh_test = lab_oh.Skip(150).ToArray(); WriteLine("Creating network"); DeviceDescriptor device = DeviceDescriptor.CPUDevice; // Create network model int inputDim = 2; int outputDim = 2; Variable features = Variable.InputVariable(inputDim.AsArray(), DataType.Float); Variable label = Variable.InputVariable(outputDim.AsArray(), DataType.Float); var W = new Parameter(new int[] { outputDim, inputDim }, DataType.Float, 1, device, "w"); var b = new Parameter(new int[] { outputDim }, DataType.Float, 0, device, "b"); var z = CNTKLib.Times(W, features) + b; var loss = CNTKLib.CrossEntropyWithSoftmax(z, label); var evalError = CNTKLib.ClassificationError(z, label); // prepare for training CNTK.TrainingParameterScheduleDouble learningRatePerSample = new CNTK.TrainingParameterScheduleDouble(0.02, 1); IList <Learner> parameterLearners = new List <Learner>() { Learner.SGDLearner(z.Parameters(), learningRatePerSample) }; var trainer = Trainer.CreateTrainer(z, loss, evalError, parameterLearners); int minibatchSize = 64; int numMinibatchesToTrain = 1000; int k = 0; // current position in dataset // train the model for (int ep = 0; ep < numMinibatchesToTrain; ep++) { Value f, l; var fa = new float[minibatchSize * inputDim]; var la = new float[minibatchSize * outputDim]; for (int j = 0; j < minibatchSize; j++) { fa[j * inputDim] = x_train[k]; fa[j * inputDim + 1] = y_train[k]; la[j * outputDim] = l_oh_train[k][0]; la[j * outputDim + 1] = l_oh_train[k][1]; k++; if (k == x_train.Length) { k = 0; } } f = Value.CreateBatch <float>(inputDim.AsArray(), fa, device); l = Value.CreateBatch <float>(outputDim.AsArray(), la, device); trainer.TrainMinibatch( new Dictionary <Variable, Value>() { { features, f }, { label, l } }, device); if (ep % 50 == 0) { var _loss = trainer.PreviousMinibatchLossAverage(); var _eval = trainer.PreviousMinibatchEvaluationAverage(); WriteLine($"Epoch={ep}, loss={_loss}, eval={_eval}"); } } WriteLine("Press any key to exit"); Console.ReadKey(); }