Fehler bei der Verwendung der Stapelgröße von mehr als 1 in Pytorch

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Fehler bei der Verwendung der Stapelgröße von mehr als 1 in Pytorch

by Anonymous » 28 Mar 2025, 13:55

Ich baue ein neuronales Netzwerk auf, um vorherzusagen, wie ein Bild während der Komprimierung mit VVC (vielseitige Videocodierung) verteilt wird. Das Modell nimmt einen einzelnen Y-Frame aus einem YUV420-Bild als Eingabe und verwendet eine CSV-Datei, die die Positionen und Größen für die Bodenwahrheit enthält. /> Grundwahrheit: < /strong> Eine CSV -Datei mit Blockpositionen, Größen und zusätzlichen Partitionierungsflags. />
example(388016_320x480_37.csv)
Bildbeschreibung Geben Sie hier
Problembeschreibung:
Ich habe Training implementiert. Dataloader . Mit einer Stapelgröße von 1 funktioniert das Modell korrekt, aber das Erhöhen der Stapelgröße führt zu Laufzeitfehlern.

Code: Select all

def custom_collate_fn(batch):
frames = [item[0] for item in batch]  # Y-frame tensors
blocks = [item[1] for item in batch]  # Block information
frames = torch.stack(frames, dim=0)  # Stacking frames along batch dimension
return frames, blocks

dataloader = DataLoader(
dataset,
batch_size=batch_size,
shuffle=True,
collate_fn=custom_collate_fn
)
Beobachtungen:

Wenn batch_size = 1 , ist die blocks_batch in der Trainingsschleife eine Liste mit einem einzigen Satz von Blockdaten. Listen, die bei der Indexierung Fehler verursachen.

Code: Select all

for i, (frame, blocks_batch) in enumerate(dataloader):
frame = frame.to(device)  # Shape: [batch_size, 1, H, W]
blocks = blocks_batch[0]  # Works with batch_size=1 but fails with larger sizes
Meine Annahme:
Es scheint, dass sich das Problem aus der Handhabung blocks_batch ergibt, wenn batch_size> 1 . Die verschachtelte Listenstruktur macht es schwierig, mehrere Chargen zu verarbeiten. Umgang mit Blockdaten mit variabler Länge würde ich mich über einen Rat freuen.

Code: Select all

  File "C:\Users\Administrator\Documents\VVC_fast\test4\train.py", line 91, in 
loss1 = criterion(out_split, target_split)
File "C:\ProgramData\miniconda3\envs\newenv3\lib\site-packages\torch\nn\modules\module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
File "C:\ProgramData\miniconda3\envs\newenv3\lib\site-packages\torch\nn\modules\module.py", line 1527, in _call_impl
return forward_call(*args, **kwargs)
File "C:\ProgramData\miniconda3\envs\newenv3\lib\site-packages\torch\nn\modules\loss.py", line 725, in forward
return F.binary_cross_entropy_with_logits(input, target,
File "C:\ProgramData\miniconda3\envs\newenv3\lib\site-packages\torch\nn\functional.py", line 3193, in binary_cross_entropy_with_logits
raise ValueError(f"Target size ({target.size()}) must be the same as input size ({input.size()})")
ValueError: Target size (torch.Size([1, 1])) must be the same as input size (torch.Size([2, 1]))

Top