簡體   English   中英

匹配 PyTorch 張量維度

[英]matching PyTorch tensor dimensions

目前,我在訓練函數中的張量維數方面存在一些問題。 我使用的是 MNIST 數據集,因此有 10 個可能的目標,並且最初使用 10 的訓練批次大小編寫原型代碼,回想起來這不是最明智的選擇。 它在一些早期的測試中給出了糟糕的結果,增加訓練迭代次數也沒有任何好處。 在嘗試增加批量大小后,我意識到我寫的內容並不那么通用,而且我可能從未在正確的數據上對其進行過訓練。 下面是我的訓練函數:

def Train(tLoops, Lrate):
    for _ in range(tLoops):
        tempData = train_data.view(batch_size_train, 1, 1, -1)
        output = net(tempData)
        trainTarget = train_targets
        criterion = nn.MSELoss()
        print("target:", trainTarget.size())
        print("Output:", output.size())
        loss = criterion(output, trainTarget.float())
        # print("error is:", loss)
        net.zero_grad()  # zeroes the gradient buffers of all parameters
        loss.backward()
        for j in net.parameters():
            j.data.sub_(j.grad.data * Lrate)

其中打印函數返回

target: torch.Size([100])
Output: torch.Size([100, 1, 1, 10])

在計算損失的行上的錯誤消息之前;

RuntimeError: The size of tensor a (10) must match the size of tensor b (100) at non-singleton dimension 3

第一個打印,目標,是每個圖像的相應地面實況值的一維列表。 輸出包含這 100 個樣本中每一個的神經網絡的輸出,因此是一個 10 x 100 的列表,但是從之前的 28 x 28 到 1 x 784 的略讀和整形數據中,我似乎有不必要的額外維度。 PyTorch 是否提供了刪除這些的方法? 我在文檔中找不到任何內容,或者還有其他可能是我的問題嗎?

您的訓練腳本中有幾個問題。 我將在下面逐一說明。

  1. 首先,您不應該手動進行數據批處理。 Pytorch/torchvision 有這方面的功能,使用數據集和數據加載器: https ://pytorch.org/tutorials/recipes/recipes/loading_data_recipe.html。

  2. 您也不應該手動更新網絡參數。 使用優化器: https : //pytorch.org/docs/stable/optim.html 在您的情況下,沒有動量的 SGD 將具有相同的效果。

  3. 您輸入的維度似乎是錯誤的,對於 MNIST,如果您正在訓練 MLP,則輸入張量應該是 (batch_size, 1, 28, 28) 或 (batch_size, 784)。 此外,您的網絡的輸出應該是 (batch_size, 10)

暫無
暫無

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

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