簡體   English   中英

如何訓練具有可變 output 大小的神經網絡

[英]How to train a neural network with a variable output size

我有一個有效的 CNN-LSTM model 試圖預測視頻中人體部位的關鍵點。

目前,我有四個關鍵點作為標簽右手、左手、頭部和骨盆。 問題是在某些幀上我看不到我想要 label 的人的四個部分,所以默認情況下我將這些值設置為 (0,0)(這是一個 null 坐標)。

我面臨的問題是 model 考慮到這些點並試圖在序列中回歸它們。

因此,我刪除了損失計算和梯度逆向傳播中的 (0,0) 點,效果更好。

問題是四個點仍然被預測,所以我試圖以任何方式知道如何讓它預測可變數量的關鍵點。

我想過添加第三個參數(它是否可見?),但它可能會增加一些復雜性並松散 model。

我認為您必須編寫一個自定義損失 function,僅當目標坐標不是 null 時才計算點之間的損失。

請參閱PyTorch 自定義損失 function編寫自定義損失。

就像是:

def loss(outputs, labels):
    err = 0
    n = 0
    for xo, xt in zip(outputs, labels):
        if xt.values == torch.zeros(2):  # null coord
            continue
        err += torch.nn.functional.mse_loss(xo, xt)
        n += 1
    return (err / n)

這只是偽代碼。 避免循環的另一種形式是有一個明確的二進制向量(如@leleogere 建議的那樣),然后您可以在減少之前乘以每個坐標上的損失。

暫無
暫無

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

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