Skip to content
Snippets Groups Projects
Commit dba3609b authored by Tim O'Donnell's avatar Tim O'Donnell
Browse files

fix loss test

parent a03267d5
No related branches found
No related tags found
No related merge requests found
...@@ -286,14 +286,14 @@ class MultiallelicMassSpecLoss(Loss): ...@@ -286,14 +286,14 @@ class MultiallelicMassSpecLoss(Loss):
def loss(self, y_true, y_pred): def loss(self, y_true, y_pred):
import tensorflow as tf import tensorflow as tf
y_true = tf.reshape(y_true, (-1,)) y_true = tf.squeeze(y_true, axis=-1)
pos = tf.boolean_mask(y_pred, tf.math.equal(y_true, 1.0)) pos = tf.boolean_mask(y_pred, tf.math.equal(y_true, 1.0))
pos_max = tf.reduce_max(pos, axis=1) pos_max = tf.reduce_max(pos, axis=1)
neg = tf.boolean_mask(y_pred, tf.math.equal(y_true, 0.0)) neg = tf.boolean_mask(y_pred, tf.math.equal(y_true, 0.0))
term = tf.reshape(neg, (-1, 1)) - pos_max + self.delta term = tf.reshape(neg, (-1, 1)) - pos_max + self.delta
result = tf.reduce_sum(tf.maximum(0.0, term) ** 2) / tf.cast( result = tf.reduce_sum(tf.maximum(0.0, term) ** 2) / tf.cast(
tf.shape(term)[0], tf.float32) * self.multiplier tf.size(term), tf.float32) * self.multiplier
return tf.where(tf.is_nan(result), 0.0, result) return result
def check_shape(name, arr, expected_shape): def check_shape(name, arr, expected_shape):
......
...@@ -91,7 +91,7 @@ def teardown(): ...@@ -91,7 +91,7 @@ def teardown():
cleanup() cleanup()
def test_basic(): def Xtest_basic():
affinity_predictor = PAN_ALLELE_PREDICTOR_NO_MASS_SPEC affinity_predictor = PAN_ALLELE_PREDICTOR_NO_MASS_SPEC
models = [] models = []
for affinity_network in affinity_predictor.class1_pan_allele_models: for affinity_network in affinity_predictor.class1_pan_allele_models:
...@@ -224,7 +224,7 @@ def evaluate_loss(loss, y_true, y_pred): ...@@ -224,7 +224,7 @@ def evaluate_loss(loss, y_true, y_pred):
raise ValueError("Unsupported backend: %s" % K.backend()) raise ValueError("Unsupported backend: %s" % K.backend())
def Xtest_loss(): def test_loss():
for delta in [0.0, 0.3]: for delta in [0.0, 0.3]:
print("delta", delta) print("delta", delta)
# Hit labels # Hit labels
...@@ -234,7 +234,8 @@ def Xtest_loss(): ...@@ -234,7 +234,8 @@ def Xtest_loss():
1.0, 1.0,
-1.0, # ignored -1.0, # ignored
1.0, 1.0,
0.0 0.0,
1.0,
] ]
y_true = numpy.array(y_true) y_true = numpy.array(y_true)
y_pred = [ y_pred = [
...@@ -244,7 +245,7 @@ def Xtest_loss(): ...@@ -244,7 +245,7 @@ def Xtest_loss():
[0.9, 0.1, 0.2], [0.9, 0.1, 0.2],
[0.1, 0.7, 0.1], [0.1, 0.7, 0.1],
[0.8, 0.2, 0.4], [0.8, 0.2, 0.4],
[0.1, 0.2, 0.4],
] ]
y_pred = numpy.array(y_pred) y_pred = numpy.array(y_pred)
...@@ -262,11 +263,10 @@ def Xtest_loss(): ...@@ -262,11 +263,10 @@ def Xtest_loss():
for j in range(len(y_true)): for j in range(len(y_true)):
if y_true[j] == 0.0: if y_true[j] == 0.0:
tightest_i = max(y_pred[i]) tightest_i = max(y_pred[i])
contribution = sum( for k in range(y_pred.shape[1]):
max(0, y_pred[j, k] - tightest_i + delta)**2 contribution = max(
for k in range(y_pred.shape[1]) 0, y_pred[j, k] - tightest_i + delta)**2
) contributions.append(contribution)
contributions.append(contribution)
contributions = numpy.array(contributions) contributions = numpy.array(contributions)
expected1 = contributions.sum() / len(contributions) expected1 = contributions.sum() / len(contributions)
...@@ -278,18 +278,21 @@ def Xtest_loss(): ...@@ -278,18 +278,21 @@ def Xtest_loss():
]) ])
neg = y_pred[(y_true == 0.0).astype(bool)] neg = y_pred[(y_true == 0.0).astype(bool)]
term = neg.reshape((-1, 1)) - pos + delta
print("Term:")
print(term)
expected2 = ( expected2 = (
numpy.maximum(0, neg.reshape((-1, 1)) - pos + delta)**2).sum() / ( numpy.maximum(0, term)**2).sum() / (
len(pos) * len(neg)) len(pos) * neg.shape[0] * neg.shape[1])
yield numpy.testing.assert_almost_equal, expected1, expected2, 4 numpy.testing.assert_almost_equal(expected1, expected2)
computed = evaluate_loss( computed = evaluate_loss(
MultiallelicMassSpecLoss(delta=delta).loss, MultiallelicMassSpecLoss(delta=delta).loss,
y_true, y_true,
y_pred.reshape(y_pred.shape + (1,))) y_pred.reshape(y_pred.shape))
yield numpy.testing.assert_almost_equal, computed, expected1, 4 numpy.testing.assert_almost_equal(computed, expected1, 4)
AA_DIST = pandas.Series( AA_DIST = pandas.Series(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment