Реализация двоичной классификации для LSTM и вывода линейного слояPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Реализация двоичной классификации для LSTM и вывода линейного слоя

Сообщение Anonymous »

Я работаю над разработкой модели пробуждающего слова для моего помощника с искусственным интеллектом. Архитектура моей модели включает в себя уровень LSTM для обработки аудиоданных, за которым следует линейный уровень. Однако я столкнулся с неожиданной формой выходных данных линейного слоя, что вызывает путаницу.
После передачи выходных данных LSTM (форма: 4, 32, 32) на линейный слой Я ожидал выходной формы (4, 32, 1). Однако фактическая форма вывода равна (4, 32, 1).
В моей задаче двоичной классификации я стремлюсь различать два класса: 0 для «не просыпаться» и 1. для «разбуди ИИ». Размер моего пакета равен 32, и я ожидал, что выходные данные будут иметь форму (32, 1), чтобы представлять один прогноз для каждого аудиовхода MFCC.
Может ли кто-нибудь посоветовать правильную конфигурацию линейный слой или какие-либо этапы обработки, необходимые для достижения желаемой выходной формы (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
Я был бы очень признателен за любую информацию или рекомендации о том, как обрабатывать выходные данные линейного слоя для двоичной классификации.


Подробнее здесь: https://stackoverflow.com/questions/715 ... yer-output
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»