@@ -59,8 +59,8 @@ protected virtual bool RunWithImportedGraph(Session sess, Graph graph)
5959 Console . WriteLine ( "\t DONE " ) ;
6060
6161 var ( train_x , valid_x , train_y , valid_y ) = train_test_split ( x , y , test_size : 0.15f ) ;
62- Console . WriteLine ( "Training set size: " + train_x . Length ) ;
63- Console . WriteLine ( "Test set size: " + valid_x . Length ) ;
62+ Console . WriteLine ( "Training set size: " + train_x . len ) ;
63+ Console . WriteLine ( "Test set size: " + valid_x . len ) ;
6464
6565 Console . WriteLine ( "Import graph..." ) ;
6666 var meta_file = model_name + ".meta" ;
@@ -164,106 +164,70 @@ protected virtual bool RunWithBuiltGraph(Session session, Graph graph)
164164 }
165165
166166 // TODO: this originally is an SKLearn utility function. it randomizes train and test which we don't do here
167- //private (NDArray, NDArray, NDArray, NDArray) train_test_split(NDArray x, NDArray y, float test_size = 0.3f)
168- //{
169- // Console.WriteLine("Splitting in Training and Testing data...");
170- // int len = x.shape[0];
171- // //int classes = y.Data<int>().Distinct().Count();
172- // //int samples = len / classes;
173- // int train_size = (int)Math.Round(len * (1 - test_size));
174- // var train_x = x[new Slice(stop: train_size), new Slice()];
175- // var valid_x = x[new Slice(start: train_size + 1), new Slice()];
176- // var train_y = y[new Slice(stop: train_size)];
177- // var valid_y = y[new Slice(start: train_size + 1)];
178- // Console.WriteLine("\tDONE");
179- // return (train_x, valid_x, train_y, valid_y);
180- //}
181-
182- private ( int [ ] [ ] , int [ ] [ ] , int [ ] , int [ ] ) train_test_split ( int [ ] [ ] x , int [ ] y , float test_size = 0.3f )
183- {
184- Console . WriteLine ( "Splitting in Training and Testing data..." ) ;
185- var stopwatch = Stopwatch . StartNew ( ) ;
186- int len = x . Length ;
187- //int classes = y.Distinct().Count();
188- //int samples = len / classes;
189- int train_size = int . Parse ( ( len * ( 1 - test_size ) ) . ToString ( ) ) ;
190-
191- //var train_x = new List<int[]>();
192- //var valid_x = new List<int[]>();
193- //var train_y = new List<int>();
194- //var valid_y = new List<int>();
167+ private ( NDArray , NDArray , NDArray , NDArray ) train_test_split ( NDArray x , NDArray y , float test_size = 0.3f )
168+ {
169+ Console . WriteLine ( "Splitting in Training and Testing data..." ) ;
170+ int len = x . shape [ 0 ] ;
171+ //int classes = y.Data<int>().Distinct().Count();
172+ //int samples = len / classes;
173+ int train_size = ( int ) Math . Round ( len * ( 1 - test_size ) ) ;
174+ var train_x = x [ new Slice ( stop : train_size ) , new Slice ( ) ] ;
175+ var valid_x = x [ new Slice ( start : train_size + 1 ) , new Slice ( ) ] ;
176+ var train_y = y [ new Slice ( stop : train_size ) ] ;
177+ var valid_y = y [ new Slice ( start : train_size + 1 ) ] ;
178+ Console . WriteLine ( "\t DONE" ) ;
179+ return ( train_x , valid_x , train_y , valid_y ) ;
180+ }
195181
196- //for (int i = 0; i < classes; i++)
197- //{
198- // for (int j = 0; j < samples; j++)
199- // {
200- // int idx = i * samples + j;
201- // if (idx < train_size + samples * i)
202- // {
203- // train_x.Add(x[idx]);
204- // train_y.Add(y[idx]);
205- // }
206- // else
207- // {
208- // valid_x.Add(x[idx]);
209- // valid_y.Add(y[idx]);
210- // }
211- // }
212- //}
213- var random = new Random ( 17 ) ;
182+ //private (int[][], int[][], int[], int[]) train_test_split(int[][] x, int[] y, float test_size = 0.3f)
183+ //{
184+ // Console.WriteLine("Splitting in Training and Testing data...");
185+ // var stopwatch = Stopwatch.StartNew();
186+ // int len = x.Length;
187+ // int train_size = int.Parse((len * (1 - test_size)).ToString());
188+ // var random = new Random(17);
214189
215- // we collect indices of labels
216- var labels = new Dictionary < int , HashSet < int > > ( ) ;
217- var shuffled_indices = Shuffle < int > ( random , range ( len ) . ToArray ( ) ) ;
218- foreach ( var i in shuffled_indices )
219- {
220- var label = y [ i ] ;
221- if ( ! labels . ContainsKey ( i ) )
222- labels [ label ] = new HashSet < int > ( ) ;
223- labels [ label ] . Add ( i ) ;
224- }
190+ // // we collect indices of labels
191+ // var labels = new Dictionary<int, HashSet<int>>();
192+ // var shuffled_indices = random. Shuffle<int>(range(len).ToArray());
193+ // foreach (var i in shuffled_indices)
194+ // {
195+ // var label = y[i];
196+ // if (!labels.ContainsKey(i))
197+ // labels[label] = new HashSet<int>();
198+ // labels[label].Add(i);
199+ // }
225200
226- var train_x = new int [ train_size ] [ ] ;
227- var valid_x = new int [ len - train_size ] [ ] ;
228- var train_y = new int [ train_size ] ;
229- var valid_y = new int [ len - train_size ] ;
201+ // var train_x = new int[train_size][];
202+ // var valid_x = new int[len - train_size][];
203+ // var train_y = new int[train_size];
204+ // var valid_y = new int[len - train_size];
230205
231- FillWithShuffledLabels ( x , y , train_x , train_y , random , labels ) ;
232- FillWithShuffledLabels ( x , y , valid_x , valid_y , random , labels ) ;
206+ // FillWithShuffledLabels(x, y, train_x, train_y, random, labels);
207+ // FillWithShuffledLabels(x, y, valid_x, valid_y, random, labels);
233208
234- Console . WriteLine ( "\t DONE " + stopwatch . Elapsed ) ;
235- return ( train_x , valid_x , train_y , valid_y ) ;
236- }
209+ // Console.WriteLine("\tDONE " + stopwatch.Elapsed);
210+ // return (train_x, valid_x, train_y, valid_y);
211+ // }
237212
238213 private static void FillWithShuffledLabels ( int [ ] [ ] x , int [ ] y , int [ ] [ ] shuffled_x , int [ ] shuffled_y , Random random , Dictionary < int , HashSet < int > > labels )
239214 {
240215 int i = 0 ;
216+ var label_keys = labels . Keys . ToArray ( ) ;
241217 while ( i < shuffled_x . Length )
242218 {
243- foreach ( var key in Shuffle < int > ( random , labels . Keys . ToArray ( ) ) )
244- {
245- var set = labels [ key ] ;
246- var index = set . First ( ) ;
247- if ( set . Count == 0 )
248- labels . Remove ( key ) ; // remove the set as it is empty
249- shuffled_x [ i ] = x [ index ] ;
250- shuffled_y [ i ] = y [ index ] ;
251- i ++ ;
252- }
253- }
254- }
255-
256- public static T [ ] Shuffle < T > ( Random rng , T [ ] array )
257- {
258- int n = array . Length ;
259- while ( n > 1 )
260- {
261- int k = rng . Next ( n -- ) ;
262- T temp = array [ n ] ;
263- array [ n ] = array [ k ] ;
264- array [ k ] = temp ;
219+ var key = label_keys [ random . Next ( label_keys . Length ) ] ;
220+ var set = labels [ key ] ;
221+ var index = set . First ( ) ;
222+ if ( set . Count == 0 )
223+ {
224+ labels . Remove ( key ) ; // remove the set as it is empty
225+ label_keys = labels . Keys . ToArray ( ) ;
226+ }
227+ shuffled_x [ i ] = x [ index ] ;
228+ shuffled_y [ i ] = y [ index ] ;
229+ i ++ ;
265230 }
266- return array ;
267231 }
268232
269233 private IEnumerable < ( NDArray , NDArray , int ) > batch_iter ( NDArray inputs , NDArray outputs , int batch_size , int num_epochs )
0 commit comments