BCELoss for binære pixel-messig segmentering pytorch

stemmer
0

Jeg implementere en UNet for binær segmentering mens du bruker Sigmoid og BCELoss. Problemet er at etter flere gjentakelser nettverket forsøker å forutsi svært små verdier per piksel, mens for noen regioner bør det forutsi verdier nær en (for bakke sannhet maske region). Betyr det gi noen intuisjon om feil atferd?

Dessuten finnes det NLLLoss2d som brukes for pixel-messig tap. For øyeblikket er jeg bare ignorerer dette, og jeg bruker MSELoss () direkte. Bør jeg bruke NLLLoss2d med Sigmoid aktivering lag?

Takk

Publisert på 19/07/2017 klokken 08:17
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Virker for meg som at Sigmoids blir mette aktiverings kart. Bildene er ikke riktig normalisert eller noen batch normalisering lag mangler. Hvis du har en implementering som arbeider med andre bilder kontrollere bildet loader og sørge for at det ikke mette pikselverdiene. Dette skjer vanligvis med en 16-bits-kanaler. Kan du dele noen av inngangsbildene?

PS Sorry for kommentering i svaret. Dette er en ny konto, og jeg får ikke lov til å kommentere ennå.

Svarte 19/07/2017 kl. 10:29
kilden bruker

stemmer
1

Du ønsker kanskje å bruke torch.nn.BCEWithLogitsLoss(), og erstatte den Sigmoid og BCELoss funksjon.

Et utdrag fra dokumenter forteller deg hvorfor det alltid bedre å bruke denne tapsfunksjonen gjennomføring.

Dette tapet kombinerer en Sigmoid lag og BCELoss i en enkelt klasse. Denne versjonen er mer stabil enn numerisk ved hjelp av en vanlig Sigmoid etterfulgt av en BCELoss som, ved å kombinere de operasjoner i ett lag, dra fordel av log-sum-exp utslaget for den nummeriske stabilitet.

Svarte 20/07/2017 kl. 00:04
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more