This shows you the differences between two versions of the page.
gp:laboratoare:07 [2025/03/30 20:41] maria_anca.balutoiu [Tasks] |
gp:laboratoare:07 [2025/03/30 21:12] (current) maria_anca.balutoiu [Implementarea unui GAN în PyTorch] |
||
---|---|---|---|
Line 23: | Line 23: | ||
În timp, Generatorul devine foarte bun la producerea de date care sunt aproape imposibil de distins de datele reale, în timp ce Discriminatorul devine din ce în ce mai bun în a distinge datele reale de cele false. | În timp, Generatorul devine foarte bun la producerea de date care sunt aproape imposibil de distins de datele reale, în timp ce Discriminatorul devine din ce în ce mai bun în a distinge datele reale de cele false. | ||
- | <hidden> | ||
- | </hidden> | + | ==== Layers ==== |
+ | Într-un GAN, straturile din rețelele generatoare și discriminatoare îndeplinesc roluri specifice în generarea și distingerea datelor reale de cele false. | ||
+ | |||
+ | === Generator Layers === | ||
+ | * **Input Layer (Latent Vector):** Intrarea către generator este de obicei un vector aleatoriu de dimensiune fixă. Acest vector este prelevat dintr-un spațiu latent. Vectorul latent este o sursă de aleatorie pe care Generatorul o folosește pentru a produce diverse rezultate. Aceasta ar putea reprezenta diferite tipuri de conținut generat (de exemplu, diferite fețe, texturi sau terenuri). | ||
+ | * **Fully Connected (Linear) Layers:** Datele de input sunt trecute prin mai multe straturi complet conectate (adesea straturi **nn.Linear()** în PyTorch). Aceste straturi învață să mapeze inputul aleator la reprezentări de dimensiuni mai mari. Fiecare strat complet conectat efectuează o transformare liniară (o multiplicare a matricei) urmată de o funcție de activare neliniară. | ||
+ | * **Funcțiile de Activare:** Funcțiile des folosite de activare sunt **ReLU (Rectified Linear Unit)**, **LeakyReLU** sau **Tanh**. Acestea introduc neliniaritatea modelului, permițându-i să învețe modele complexe. | ||
+ | * **ReLU** este utilizat pe scară largă în straturile intermediare ale generatorului, deoarece ajută rețeaua să învețe mai repede și să evite problema gradientului care dispare. | ||
+ | * **Tanh** (de obicei în stratul de ieșire) este adesea folosit pentru a scala ieșirea la un interval între -1 și 1, făcându-l potrivit pentru generarea de pixeli de imagine sau alte date continue. | ||
+ | * **Output Layer:** Remodelează rezultatul pentru a se potrivi cu forma dorită (de exemplu, o imagine de 64x64). | ||
+ | |||
+ | === Discriminator Layers === | ||
+ | * **Input Layer (Imagine sau Date):** Inputul este fie o imagine reală din setul de date de antrenament, fie o imagine falsă generată de Generator. | ||
+ | * **Convolutional Layers (pentru imagini):** Pentru sarcinile legate de imagini, se folosesc adesea **rețele neurale convoluționale (CNN)**, care aplică straturi convoluționale datelor de intrare. Aceste straturi învață să extragă caracteristici din imaginea de intrare, cum ar fi laturi, texturi și modele. Straturile convoluționale folosesc filtre care parcurg toată imaginea și detectează aceste caracteristici. | ||
+ | * Straturile de grupare (cum ar fi **MaxPooling**) pot fi folosite după pentru a reduce dimensionalitatea și a evidenția cele mai importante caracteristici. | ||
+ | * **Fully Connected (Linear) Layers:** După extragerea caracteristicilor (prin convoluție și pooling), caracteristicile se aplatizează într-un vector, iar datele trec prin straturi complet conectate. Aceste straturi învață să ia decizii finale cu privire la faptul dacă intrarea este reală sau falsă. | ||
+ | * **Funcții de Activare:** | ||
+ | * **LeakyReLU** este adesea folosit ca funcție de activare în straturile ascunse ale Discriminatorului. | ||
+ | * Stratul de ieșire utilizează de obicei funcția **Sigmoid** (sau uneori **Softmax**) pentru a genera o probabilitate între 0 și 1. Această probabilitate reprezintă probabilitatea ca intrarea să fie reală (aproape de 1) sau falsă (aproape de 0). | ||
+ | |||
+ | ==== Implementarea unui GAN în PyTorch ==== | ||
+ | <code> | ||
+ | class Generator(nn.Module): | ||
+ | def __init__(self): | ||
+ | super(Generator, self).__init__() | ||
+ | self.model = nn.Sequential( | ||
+ | nn.Linear(100, 256), # First linear layer (input: 100 -> 256) | ||
+ | nn.ReLU(), # Activation function | ||
+ | nn.Linear(256, 512), # Second linear layer (256 -> 512) | ||
+ | nn.ReLU(), # Activation function | ||
+ | nn.Linear(512, 1024), # Third linear layer (512 -> 1024) | ||
+ | nn.ReLU(), # Activation function | ||
+ | nn.Linear(1024, 64*64), # Final layer (1024 -> 64x64 terrain) | ||
+ | nn.Tanh() # Activation function for output (-1 to 1) | ||
+ | ) | ||
+ | |||
+ | def forward(self, x): | ||
+ | return self.model(x).view(-1, 64, 64) | ||
+ | </code> | ||
==== Tasks ==== | ==== Tasks ==== | ||
- Generați o hartă aleatoare de teren folosind o rețea Generator. | - Generați o hartă aleatoare de teren folosind o rețea Generator. | ||
- | - **Bonus.** | + | - **Bonus.** Antrenați un GAN pentru generare de teren. |