簡體   English   中英

在Pytorch中應用l2歸一化時尺寸超出范圍

[英]Dimension out of range when applying l2 normalization in Pytorch

我遇到了運行時錯誤:

RuntimeError:尺寸超出范圍(預計在[-1,0]范圍內,但得到1)`

而且不知道如何解決它。

該錯誤似乎是指該行:

i_enc = F.normalize(input =i_batch, p=2, dim=1, eps=1e-12)  # (batch, K, feat_dim)

我正在嘗試通過應用L2范數來編碼圖像特征(批處理x 36 x 2038)。 以下是本節的完整代碼。

def forward(self, q_batch, i_batch):

    # batch size = 512
    # q -> 512(batch)x14(length)
    # i -> 512(batch)x36(K)x2048(f_dim)
    # one-hot -> glove
    emb = self.embed(q_batch)
    output, hn = self.gru(emb.permute(1, 0, 2))  
    q_enc = hn.view(-1,self.h_dim)

    # image encoding with l2 norm
    i_enc = F.normalize(input =i_batch, p=2, dim=1, eps=1e-12)  # (batch, K, feat_dim)


    q_enc_copy = q_enc.repeat(1, self.K).view(-1, self.K, self.h_dim)

    q_i_concat = torch.cat((i_enc, q_enc_copy), -1)
    q_i_concat = self.non_linear(q_i_concat, self.td_W, self.td_W2 )#512 x 36 x 512
    i_attention = self.att_w(q_i_concat)  #512x36x1
    i_attention = F.softmax(i_attention.squeeze(),1)
    #weighted sum
    i_enc = torch.bmm(i_attention.unsqueeze(1), i_enc).squeeze()  # (batch, feat_dim)

    # element-wise multiplication
    q = self.non_linear(q_enc, self.q_W, self.q_W2)
    i = self.non_linear(i_enc, self.i_W, self.i_W2)
    h = torch.mul(q, i)  # (batch, hid_dim)

    # output classifier
    # BCE with logitsloss
    score = self.c_Wo(self.non_linear(h, self.c_W, self.c_W2))

    return score

我將不勝感激任何幫助。 謝謝

我建議檢查i_batch的形狀(例如print(i_batch.shape) ),因為我懷疑i_batch只有1個尺寸(例如[N]形狀)。

這可以解釋為什么PyTorch抱怨您只能對維度#0進行歸一化; 當您要求在尺寸#1上執行操作時(cf dim=1 )。

暫無
暫無

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

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