import numpy try: from cupy import get_array_module except ImportError: def get_array_module(*a, **k): return numpy def categorical_crossentropy(scores, labels): xp = get_array_module(scores) target = xp.zeros(scores.shape, dtype='float32') loss = 0. for i in range(len(labels)): target[i, int(labels[i])] = 1. loss += (1.0-scores[i, int(labels[i])])**2 return scores - target, loss def L1_distance(vec1, vec2, labels, margin=0.2): xp = get_array_module(vec1) dist = xp.abs(vec1 - vec2).sum(axis=1) loss = (dist > margin) - labels return (sent1-sent2) * loss, (sent2-sent1) * loss, loss