我正在为我的助手开发一个字灯模型。 我的模型结构包括一个微型、小型、小型和中型终端层,处理音频数据,然后是线性地层。 然而,Im正面临线电视界出乎意料的产出,造成混乱。
在将微额信贷额度的产出(星号:4,32,32)通过后,我预计产出将达到(4,32,1)。 然而,实际产出形态为(4、32、1)。
在我的双轨分类任务中,我的目的是区分两个类别:0至0为“不听觉”和1为“觉醒” 我的批量为32个,我预计产出将形成(32,1个),以表示对每个音频最惠国投入的预测。
能否就“线性”的正确配置或实现预期产出形态所需的任何处理步骤(32,1)向某人提供咨询意见? 任何见解或守则实例都会受到高度赞赏。 以下是我的参考示范守则:
class LSTMWakeWord(nn.Module):
def __init__(self,input_size,hidden_size,num_layers,dropout,bidirectional,num_of_classes, device= cpu ):
super(LSTMWakeWord, self).__init__()
self.input_size = input_size
self.hidden_size = hidden_size
self.num_layers = num_layers
self.device = device
self.bidirectional = bidirectional
self.directions = 2 if bidirectional else 1
self.lstm = nn.LSTM(input_size=input_size,
hidden_size = hidden_size,
num_layers = num_layers,
dropout=dropout,
bidirectional=bidirectional,
batch_first=True)
self.layernorm = nn.LayerNorm(input_size)
self.classifier = nn.Linear(hidden_size , num_of_classes)
def _init_hidden(self,batch_size):
n, d, hs = self.num_layers, self.directions, self.hidden_size
return (torch.zeros(n * d, batch_size, hs).to(self.device),
torch.zeros(n * d, batch_size, hs).to(self.device))
def forward(self,x):
# the values with e+xxx are gone. so it normalizes the values
x = self.layernorm(x)
# x shape -> feature(n_mfcc),batch,seq_len(time)
hidden = self._init_hidden(x.size()[0])
out, (hn, cn) = self.lstm(x, hidden)
print("hn "+str(hn.shape))# directions∗num_layers, batch, hidden_size
#print("out " + str(out.shape))# batch, seq_len, direction(2 or 1)*hidden_size
out = self.classifier(hn)
print("out2 " + str(out.shape))
return out
我非常赞赏关于如何处理双轨分类的“线”成员产出的任何见解或指导。