class_docstr: This class implements a linear classifier on top of NMF activations
  
  Arguments
  ---------
  n_comp : int
      Number of NMF components
  T : int
      Number of Timepoints in the NMF activations
  num_classes : int
      Number of classes that the classifier works with
  
  Example:
  --------
  >>> theta = Theta(30, 120, 50)
  >>> H = torch.rand(1, 30, 120)
  >>> c_hat = theta.forward(H)
  >>> print(c_hat.shape)
  torch.Size([1, 50])
class_docstr_tok: ["This","class","implements","a","linear","classifier","on","top","of","NMF","activations","Arguments","--","--","--","--","-","n_comp",":","int","Number","of","NMF","components","T",":","int","Number","of","Timepoints","in","the","NMF","activations","num_classes",":","int","Number","of","classes","that","the","classifier","works","with","Example",":","--","--","--","--",">",">",">","theta","=","Theta","(","30",",","120",",","50",")",">",">",">","H","=","torch.rand","(","1",",","30",",","120",")",">",">",">","c_hat","=","theta.forward","(","H",")",">",">",">","print","(","c_hat.shape",")","torch.Size","(","[","1",",","50","]",")"]
code: def __init__(self, n_comp=100, T=431, num_classes=50):
      super().__init__()
  
      # This linear layer collapses the time axis using "attention" based pooling
      self.hard_att = nn.Linear(T, 1, bias=False)
  
      # The Linear layer for classification
      self.classifier = nn.Sequential(
          nn.Linear(n_comp, num_classes, bias=False), nn.Softmax(dim=1)
      )
  
imports: import torch.nn
  import torch.nn.functional
  import torch
  from speechbrain.lobes.models.PIQ import ResBlockAudio
label_desc: Use image node_id 1 to create a new Theta object from inherited base classes: nn with example: obj = Theta(n_comp, T, num_classes)