slp-ntua / slp-lab-support-19-20

1 stars 0 forks source link

Lab3 : 3.3 #17

Open foivospar opened 4 years ago

foivospar commented 4 years ago

Στην train_dataset(), για τον υπολογισμό του loss (π.χ. με loss_function την BCEWithLogitsLoss), μου βγάζει ValueError, ότι πρέπει το input και το target να έχουν ίδιο size. Το input που του δίνω είναι η έξοδος του νευρωνικού, οπότε έχει size (batch_size, n_classes), ενώ το target είναι ένα 1D tensor μήκους batch_size. Τι πρέπει να δώσω ως input ή/και target για να έχουν ίδιο size ;

georgepar commented 4 years ago

Αν δεν κάνω λάθος η BCEWithLogitsLoss περιμένει τα targets One hot encoded και τα predictions ως logits.

Με λίγα λόγια τα predictions τα δίνεις σωστά σαν την έξοδο του νευρωνικού (batch, num_classes) και τα targets πρεπει να τα μετασχηματίσεις σε (batch, num_classes). Πχ το

y = [0, 1, 2, 0, 2, 1]

γινεται

y_onehot = [
    [1, 0, 0],
    [0, 1, 0],
    [0, 0, 1],
    [1, 0, 0],
    [0, 0, 1],
    [0, 1, 0]
]

Δες και το documentation του loss και την torch.nn.functional.one_hot

foivospar commented 4 years ago

Ωραία, δούλεψε, ευχαριστώ πολύ.