Changeset 40371 for trunk/Ohana/src/opihi/cmd.data/test/nnet.sh
- Timestamp:
- Mar 16, 2018, 4:06:05 PM (8 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/cmd.data/test/nnet.sh (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/test/nnet.sh
r40335 r40371 1 1 2 macro test 3 4 nnet create t0 5 10 15 3 5 nnet list 6 7 nnet create t1 6 4 5 8 nnet list 9 10 nnet create t1 5 8 11 nnet list 12 13 # vlist v0 1 2 3 4 5 14 vlist v1 1 2 3 4 5 6 7 8 15 16 mcreate m1 5 8 17 18 # generate a weight vector of length v1[] 19 vlist my 9 8 7 6 5 4 3 2 20 21 for i 0 5 22 mset m1 my -y $i 23 set my = my + $i 24 end 25 26 # set weights and biases 27 nnet set t1 m1 v1 28 29 # get weights and biases 30 nnet get t1 M1 V1 31 32 # compare 33 set dv = v1 - V1 34 vstat dv 35 36 set dm = m1 - M1 37 stat dm 38 39 end 40 41 macro test2 42 43 nnet create t1 2 2 44 nnet list 45 46 # output = sigmoid (sum(weight[i][j] * input[i]) + bias[j]) 47 48 # biases of 49 vlist v1 0.8 0.2 50 51 mcreate m1 2 2 52 m1[0][0] = 0.5 53 m1[1][0] = 0.1 54 m1[0][1] = -0.2 55 m1[1][1] = 0.8 56 57 # set weights and biases 58 nnet set t1 m1 v1 59 60 vlist vin0 1 2 61 vlist vin1 2 1 62 63 # get weights and biases 64 nnet apply t1 vin0 vin1 vout0 vout1 65 66 vlist z0 {m1[0][0]*vin0[0] + m1[1][0]*vin1[0] + v1[0]} {m1[0][0]*vin0[1] + m1[1][0]*vin1[1] + v1[0]} 67 vlist z1 {m1[0][1]*vin0[0] + m1[1][1]*vin1[0] + v1[1]} {m1[0][1]*vin0[1] + m1[1][1]*vin1[1] + v1[1]} 68 set t0 = 1 / (1 + exp(-1*z0)) 69 set t1 = 1 / (1 + exp(-1*z1)) 70 71 # compare 72 set dt0 = t0 - vout0 73 vstat dt0 74 75 set dt1 = t1 - vout1 76 vstat dt1 77 end 78 79 macro test3 80 81 memory all 82 83 nnet create t0 5 10 15 3 84 nnet list 85 86 nnet create t1 5 8 87 nnet list 88 89 # vlist v0 1 2 3 4 5 90 vlist v1 1 2 3 4 5 6 7 8 91 92 mcreate m1 5 8 93 94 # generate a weight vector of length v1[] 95 vlist my 9 8 7 6 5 4 3 2 96 97 for i 0 5 98 mset m1 my -y $i 99 set my = my + $i 100 end 101 102 # set weights and biases 103 nnet set t1 m1 v1 104 105 # get weights and biases 106 nnet get t1 M1 V1 107 108 # compare 109 set dv = v1 - V1 110 vstat dv 111 112 set dm = m1 - M1 113 stat dm 114 115 nnet delete t0 116 nnet delete t1 117 118 delete m1 M1 dm 119 delete v1 V1 dv my 120 121 vectors 122 buffers 123 124 memory all 125 end 126 127 macro test.simple 2 macro test.python 128 3 if ($0 != 4) 129 echo "USAGE: test. simple(Nmini) (Nepoch) (eta)"4 echo "USAGE: test.python (Nmini) (Nepoch) (eta)" 130 5 break 131 6 end 7 8 # test I/O 9 10 create x 0 100 11 set y = dsin(x/10) 12 write test.dat x y 13 break 132 14 133 15 local Nmini Nepoch eta … … 187 69 end 188 70 71 macro test 72 73 nnet create t0 5 10 15 3 74 nnet list 75 76 nnet create t1 6 4 5 77 nnet list 78 79 nnet create t1 5 8 80 nnet list 81 82 # vlist v0 1 2 3 4 5 83 vlist v1 1 2 3 4 5 6 7 8 84 85 mcreate m1 5 8 86 87 # generate a weight vector of length v1[] 88 vlist my 9 8 7 6 5 4 3 2 89 90 for i 0 5 91 mset m1 my -y $i 92 set my = my + $i 93 end 94 95 # set weights and biases 96 nnet set t1 m1 v1 97 98 # get weights and biases 99 nnet get t1 M1 V1 100 101 # compare 102 set dv = v1 - V1 103 vstat dv 104 105 set dm = m1 - M1 106 stat dm 107 108 end 109 110 macro test2 111 112 nnet create t1 2 2 113 nnet list 114 115 # output = sigmoid (sum(weight[i][j] * input[i]) + bias[j]) 116 117 # biases of 118 vlist v1 0.8 0.2 119 120 mcreate m1 2 2 121 m1[0][0] = 0.5 122 m1[1][0] = 0.1 123 m1[0][1] = -0.2 124 m1[1][1] = 0.8 125 126 # set weights and biases 127 nnet set t1 m1 v1 128 129 vlist vin0 1 2 130 vlist vin1 2 1 131 132 # get weights and biases 133 nnet apply t1 vin0 vin1 vout0 vout1 134 135 vlist z0 {m1[0][0]*vin0[0] + m1[1][0]*vin1[0] + v1[0]} {m1[0][0]*vin0[1] + m1[1][0]*vin1[1] + v1[0]} 136 vlist z1 {m1[0][1]*vin0[0] + m1[1][1]*vin1[0] + v1[1]} {m1[0][1]*vin0[1] + m1[1][1]*vin1[1] + v1[1]} 137 set t0 = 1 / (1 + exp(-1*z0)) 138 set t1 = 1 / (1 + exp(-1*z1)) 139 140 # compare 141 set dt0 = t0 - vout0 142 vstat dt0 143 144 set dt1 = t1 - vout1 145 vstat dt1 146 end 147 148 macro test3 149 150 memory all 151 152 nnet create t0 5 10 15 3 153 nnet list 154 155 nnet create t1 5 8 156 nnet list 157 158 # vlist v0 1 2 3 4 5 159 vlist v1 1 2 3 4 5 6 7 8 160 161 mcreate m1 5 8 162 163 # generate a weight vector of length v1[] 164 vlist my 9 8 7 6 5 4 3 2 165 166 for i 0 5 167 mset m1 my -y $i 168 set my = my + $i 169 end 170 171 # set weights and biases 172 nnet set t1 m1 v1 173 174 # get weights and biases 175 nnet get t1 M1 V1 176 177 # compare 178 set dv = v1 - V1 179 vstat dv 180 181 set dm = m1 - M1 182 stat dm 183 184 nnet delete t0 185 nnet delete t1 186 187 delete m1 M1 dm 188 delete v1 V1 dv my 189 190 vectors 191 buffers 192 193 memory all 194 end 195 196 macro test.simple 197 if ($0 != 4) 198 echo "USAGE: test.simple (Nmini) (Nepoch) (eta)" 199 break 200 end 201 202 local Nmini Nepoch eta 203 $Nmini = $1 204 $Nepoch = $2 205 $eta = $3 206 207 # create a nnet with just 2 inputs and 2 outputs 208 nnet create t1 2 2 209 210 # biases: 211 vlist v1 0.5 0.0 212 213 # weights 214 mcreate m1 2 2 215 m1[0][0] = 0.5 216 m1[1][0] = -0.2 217 m1[0][1] = -0.5 218 m1[1][1] = 0.2 219 220 # set weights and biases 221 nnet set t1 m1 v1 222 223 # generate an input set spanning the range -5 to +5 224 225 create n 0 1000 226 set x0 = 10*rnd(n) - 5.0 227 set x1 = 10*rnd(n) - 5.0 228 229 # get output vectors the these input vectors 230 nnet apply t1 x0 x1 y0 y1 231 232 # -large-weight-initializer : revert to original implementation 233 # nnet create tn 2 2 234 nnet create tn 2 2 -large-weight-initializer 235 236 # -quadratic-cost : revert to original implementation 237 nnet train tn x0 x1 y0 y1 -Nmini $Nmini -Nepoch $Nepoch -eta $eta -lambda 0.0 -quadratic-cost -resid resid -result result 238 # nnet train tn x0 x1 y0 y1 -Nmini $Nmini -Nepoch $Nepoch -eta $eta -lambda 0.0 239 # nnet train tn x0 x1 y0 y1 -Nmini $Nmini -Nepoch $Nepoch -eta $eta -lambda 2.0 240 241 nnet apply tn x0 x1 Y0 Y1 242 243 set dy0 = y0 - Y0 244 set dy1 = y1 - Y1 245 246 vstat dy0 247 $yp = $MAX 248 $ym = $MIN 249 250 vstat dy1 251 $yp = max ($MAX , $yp) 252 $ym = min ($MIN , $ym) 253 $yp = 0.02; $ym = -0.02 254 255 style -pt circle -sz 2; lim x0 $ym $yp; clear; box; plot -c blue x0 dy0; plot -c red x0 dy1 256 end 257 189 258 macro test.bilevel 190 259 if ($0 != 4) … … 284 353 end 285 354 355 macro test.bilevel.small 356 if ($0 != 4) 357 echo "USAGE: test.bilevel (Nmini) (Nepoch) (eta)" 358 break 359 end 360 361 local Nmini Nepoch eta 362 $Nmini = $1 363 $Nepoch = $2 364 $eta = $3 365 366 # create a nnet with just 2 inputs and 2 outputs 367 nnet create t1 2 3 2 368 369 # biases: 370 vlist v1 -0.2 0.0 0.2 371 vlist v2 -0.3 0.3 372 373 # weights 374 mcreate m1 2 3 375 m1[0][0] = 0.2 376 m1[1][0] = -0.2 377 m1[0][1] = -0.6 378 m1[1][1] = 0.5 379 m1[0][2] = -0.2 380 m1[1][2] = 0.2 381 382 mcreate m2 3 2 383 m2[0][0] = -0.6 384 m2[1][0] = -0.4 385 m2[2][0] = -0.5 386 387 m2[0][1] = -0.2 388 m2[1][1] = -0.5 389 m2[2][1] = 0.1 390 391 # set weights and biases 392 nnet set t1 m1 v1 m2 v2 393 394 # generate an input set spanning the range -5 to +5 395 396 create n 0 1000 397 set x0 = 10*rnd(n) - 5.0 398 set x1 = 10*rnd(n) - 5.0 399 400 # get output vectors the these input vectors 401 nnet apply t1 x0 x1 y0 y1 402 403 # nnet create tn 3 4 3 -large-weight-initializer 404 nnet create tn 2 3 2 405 406 # make the starting point close to the solution 407 m2[0][0] = -0.58 408 # v2[1] = 0.25 409 nnet set tn m1 v1 m2 v2 410 411 # nnet train tn x0 x1 x2 y0 y1 y2 -Nmini $Nmini -Nepoch $Nepoch -eta $eta -lambda 0.1 412 # nnet train tn x0 x1 y0 y1 -Nmini $Nmini -Nepoch $Nepoch -eta $eta -lambda 0.0 -quadratic-cost -resid dS -result result 413 nnet train tn x0 x1 y0 y1 -Nmini $Nmini -Nepoch $Nepoch -eta $eta -lambda 0.0 -resid dS -result result 414 415 nnet apply tn x0 x1 Y0 Y1 416 417 set dy0 = y0 - Y0 418 set dy1 = y1 - Y1 419 420 vstat dy0 421 $yp = $MAX 422 $ym = $MIN 423 424 vstat dy1 425 $yp = max ($MAX , $yp) 426 $ym = min ($MIN , $ym) 427 428 dev -n 0 429 style -pt circle -sz 2; 430 lim x0 $ym $yp; clear; box; 431 plot -c blue x0 dy0; 432 plot -c red x0 dy1 433 434 set n = ramp(dS) 435 lim -n 1 n dS; clear; box; plot n dS 436 end 437 438 macro test.bilevel.grid.wt 439 if ($0 != 4) 440 echo "USAGE: test.bilevel.grid.wt (level) (x) (y)" 441 break 442 end 443 444 local Level ix iy 445 $Level = $1 446 $ix = $2 447 $iy = $3 448 449 # create a nnet with just 2 inputs and 2 outputs 450 nnet create t1 2 3 2 451 452 # biases: 453 vlist v1 -0.2 0.0 0.2 454 vlist v2 -0.3 0.3 455 456 # weights 457 mcreate m1 2 3 458 m1[0][0] = 0.2 459 m1[1][0] = -0.2 460 m1[0][1] = -0.6 461 m1[1][1] = 0.5 462 m1[0][2] = -0.2 463 m1[1][2] = 0.2 464 465 mcreate m2 3 2 466 m2[0][0] = -0.6 467 m2[1][0] = -0.4 468 m2[2][0] = -0.5 469 470 m2[0][1] = -0.2 471 m2[1][1] = -0.5 472 m2[2][1] = 0.1 473 474 # set weights and biases 475 nnet set t1 m1 v1 m2 v2 476 477 # generate an input set spanning the range -5 to +5 478 479 create n 0 1000 480 set x0 = 10*rnd(n) - 5.0 481 set x1 = 10*rnd(n) - 5.0 482 483 # get output vectors from these input vectors 484 nnet apply t1 x0 x1 y0 y1 485 486 # create a test nnet 487 nnet create tn 2 3 2 488 489 # 1D chi-square grid about truth 490 491 set M1 = m1 492 set M2 = m2 493 set V1 = v1 494 set V2 = v2 495 496 # disturb one element to see cross terms 497 M2[0][0] = -0.58 498 499 $To = M$Level[$ix][$iy] 500 501 delete -q value svec0 svec1 sigvec 502 for frac 0.90 1.10 0.005 503 M$Level[$ix][$iy] = $frac * $To 504 505 nnet set tn M1 V1 M2 V2 506 nnet apply tn x0 x1 Y0 Y1 507 508 set dy0 = y0 - Y0 509 set dy1 = y1 - Y1 510 511 vstat -q dy0 512 $S0 = $SIGMA 513 514 vstat -q dy1 515 $S1 = $SIGMA 516 517 concat {$frac * $To} value 518 concat $S0 svec0 519 concat $S1 svec1 520 521 concat {sqrt($S0^2 + $S1^2)} sigvec 522 end 523 524 vstat -q sigvec 525 526 lim -n 1 value -0.0001 $MAX; clear; box; 527 plot -c black value sigvec; 528 plot -c blue value svec0 -pt ocir -sz 2 ; 529 plot -c red value svec1 -pt ocir -sz 2 530 end 531 532 macro test.bilevel.grid.wt.2d 533 if ($0 != 7) 534 echo "USAGE: test.bilevel.grid.wt.2d (level) (x) (y) (level) (x) (y)" 535 break 536 end 537 538 local LevelA ixA iyA LevelB ixB iyB 539 $LevelA = $1 540 $ixA = $2 541 $iyA = $3 542 $LevelB = $4 543 $ixB = $5 544 $iyB = $6 545 546 # create a nnet with just 2 inputs and 2 outputs 547 nnet create t1 2 3 2 548 549 # biases: 550 vlist v1 -0.2 0.0 0.2 551 vlist v2 -0.3 0.3 552 553 # weights 554 mcreate m1 2 3 555 m1[0][0] = 0.2 556 m1[1][0] = -0.2 557 m1[0][1] = -0.6 558 m1[1][1] = 0.5 559 m1[0][2] = -0.2 560 m1[1][2] = 0.2 561 562 mcreate m2 3 2 563 m2[0][0] = -0.6 564 m2[1][0] = -0.4 565 m2[2][0] = -0.5 566 567 m2[0][1] = -0.2 568 m2[1][1] = -0.5 569 m2[2][1] = 0.1 570 571 # set weights and biases 572 nnet set t1 m1 v1 m2 v2 573 574 # generate an input set spanning the range -5 to +5 575 576 create n 0 1000 577 set x0 = 10*rnd(n) - 5.0 578 set x1 = 10*rnd(n) - 5.0 579 580 # get output vectors from these input vectors 581 nnet apply t1 x0 x1 y0 y1 582 583 # create a test nnet 584 nnet create tn 2 3 2 585 586 # 1D chi-square grid about truth 587 588 set M1 = m1 589 set M2 = m2 590 set V1 = v1 591 set V2 = v2 592 593 # disturb one element to see cross terms 594 M2[0][0] = -0.58 595 596 $ToA = M$LevelA[$ixA][$iyA] 597 $ToB = M$LevelB[$ixB][$iyB] 598 599 delete -q valueA valueB sigvec 600 601 mcreate sigbuf 41 41 602 603 $ix = 0 604 for fracA 0.90 1.10 0.005 605 M$LevelA[$ixA][$iyA] = $fracA * $ToA 606 607 $iy = 0 608 for fracB 0.90 1.10 0.005 609 610 M$LevelB[$ixB][$iyB] = $fracB * $ToB 611 612 nnet set tn M1 V1 M2 V2 613 nnet apply tn x0 x1 Y0 Y1 614 615 set dy0 = y0 - Y0 616 set dy1 = y1 - Y1 617 618 vstat -q dy0 619 $S0 = $SIGMA 620 621 vstat -q dy1 622 $S1 = $SIGMA 623 624 $sigval = sqrt($S0^2 + $S1^2) 625 concat {$fracA * $ToA} valueA 626 concat {$fracB * $ToB} valueB 627 concat $sigval sigvec 628 629 sigbuf[$ix][$iy] = $sigval 630 $iy ++ 631 end 632 $ix ++ 633 end 634 635 stat -q sigbuf 636 tv -n tv sigbuf $MIN {$MAX - $MIN} 637 end
Note:
See TracChangeset
for help on using the changeset viewer.
