Пример #1
0
 /// <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);
 }
Пример #2
0
        /// <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");
            }
        }
Пример #3
0
        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();
        }
Пример #4
0
        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();
        }