tlearn 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/ext/tlearn/tlearn_ext.c +44 -188
  2. metadata +2 -2
@@ -122,35 +122,39 @@ extern int load_wts();
122
122
  extern int save_wts();
123
123
  extern int act_nds();
124
124
 
125
- extern int optind;
126
-
127
125
 
128
126
  int run_training(nsweeps, file_path, current_weights_output)
129
127
  long nsweeps;
130
128
  char *file_path;
131
129
  float *current_weights_output;
132
130
  {
133
- int argc = 1;
134
- char *argv[argc];
135
- argv[0] = "tlearn";
136
131
  int status;
137
-
132
+ int learning = 1;
133
+ int loadflag = 0;
134
+
138
135
  backprop = 0;
139
- status = run(argc,argv, nsweeps, file_path, backprop, current_weights_output);
136
+ status = run(learning, loadflag, nsweeps, file_path, backprop, current_weights_output);
140
137
 
141
138
  return(status);
142
139
  }
143
140
 
144
- int run_fitness(argc,argv, nsweeps, file_path, current_weights_output)
145
- int argc;
146
- char **argv;
141
+ int run_fitness(nsweeps,file_path, current_weights_output)
147
142
  long nsweeps;
148
143
  char *file_path;
149
144
  float *current_weights_output;
150
145
  {
151
146
  int status;
152
147
  backprop = 1;
153
- status = run(argc,argv, nsweeps, file_path, backprop, current_weights_output);
148
+ char weights[255];
149
+
150
+ strcpy(weights, file_path);
151
+ strcat(weights, ".wts");
152
+ strcpy(loadfile,weights);
153
+
154
+ int learning = 0;
155
+ int loadflag = 1;
156
+
157
+ status = run(learning, loadflag, nsweeps, file_path, backprop, current_weights_output);
154
158
 
155
159
  return(status);
156
160
  }
@@ -179,7 +183,6 @@ void post_cleanup(){
179
183
  }
180
184
 
181
185
  void cleanup_horrid_globals(){
182
- optind = 1;
183
186
  sweep = 0;
184
187
  tsweeps = 0;
185
188
  rate = .1;
@@ -213,15 +216,13 @@ void cleanup_horrid_globals(){
213
216
  data = 0;
214
217
  ngroups = 0;
215
218
  root[0] = 0;
216
- loadfile[0] = 0;
217
-
218
219
  otarget = 0;
219
220
  start = 1;
220
221
  }
221
222
 
222
- int run(argc,argv, nsweeps, file_path, backprop, current_weights_output)
223
- int argc;
224
- char **argv;
223
+ int run(learning, loadflag, nsweeps, file_path, backprop, current_weights_output)
224
+ int learning;
225
+ int loadflag;
225
226
  long nsweeps;
226
227
  char *file_path;
227
228
  int backprop;
@@ -238,8 +239,8 @@ int run(argc,argv, nsweeps, file_path, backprop, current_weights_output)
238
239
 
239
240
  long ttime = 0; /* number of sweeps since time = 0 */
240
241
  long utime = 0; /* number of sweeps since last update_weights */
241
- long tmax = 0; /* maximum number of sweeps (given in .data) */
242
- long umax = 0; /* update weights every umax sweeps */
242
+ long tmax = 0; /* maximum number of sweeps (given in .data) */
243
+ long umax = 0; /* update weights every umax sweeps */
243
244
  long rtime = 0; /* number of sweeps since last rms_report */
244
245
  long check = 0; /* output weights every "check" sweeps */
245
246
  long ctime = 0; /* number of sweeps since last check */
@@ -249,19 +250,16 @@ int run(argc,argv, nsweeps, file_path, backprop, current_weights_output)
249
250
  int j;
250
251
  int k;
251
252
  int nticks = 1; /* number of internal clock ticks per input */
252
- int ticks = 0; /* counter for ticks */
253
- int learning = 1; /* flag for learning */
254
- int reset = 0; /* flag for resetting net */
255
- int verify = 0; /* flag for printing output values */
256
- int probe = 0; /* flag for printing selected node values */
253
+ int ticks = 0; /* counter for ticks */
254
+ int reset = 0; /* flag for resetting net */
255
+
257
256
  int command = 1; /* flag for writing to .cmd file */
258
- int loadflag = 0; /* flag for loading initial weights from file */
259
- int iflag = 0; /* flag for -I */
260
- int tflag = 0; /* flag for -T */
261
- int rflag = 0; /* flag for -x */
262
- int seed = 0; /* seed for random() */
257
+ int iflag = 0; /* flag for -I */
258
+ int tflag = 0; /* flag for -T */
259
+ int rflag = 0; /* flag for -x */
260
+ int seed = 0; /* seed for random() */
263
261
 
264
- float err = 0.; /* cumulative ss error */
262
+ float err = 0.; /* cumulative ss error */
265
263
  float ce_err = 0.; /* cumulate cross_entropy error */
266
264
 
267
265
  float *w;
@@ -272,110 +270,11 @@ int run(argc,argv, nsweeps, file_path, backprop, current_weights_output)
272
270
 
273
271
  struct cf *ci;
274
272
 
275
- char cmdfile[128]; /* filename for logging runs of program */
276
273
  char cfile[128]; /* filename for .cf file */
277
274
 
278
- FILE *cmdfp;
279
-
280
- #ifdef THINK_C
281
- argc = ccommand(&argv);
282
- #endif /* THINK_C */
283
-
284
- signal(SIGINT, intr);
285
- #ifndef ibmpc
286
- #ifndef THINK_C
287
- signal(SIGHUP, intr);
288
- signal(SIGQUIT, intr);
289
- signal(SIGKILL, intr);
290
- #endif /* THINK_C */
291
- #endif
292
-
293
- #ifndef ibmpc
294
- exp_init();
295
- #endif
296
-
297
275
  root[0] = 0;
298
276
  strcpy(root, file_path);
299
277
 
300
- while ((c = getopt(argc, argv, "f:hil:m:n:r:s:tC:E:ILM:PpRS:TU:VvXB:H:D:")) != EOF) {
301
- switch (c) {
302
- case 'C':
303
- check = (long) atol(optarg);
304
- ctime = check;
305
- break;
306
- case 'i':
307
- command = 0;
308
- break;
309
- case 'l':
310
- loadflag = 1;
311
- strcpy(loadfile,optarg);
312
- break;
313
- case 'm':
314
- momentum = (float) atof(optarg);
315
- break;
316
- case 'n':
317
- nticks = (int) atoi(optarg);
318
- break;
319
- case 'P':
320
- learning = 0;
321
- /* drop through deliberately */
322
- case 'p':
323
- probe = 1;
324
- break;
325
- case 'r':
326
- rate = (double) atof(optarg);
327
- break;
328
- case 't':
329
- teacher = 1;
330
- break;
331
- case 'V':
332
- learning = 0;
333
- /* drop through deliberately */
334
- case 'v':
335
- verify = 1;
336
- break;
337
- case 'X':
338
- rflag = 1;
339
- break;
340
- case 'E':
341
- rms_report = (long) atol(optarg);
342
- break;
343
- case 'I':
344
- iflag = 1;
345
- break;
346
- case 'M':
347
- criterion = (float) atof(optarg);
348
- break;
349
- case 'R':
350
- randomly = 1;
351
- break;
352
- case 'S':
353
- seed = atoi(optarg);
354
- break;
355
- case 'T':
356
- tflag = 1;
357
- break;
358
- case 'U':
359
- umax = atol(optarg);
360
- break;
361
- case 'B':
362
- init_bias = atof(optarg);
363
- break;
364
- /*
365
- * if == 1, use cross-entropy as error;
366
- * if == 2, also collect cross-entropy stats.
367
- */
368
- case 'H':
369
- ce = atoi(optarg);
370
- break;
371
- case '?':
372
- case 'h':
373
- default:
374
- usage();
375
- return(2);
376
- break;
377
- }
378
- }
379
278
  if (nsweeps == 0){
380
279
  perror("ERROR: No -s specified");
381
280
  return(1);
@@ -388,26 +287,6 @@ int run(argc,argv, nsweeps, file_path, backprop, current_weights_output)
388
287
  return(1);
389
288
  }
390
289
 
391
- if (command){
392
- sprintf(cmdfile, "%s.cmd", root);
393
- cmdfp = fopen(cmdfile, "a");
394
- if (cmdfp == NULL) {
395
- perror("ERROR: Can't open .cmd file");
396
- return(1);
397
- }
398
- for (i = 1; i < argc; i++)
399
- fprintf(cmdfp,"%s ",argv[i]);
400
- fprintf(cmdfp,"\n");
401
- fflush(cmdfp);
402
- }
403
-
404
- #ifndef THINK_C
405
- sprintf(cmdfile, "%s.pid", root);
406
- fpid = fopen(cmdfile, "w");
407
- fprintf(fpid, "%d\n", getpid());
408
- fclose(fpid);
409
- #endif /* THINK_C */
410
-
411
290
  sprintf(cfile, "%s.cf", root);
412
291
  cfp = fopen(cfile, "r");
413
292
  if (cfp == NULL) {
@@ -421,12 +300,14 @@ int run(argc,argv, nsweeps, file_path, backprop, current_weights_output)
421
300
  get_connections();
422
301
  get_special();
423
302
 
424
- if (!seed)
303
+ if (!seed){
425
304
  seed = time((time_t *) NULL);
305
+ }
426
306
  srandom(seed);
427
307
 
428
- if (loadflag)
308
+ if (loadflag){
429
309
  load_wts();
310
+ }
430
311
  else {
431
312
  for (i = 0; i < nn; i++){
432
313
  w = *(wt + i);
@@ -479,22 +360,24 @@ int run(argc,argv, nsweeps, file_path, backprop, current_weights_output)
479
360
 
480
361
  nsweeps += tsweeps;
481
362
  for (sweep = tsweeps; sweep < nsweeps; sweep++){
482
-
483
363
  for (ticks = 0; ticks < nticks; ticks++){
484
364
 
485
365
  update_reset(ttime,ticks,rflag,&tmax,&reset);
486
366
 
487
367
  if (reset){
488
- if (backprop == 0)
368
+ if (backprop == 0){
489
369
  reset_network(zold,znew,pold,pnew);
490
- else
370
+ }
371
+ else{
491
372
  reset_bp_net(zold,znew);
373
+ }
492
374
  }
493
375
 
494
376
  update_inputs(zold,ticks,iflag,&tmax,&linput);
495
377
 
496
- if (learning || teacher || (rms_report != 0))
378
+ if (learning || teacher || (rms_report != 0)){
497
379
  update_targets(target,ttime,ticks,tflag,&tmax);
380
+ }
498
381
 
499
382
  act_nds(zold,zmem,znew,wt,linput,target);
500
383
 
@@ -504,42 +387,27 @@ int run(argc,argv, nsweeps, file_path, backprop, current_weights_output)
504
387
  comp_deltas(pold,pnew,wt,dwt,zold,znew,error);
505
388
  if (learning && (backprop == 1))
506
389
  comp_backprop(wt,dwt,zold,zmem,target,error,linput);
507
-
508
- if (probe)
509
- print_nodes(zold);
510
390
  }
511
- if (verify){
391
+ if (learning == 0){
512
392
  for (i = 0; i < no; i++){
513
393
  current_weights_output[i] = zold[ni+outputs[i]];
514
394
  }
515
395
  }
516
- if (rms_report && (++rtime >= rms_report)){
517
- rtime = 0;
518
- if (ce == 2)
519
- print_error(&ce_err);
520
- else
521
- print_error(&err);
522
- }
523
396
 
524
- if (check && (++ctime >= check)){
525
- ctime = 0;
526
- save_wts();
527
- }
528
-
529
- if (++ttime >= tmax)
397
+ if (++ttime >= tmax){
530
398
  ttime = 0;
531
-
399
+ }
532
400
  if (learning && (++utime >= umax)){
533
401
  utime = 0;
534
402
  update_weights(wt,dwt,winc);
535
403
  }
536
404
 
537
405
  }
538
- if (learning)
406
+ if (learning){
539
407
  save_wts();
408
+ }
540
409
 
541
410
  return(0);
542
-
543
411
  }
544
412
 
545
413
  /* -- Ruby interface -- */
@@ -561,9 +429,6 @@ static VALUE tlearn_train(VALUE self, VALUE config) {
561
429
  }
562
430
 
563
431
  static VALUE tlearn_fitness(VALUE self, VALUE config) {
564
- int tlearn_args_count = 4;
565
- char *tlearn_args[tlearn_args_count];
566
-
567
432
  VALUE ruby_array = rb_ary_new();
568
433
  VALUE file_root_value = rb_hash_aref(config, ID2SYM(rb_intern("file_root")));
569
434
 
@@ -571,20 +436,11 @@ static VALUE tlearn_fitness(VALUE self, VALUE config) {
571
436
  long nsweeps = NUM2DBL(sweeps_value);
572
437
 
573
438
  char *file_root = StringValueCStr(file_root_value);
574
- char weights[strlen(file_root) + strlen(".wts")];
575
-
576
439
  float *result_weights;
577
440
 
578
- strcpy(weights, file_root);
579
-
580
- tlearn_args[0] = "tlearn_fitness";
581
- tlearn_args[1] = "-l";
582
- tlearn_args[2] = strcat(weights, ".wts");
583
- tlearn_args[3] = "-V";
584
-
585
441
  float current_weights_output[6];
586
442
 
587
- int failure = run_fitness(tlearn_args_count, tlearn_args, nsweeps, file_root, current_weights_output);
443
+ int failure = run_fitness(nsweeps, file_root, current_weights_output);
588
444
 
589
445
  post_cleanup();
590
446
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tlearn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-26 00:00:00.000000000Z
12
+ date: 2012-11-03 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description:
15
15
  email: