mirror of
https://github.com/facebookresearch/fairseq.git
synced 2024-09-22 14:51:55 +03:00
36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
# Copyright (c) 2017-present, Facebook, Inc.
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under the license found in the LICENSE file in
|
|
# the root directory of this source tree. An additional grant of patent rights
|
|
# can be found in the PATENTS file in the same directory.
|
|
#
|
|
|
|
import torch
|
|
import unittest
|
|
from fairseq.criterions.label_smoothed_cross_entropy import LabelSmoothedCrossEntropy
|
|
from torch.autograd import Variable, gradcheck
|
|
|
|
|
|
torch.set_default_tensor_type('torch.DoubleTensor')
|
|
|
|
|
|
class TestLabelSmoothing(unittest.TestCase):
|
|
|
|
def test_label_smoothing(self):
|
|
input = Variable(torch.randn(3, 5), requires_grad=True)
|
|
idx = torch.rand(3) * 4
|
|
target = Variable(idx.long())
|
|
criterion = LabelSmoothedCrossEntropy()
|
|
self.assertTrue(gradcheck(
|
|
lambda x, y: criterion.apply(x, y, 0.1, 2, None), (input, target)
|
|
))
|
|
weights = torch.ones(5)
|
|
weights[2] = 0
|
|
self.assertTrue(gradcheck(lambda x, y: criterion.apply(x, y, 0.1, None, weights), (input, target)))
|
|
self.assertTrue(gradcheck(lambda x, y: criterion.apply(x, y, 0.1, None, None), (input, target)))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|