Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.42 KB | None | 0 0
  1. void gradient(INT e1_a, INT e2_a, INT rel_a, INT e1_b, INT e2_b, INT rel_b) {
  2.     INT lasta1 = e1_a * dimension;
  3.     INT lasta2 = e2_a * dimension;
  4.     INT lastar = rel_a * dimension;
  5.     INT lastb1 = e1_b * dimension;
  6.     INT lastb2 = e2_b * dimension;
  7.     INT lastbr = rel_b * dimension;
  8.     for (INT ii=0; ii  < dimension; ii++) {
  9.         REAL x;
  10.         x = (entityVec[lasta2 + ii] - entityVec[lasta1 + ii] - relationVec[lastar + ii]);
  11.         if (x > 0)
  12.             x = -alpha;
  13.         else
  14.             x = alpha;
  15.         relationVec[lastar + ii] -= x;
  16.         entityVec[lasta1 + ii] -= x;
  17.         entityVec[lasta2 + ii] += x;
  18.         x = (entityVec[lastb2 + ii] - entityVec[lastb1 + ii] - relationVec[lastbr + ii]);
  19.         if (x > 0)
  20.             x = alpha;
  21.         else
  22.             x = -alpha;
  23.         relationVec[lastbr + ii] -=  x;
  24.         entityVec[lastb1 + ii] -= x;
  25.         entityVec[lastb2 + ii] += x;
  26.     }
  27. }
  28.  
  29. void train_kb(INT e1_a, INT e2_a, INT rel_a, INT e1_b, INT e2_b, INT rel_b) {
  30.     REAL sum1 = calc_sum(e1_a, e2_a, rel_a);
  31.     REAL sum2 = calc_sum(e1_b, e2_b, rel_b);
  32.         //printf("                              %f %f\r", sum1, sum2);
  33.     if (sum1 + margin > sum2) {
  34.         //res += margin + sum1 - sum2;
  35.         //gradient(e1_a, e2_a, rel_a, e1_b, e2_b, rel_b);
  36.         res += (margin+sum1-sum2) * (margin+sum1-sum2) * 0.5;
  37.         gradient_l2(e1_a, e2_a, rel_a, e1_b, e2_b, rel_b);
  38.     }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement