From ca33336ae0f34751f5ca393c7998f7ac85c16b79 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 27 Jan 2020 16:02:34 +0100 Subject: [PATCH] testing seq_len_norm --- layers/losses.py | 4 ++-- tests/test_layers.py | 39 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/layers/losses.py b/layers/losses.py index 90d2ac80..176e2f09 100644 --- a/layers/losses.py +++ b/layers/losses.py @@ -35,7 +35,7 @@ class L1LossMasked(nn.Module): mask = mask.expand_as(x) loss = functional.l1_loss( x * mask, target * mask, reduction='none') - loss = loss.mul(out_weights.cuda()).sum() + loss = loss.mul(out_weights.to(loss.device)).sum() else: mask = mask.expand_as(x) loss = functional.l1_loss( @@ -74,7 +74,7 @@ class MSELossMasked(nn.Module): mask = mask.expand_as(x) loss = functional.mse_loss( x * mask, target * mask, reduction='none') - loss = loss.mul(out_weights.cuda()).sum() + loss = loss.mul(out_weights.to(loss.device)).sum() else: mask = mask.expand_as(x) loss = functional.mse_loss( diff --git a/tests/test_layers.py b/tests/test_layers.py index 7d02b673..d7c8829f 100644 --- a/tests/test_layers.py +++ b/tests/test_layers.py @@ -131,7 +131,7 @@ class L1LossMaskedTests(unittest.TestCase): dummy_target = T.zeros(4, 8, 128).float() dummy_length = (T.ones(4) * 8).long() output = layer(dummy_input, dummy_target, dummy_length) - assert output.item() == 1.0, "1.0 vs {}".format(output.data[0]) + assert output.item() == 1.0, "1.0 vs {}".format(output.item()) # test if padded values of input makes any difference dummy_input = T.ones(4, 8, 128).float() @@ -140,7 +140,7 @@ class L1LossMaskedTests(unittest.TestCase): mask = ( (sequence_mask(dummy_length).float() - 1.0) * 100.0).unsqueeze(2) output = layer(dummy_input + mask, dummy_target, dummy_length) - assert output.item() == 1.0, "1.0 vs {}".format(output.data[0]) + assert output.item() == 1.0, "1.0 vs {}".format(output.item()) dummy_input = T.rand(4, 8, 128).float() dummy_target = dummy_input.detach() @@ -148,4 +148,37 @@ class L1LossMaskedTests(unittest.TestCase): mask = ( (sequence_mask(dummy_length).float() - 1.0) * 100.0).unsqueeze(2) output = layer(dummy_input + mask, dummy_target, dummy_length) - assert output.item() == 0, "0 vs {}".format(output.data[0]) + assert output.item() == 0, "0 vs {}".format(output.item()) + + # seq_len_norm = True + # test input == target + layer = L1LossMasked(seq_len_norm=True) + dummy_input = T.ones(4, 8, 128).float() + dummy_target = T.ones(4, 8, 128).float() + dummy_length = (T.ones(4) * 8).long() + output = layer(dummy_input, dummy_target, dummy_length) + assert output.item() == 0.0 + + # test input != target + dummy_input = T.ones(4, 8, 128).float() + dummy_target = T.zeros(4, 8, 128).float() + dummy_length = (T.ones(4) * 8).long() + output = layer(dummy_input, dummy_target, dummy_length) + assert output.item() == 1.0, "1.0 vs {}".format(output.item()) + + # test if padded values of input makes any difference + dummy_input = T.ones(4, 8, 128).float() + dummy_target = T.zeros(4, 8, 128).float() + dummy_length = (T.arange(5, 9)).long() + mask = ( + (sequence_mask(dummy_length).float() - 1.0) * 100.0).unsqueeze(2) + output = layer(dummy_input + mask, dummy_target, dummy_length) + assert abs(output.item() - 1.0) < 1e-5, "1.0 vs {}".format(output.item()) + + dummy_input = T.rand(4, 8, 128).float() + dummy_target = dummy_input.detach() + dummy_length = (T.arange(5, 9)).long() + mask = ( + (sequence_mask(dummy_length).float() - 1.0) * 100.0).unsqueeze(2) + output = layer(dummy_input + mask, dummy_target, dummy_length) + assert output.item() == 0, "0 vs {}".format(output.item())