You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

24 lines
660 B

4 years ago
  1. import numpy
  2. try:
  3. from cupy import get_array_module
  4. except ImportError:
  5. def get_array_module(*a, **k):
  6. return numpy
  7. def categorical_crossentropy(scores, labels):
  8. xp = get_array_module(scores)
  9. target = xp.zeros(scores.shape, dtype='float32')
  10. loss = 0.
  11. for i in range(len(labels)):
  12. target[i, int(labels[i])] = 1.
  13. loss += (1.0-scores[i, int(labels[i])])**2
  14. return scores - target, loss
  15. def L1_distance(vec1, vec2, labels, margin=0.2):
  16. xp = get_array_module(vec1)
  17. dist = xp.abs(vec1 - vec2).sum(axis=1)
  18. loss = (dist > margin) - labels
  19. return (sent1-sent2) * loss, (sent2-sent1) * loss, loss