1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . Windows ;
4+ using ConvNetSharp . Flow ;
5+ using ConvNetSharp . Flow . Layers ;
6+ using ConvNetSharp . Flow . Training ;
7+ using ConvNetSharp . Utils . GraphVisualizer ;
8+ using ConvNetSharp . Volume ;
9+ using ConvNetSharp . Volume . Double ;
10+
11+ namespace FlowDemo
12+ {
13+ internal static class NetExampleSingle
14+ {
15+ private static int k ;
16+
17+ public static void Classify2DDemo ( )
18+ {
19+ var net = new Net < double > ( ) ;
20+ net . AddLayer ( new InputLayer < double > ( ) ) ;
21+ net . AddLayer ( new FullyConnLayer < double > ( 6 ) ) ;
22+ net . AddLayer ( new TanhLayer < double > ( ) ) ;
23+ net . AddLayer ( new FullyConnLayer < double > ( 2 ) ) ;
24+ net . AddLayer ( new TanhLayer < double > ( ) ) ;
25+ net . AddLayer ( new FullyConnLayer < double > ( 2 ) ) ;
26+ net . AddLayer ( new SoftmaxLayer < double > ( ) ) ;
27+
28+ // Data
29+ var data = new List < double [ ] > ( ) ;
30+ var labels = new List < int > ( ) ;
31+ data . Add ( new [ ] { - 0.4326 , 1.1909 } ) ;
32+ labels . Add ( 1 ) ;
33+ data . Add ( new [ ] { 3.0 , 4.0 } ) ;
34+ labels . Add ( 1 ) ;
35+ data . Add ( new [ ] { 0.1253 , - 0.0376 } ) ;
36+ labels . Add ( 1 ) ;
37+ data . Add ( new [ ] { 0.2877 , 0.3273 } ) ;
38+ labels . Add ( 1 ) ;
39+ data . Add ( new [ ] { - 1.1465 , 0.1746 } ) ;
40+ labels . Add ( 1 ) ;
41+ data . Add ( new [ ] { 1.8133 , 1.0139 } ) ;
42+ labels . Add ( 0 ) ;
43+ data . Add ( new [ ] { 2.7258 , 1.0668 } ) ;
44+ labels . Add ( 0 ) ;
45+ data . Add ( new [ ] { 1.4117 , 0.5593 } ) ;
46+ labels . Add ( 0 ) ;
47+ data . Add ( new [ ] { 4.1832 , 0.3044 } ) ;
48+ labels . Add ( 0 ) ;
49+ data . Add ( new [ ] { 1.8636 , 0.1677 } ) ;
50+ labels . Add ( 0 ) ;
51+ data . Add ( new [ ] { 0.5 , 3.2 } ) ;
52+ labels . Add ( 1 ) ;
53+ data . Add ( new [ ] { 0.8 , 3.2 } ) ;
54+ labels . Add ( 1 ) ;
55+ data . Add ( new [ ] { 1.0 , - 2.2 } ) ;
56+ labels . Add ( 1 ) ;
57+ var n = labels . Count ;
58+
59+ var trainer = new SgdTrainer < double > ( net , 0.01 ) ;
60+
61+ do
62+ {
63+ Classify2DUpdate ( n , data , trainer , labels ) ;
64+ } while ( ! Console . KeyAvailable ) ;
65+
66+ // Display graph
67+ var vm = new ViewModel < double > ( net . Cost ) ;
68+ var app = new Application ( ) ;
69+ app . Run ( new GraphControl { DataContext = vm } ) ;
70+ }
71+
72+ private static void Classify2DUpdate ( int n , List < double [ ] > data , TrainerBase < double > trainer , List < int > labels )
73+ {
74+ var avloss = 0.0 ;
75+ var netx = BuilderInstance . Volume . SameAs ( new Shape ( 1 , 1 , 2 , n ) ) ;
76+ var hotLabels = BuilderInstance . Volume . SameAs ( new Shape ( 1 , 1 , 2 , n ) ) ;
77+
78+ for ( var ix = 0 ; ix < n ; ix ++ )
79+ {
80+ hotLabels . Set ( 0 , 0 , labels [ ix ] , ix , 1.0 ) ;
81+
82+ netx . Set ( 0 , 0 , 0 , ix , data [ ix ] [ 0 ] ) ;
83+ netx . Set ( 0 , 0 , 1 , ix , data [ ix ] [ 1 ] ) ;
84+ }
85+
86+ for ( var iters = 0 ; iters < 50 ; iters ++ )
87+ {
88+ trainer . Train ( netx , hotLabels ) ;
89+ avloss += trainer . Loss ;
90+ }
91+
92+ avloss /= 50.0 ;
93+ Console . WriteLine ( k ++ + " Loss:" + avloss ) ;
94+ }
95+ }
96+ }
0 commit comments