Wpis z mikrobloga

@agsbajahs:

Możesz spróbować coś takiego:

T1*T2 + T3
T1 - tensor wejściowy
T2 - tensor zero-jedynkowy, losowy, o określonej proporcji jedynek
T3 - tensor z losowymi wartościami w tych samych miejscach co T2 ma jedynki, i zerami w tym miejscu gdzie T2 ma zera

Generowanie tensora T2 i T3 z 25% jedynkami.

T2 = (torch.rand(size=T1.shape) < 0.25).int()
T3 = T2*torch.rand(size=T1.shape)
Jeżeli chcesz to wykorzystać do ewentualnej regularyzacji, to standardowy dropout powinien
@dsinaction:

W sumie mógłbyś się obejść z losowaniem wartości w miejscach gdzie T2 + wzór na T3 nie wyznaczy losowych wartości, statystycznie sprowadzi się do macierzy w której losowe 6.25% wartości będzie jedynkami :P

W torchu akurat nie robiłem od lat, ale posiłkując się Twoim kodem + dokumentacją wystarczy jedna linijka:

out = torch.where(torch.rand(size=T1.shape) < 0.25, input, torch.rand(size=T1.shape))

Tylko to uzupełni wartościami od 0 do 1, ale reszta jest trywialna.
Pamiętaj tylko o odpowiednim dopasowaniu później wartości wyjściowej, bo co w przypadku kiedy utniesz zdjęcie w miejscu gdzie jest "pole decyzyjne" dla sieci (np. twarz kota)? Najlepiej sprawdź sobie literaturę od CutOut po CutMix i Copy-Paste
@agsbajahs: No to kod wcześniejszy zrobi ci to dla jednego obrazka albo wszystkich jeśli trzymasz je w jednym tensorze.

Z drobną poprawką:
out = torch.where(torch.rand(size=input.shape) < 0.25, torch.rand(size=input.shape), input)

Około 25% pikseli będzie miało zamienioną wartość na losową z przedziału <0,1>