Dávkovací problém s dataloader v pythonu

0

Otázka

Mám nějaká data .txt a instance tvoří dvě linie, které oba mají 100 prvků v nich. První řádek definuje problém a druhý řádek definuje řešení. I když to není skvělý nápad, snažil jsem se použít dohledem, mezi údaje. Nicméně, jsem čelí problémy s dávkové zpracování. Přidal jsem kód pro obě data loader a hlavní smyčka, která dělá svou práci. Problém mám, je tohle;

Nastavil jsem batch_size jako 5 a preds pole má správný tvar. Nicméně, štítky, pole má ještě jeden rozměr, a místo toho, 5 celá čísla v to, že má 5 kompletní řešení. Myslím, že problém je v data loader, ale nemohl to vyřešit. Jsem docela nový pojem, snažil jsem se najít to přes týden, ale nic se usadil tak daleko. jakákoliv pomoc bude vítána.

díky předem.

Data Loader:

import os
import torch
import torch.nn as nn
import torch.nn.functional as F
import pdb
import numpy as np
from torch.utils.data import Dataset

class load_dataset(Dataset):
    def __init__(self, data_file='data.txt', transform=None):
        super().__init__()
        data = np.loadtxt(data_file)        
        data = torch.Tensor(data)
        self.data = data[::2]
        self.targets = data[1::2]

    def __len__(self):
        return len(self.targets)

    def __getitem__(self, index):
        adj, target = self.data[index], self.targets[index]
        return adj, target

Hlavní Smyčku:

for inputs, labels in loaders["train"]:
    inputs, labels = inputs.view([batch_size, N ** 2]), labels.data
    scores = mps(inputs)
    _, preds = torch.max(scores, 1)
    print("preds: ")
    print(preds)
    print("labels: ")
    print(labels)

Výstup:

   preds: 
   tensor([0, 0, 0, 0, 0])
   labels: 
   tensor([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
            0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
            0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
            0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
            0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
            0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
           [1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,
            0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
            0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 0.,
            0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1.,
            0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
            0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
           [1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
            0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
            0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
            0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
            0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
            0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
           [1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,
            0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
            0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0.,
            0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
            0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,
            0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
           [1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
            0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0.,
            0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1.,
            0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1.,
            0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
            0., 0., 0., 0., 1., 0., 0., 0., 0., 0.]])
1
1

Vám ještě neukázal, jak jste definovali své dataloader, ale za předpokladu, že jste balení load_dataset s torch.utils.data.DataLoader a nastavení batch_size=5.

Pokud jste nastavili velikost dávky 5, pak budete mít 5 "problémy" a odpovídající 5 "řešení" v jedné dávce. Každá má 100 složek. To znamená, inputs a labels budou dva tenzory ve tvaru (batch_size=5, 100).

2021-10-21 19:41:47

děkuji @Ivan první, vaše předpoklady jsou pravdivé. nicméně, není dávkování je všechno o v první řadě? Myslel jsem, že bych rozdělit 1 instance dat i jeho kousky. Mám stejný výstup rozměr vstup (100).
bidon

Možná mi něco uniká ale vysvětlil, že problém by mohl být popsán 100 složek, pro mě to 100,-funkce vektoru odpovídá modelu vstup, jaká? Nebo má jeden problém odpovídat více (100 různých) výstupů?
Ivan

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................