簡體   English   中英

如何將 map RNN output 轉換為 class 大小的張量?

[英]How to map RNN output to tensor of class size?

我正在使用 GLOVE 嵌入和 RNN 構建二進制文本分類器。 nn.RNN 的 output 是 torch.Size([1, 12, 150])。 我需要將 map 調整為尺寸 2,以便我可以根據實際 class 計算損失。 我為大小為 100d 的手套嵌入提供大小為“單詞”和 100 的張量。 例如,一個 12 字的句子大小為 [1,12,100]

這是怎么做到的?

def forward(self, input, hidden):

    embeds = self.embedding(input) # glove embedding
    embeds = embeds.unsqueeze(0)
    embeds = embeds.float()
    
    output, hidden = self.rnn(embeds, hidden)
    # output is size [1, 12, 150]

    return output, hidden

如果我理解正確,您正在嘗試使用二進制 class 對一系列單詞(在您的示例中為 12 個)進行分類。 有很多方法可以做到這一點。 本質上,您只需要通過可微分運算減小 output 的大小,以便在訓練期間學習有意義的參數。 在另一種意義上,RNN 輸出一組特征(從原始輸入特征創建),這些特征在文本分類中更有用,因此您基本上需要構建一個二進制分類器,使用這些大小為 [詞數 x 100]。

例如,您可以簡單地對所有特征進行平均或求和:

# done in two steps to avoid averaging across batch examples
pred = torch.average(output,dim = 2)
pred = torch.average(pred,dim = 1) 

您可以使用一個或多個完全連接的神經網絡層:

# in __init__()
...
self.fc = nn.Linear(100,1)


# in forward()
...
output = torch.average(output,dim = 1)
output = self.fc(output)
output = torch.nn.functional.sigmoid(output)

return output,hidden

本質上,構建最終分類模塊沒有錯誤的方法,因為無論您定義什么結構,訓練 RNN 都會產生與分類模塊相關的特征。 但是,您可能會發現有些事情比其他事情更有效,因此最好嘗試一些事情,看看什么有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM