[英]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.