美文网首页
self-attention模型

self-attention模型

作者: lk_erzanml | 来源:发表于2022-10-12 11:33 被阅读0次
    class Classifier(nn.Module):
      def __init__(self, d_model=80, n_spks=600, dropout=0.1):
        super().__init__()
        # Project the dimension of features from that of input into d_model.
        self.prenet = nn.Linear(40, d_model)
        # TODO:
        #   Change Transformer to Conformer.
        #   https://arxiv.org/abs/2005.08100
        self.encoder_layer = nn.TransformerEncoderLayer(
          d_model=d_model, dim_feedforward=256, nhead=2
        )
        # self.encoder = nn.TransformerEncoder(self.encoder_layer, num_layers=2)
    
        # Project the the dimension of features from d_model into speaker nums.
        self.pred_layer = nn.Sequential(
          nn.Linear(d_model, d_model),
          nn.ReLU(),
          nn.Linear(d_model, n_spks),
        )
    
      def forward(self, mels):
        """
        args:
          mels: (batch size, length, 40)
        return:
          out: (batch size, n_spks)
        """
        # out: (batch size, length, d_model)
        out = self.prenet(mels)
        # out: (length, batch size, d_model)
        out = out.permute(1, 0, 2)
        # The encoder layer expect features in the shape of (length, batch size, d_model).
        out = self.encoder_layer(out)
        # out: (batch size, length, d_model)
        out = out.transpose(0, 1)
        # mean pooling
        stats = out.mean(dim=1)
    
        # out: (batch, n_spks)
        out = self.pred_layer(stats)
        return out
    

    a=Classifier()
    c=torch.randn(100,50,40) #100是批次大小(一般128),50是一组特征的长度(是具有关系的一组特征,比如一句话我们分成50个单词,他们之间实际存在某些关系),40是特征长度(比如,一个单词长度)
    d=a(c)
    d.shape # torch.Size([100, 600])

    相关文章

      网友评论

          本文标题:self-attention模型

          本文链接:https://www.haomeiwen.com/subject/dautzrtx.html