sv_decoder.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import torch
  2. from torch.nn import functional as F
  3. from funasr.models.decoder.abs_decoder import AbsDecoder
  4. class DenseDecoder(AbsDecoder):
  5. def __init__(
  6. self,
  7. vocab_size,
  8. encoder_output_size,
  9. num_nodes_resnet1: int = 256,
  10. num_nodes_last_layer: int = 256,
  11. batchnorm_momentum: float = 0.5,
  12. ):
  13. super(DenseDecoder, self).__init__()
  14. self.resnet1_dense = torch.nn.Linear(encoder_output_size, num_nodes_resnet1)
  15. self.resnet1_bn = torch.nn.BatchNorm1d(num_nodes_resnet1, eps=1e-3, momentum=batchnorm_momentum)
  16. self.resnet2_dense = torch.nn.Linear(num_nodes_resnet1, num_nodes_last_layer)
  17. self.resnet2_bn = torch.nn.BatchNorm1d(num_nodes_last_layer, eps=1e-3, momentum=batchnorm_momentum)
  18. self.output_dense = torch.nn.Linear(num_nodes_last_layer, vocab_size, bias=False)
  19. def forward(self, features):
  20. embeddings = {}
  21. features = self.resnet1_dense(features)
  22. embeddings["resnet1_dense"] = features
  23. features = F.relu(features)
  24. features = self.resnet1_bn(features)
  25. features = self.resnet2_dense(features)
  26. embeddings["resnet2_dense"] = features
  27. features = F.relu(features)
  28. features = self.resnet2_bn(features)
  29. features = self.output_dense(features)
  30. return features, embeddings