Differences

This shows you the differences between two versions of the page.

Link to this comparison view

gp:laboratoare:07 [2026/03/30 09:28]
maria_anca.balutoiu [Concepte Cheie]
gp:laboratoare:07 [2026/03/30 09:38] (current)
maria_anca.balutoiu [Tasks]
Line 121: Line 121:
  
 ==== Tasks ==== ==== Tasks ====
-  - Generați ​o hartă aleatoare ​de teren folosind o rețea Generator. +  - Generați ​5 hărți aleatorii ​de teren folosind o rețea Generator
-  - **Bonus.** ​Antrenați un GAN pentru generare ​de teren.+    * Inițializați un Generator 
 +    * Generați 5 terenuri diferite folosind vectori latenți aleatorii 
 +    * Vizualizați cele 5 terenuri într-o grilă 
 +    * Salvați imaginea rezultată 
 +  - **Bonus.** ​Interpolați doi vectori latenți: 
 +    * Generați doi vectori latenți aleatorii (A și B) 
 +    * Interpolați între ei în 10 pași 
 +    * Vizualizați tranziția ​de la A la B 
 +    * Salvați imaginea rezultată
  
-<​hidden>​ 
  
- 
-==== Implementare ==== 
- 
-=== Generarea unui Teren Aleatoriu === 
- 
- 
-=== Interpolarea între Terenuri === 
- 
- 
- 
-**Exemplu vizual al interpolării:​** 
-<​code>​ 
-Pas 1:  100% Start + 0% End     → Terenul A 
-Pas 2:  87.5% Start + 12.5% End → Aproape de A 
-Pas 3:  75% Start + 25% End     → Mai aproape de mijloc 
-... 
-Pas 8:  25% Start + 75% End     → Aproape de B 
-Pas 9:  12.5% Start + 87.5% End → Foarte aproape de B 
-Pas 10: 0% Start + 100% End     → Terenul B 
-</​code>​ 
- 
-=== Vizualizare === 
- 
-<code python> 
-import matplotlib.pyplot as plt 
- 
-def visualize_terrains(terrains,​ titles=None):​ 
-    fig, axes = plt.subplots(1,​ len(terrains),​ figsize=(15,​ 5)) 
-    ​ 
-    for idx, terrain in enumerate(terrains):​ 
-        # Convertim la numpy 
-        terrain_np = terrain.cpu().numpy() 
-        ​ 
-        # Plotăm cu colormap '​terrain'​ 
-        axes[idx].imshow(terrain_np,​ cmap='​terrain',​ vmin=-1, vmax=1) 
-        axes[idx].axis('​off'​) 
-        ​ 
-        if titles: 
-            axes[idx].set_title(titles[idx]) 
-    ​ 
-    plt.colorbar(label='​Altitudine'​) 
-    plt.show() 
-</​code>​ 
- 
-**Colormap '​terrain'​**:​ Palet de culori special pentru reprezentarea terenurilor:​ 
-  * Albastru închis → ape adânci (valori foarte negative) 
-  * Albastru deschis → ape puțin adânci 
-  * Verde → câmpii, păduri (valori aproape de 0) 
-  * Maro → dealuri (valori pozitive mici) 
-  * Gri/Alb → munți înalți (valori foarte pozitive) 
- 
-==== Tasks ==== 
- 
-=== Task Obligatoriu === 
- 
-**Generați 5 hărți aleatorii de teren folosind o rețea Generator.** 
- 
-**Cerințe:​** 
-  - Inițializați un Generator 
-  - Generați 5 terenuri diferite folosind vectori latenți aleatorii 
-  - Vizualizați cele 5 terenuri într-o grilă 
-  - Salvați imaginea rezultată 
- 
-**Cod de pornire:** 
-<code python> 
-# Inițializare 
-generator = Generator(latent_dim=100,​ terrain_size=64) 
- 
-# Generare 
-terrains = generate_random_terrain(generator,​ num_samples=5) 
- 
-# Vizualizare 
-titles = [f"​Teren #​{i+1}"​ for i in range(5)] 
-visualize_terrains(terrains,​ titles=titles) 
-</​code>​ 
- 
-**Ce să observați:​** 
-  * Fiecare teren este diferit (vectori latenți diferiți) 
-  * Terenurile arată ca zgomot structurat (generatorul nu e antrenat) 
-  * Valorile sunt în intervalul [-1, 1] datorită funcției Tanh 
- 
-**Întrebări de reflecție:​** 
-  - De ce terenurile arată diferit unul de altul? 
-  - Cum ar arăta terenurile dacă generatorul ar fi antrenat pe date reale? 
-  - Ce rol are vectorul latent în generarea de teren? 
- 
-=== Task Bonus === 
- 
-**Explorați spațiul latent prin interpolarea între doi vectori latenți.** 
- 
-**Cerințe:​** 
-  - Generați doi vectori latenți aleatorii (A și B) 
-  - Interpolați între ei în 10 pași 
-  - Vizualizați tranziția de la A la B 
-  - Salvați imaginea rezultată 
- 
-**Cod de pornire:** 
-<code python> 
-# Generare vectori latenți 
-torch.manual_seed(42) 
-noise_start = torch.randn(1,​ 100) 
- 
-torch.manual_seed(123) 
-noise_end = torch.randn(1,​ 100) 
- 
-# Interpolare 
-terrains = interpolate_latent_vectors(generator,​ noise_start,​ noise_end, steps=10) 
- 
-# Vizualizare 
-titles = [f"Pas {i+1}/​10"​ for i in range(10)] 
-visualize_terrains(terrains,​ titles=titles) 
-</​code>​ 
- 
-**Ce să observați:​** 
-  * Primul teren (Pas 1) corespunde vectorului de start 
-  * Ultimul teren (Pas 10) corespunde vectorului de final 
-  * Terenurile intermediare sunt combinații ale celor doi vectori 
-  * Tranziția este graduală și continuă (nu sunt salturi bruște) 
- 
-**Întrebări de reflecție:​** 
-  - Cum ați putea folosi interpolarea în game development?​ 
-  - Ce se întâmplă dacă folosiți mai mulți pași de interpolare (ex: 50)? 
-  - De ce e importantă continuitatea în spațiul latent? 
- 
-**Aplicații practice:** 
-  * **Biome transitions**:​ Tranziție smoothă de la deșert la pădure 
-  * **Level variations**:​ Generarea de variații ale aceluiași level 
-  * **Artistic control**: Designer-ul ajustează terenul prin deplasarea în spațiul latent 
- 
-=== Demonstrație Extra (Opțional) === 
- 
-**Reproducibilitatea cu seed-uri** 
- 
-Demonstrați că același seed produce întotdeauna același teren: 
- 
-<code python> 
-# Generăm același teren de 3 ori 
-terrain1 = generate_terrain_with_seed(generator,​ seed=42) 
-terrain2 = generate_terrain_with_seed(generator,​ seed=42) 
-terrain3 = generate_terrain_with_seed(generator,​ seed=42) 
- 
-# Generăm un teren diferit 
-terrain4 = generate_terrain_with_seed(generator,​ seed=999) 
- 
-# Vizualizare 
-terrains = [terrain1, terrain2, terrain3, terrain4] 
-titles = ["Seed 42 (run 1)", "Seed 42 (run 2)", "Seed 42 (run 3)", "Seed 999"] 
-visualize_terrains(terrains,​ titles=titles) 
-</​code>​ 
- 
-**Observații:​** 
-  * Primele 3 terenuri sunt **IDENTICE** 
-  * Al 4-lea teren este **DIFERIT** 
- 
-==== Întrebări de Reflecție Generale ==== 
- 
-  - **Î1:** Care este rolul vectorului latent în generarea procedurală?​ 
-  - **Î2:** De ce folosim funcția Tanh la sfârșitul Generatorului?​ 
-  - **Î3:** Cum ar putea fi folosită interpolarea în spațiul latent pentru a crea tranziții între biome-uri într-un joc? 
-  - **Î4:** Ce avantaje oferă generarea bazată pe seed-uri în game development?​ 
-  - **Î5:** Dacă generatorul ar fi antrenat pe un dataset de munți reali, ce ați aștepta să genereze? 
- 
-==== Notițe Tehnice ==== 
- 
-=== Dimensiuni și Parametri === 
- 
-^ Parametru ^ Valoare ^ Semnificație ^ 
-| **latent_dim** | 100 | Dimensiunea vectorului de zgomot (tipic: 64-256) | 
-| **terrain_size** | 64 | Rezoluția terenului generat (64×64 pixeli) | 
-| **hidden layers** | 256, 512, 1024 | Dimensiunile straturilor ascunse | 
-| **output range** | [-1, 1] | Intervalul valorilor de ieșire (datorită Tanh) | 
- 
-=== Funcții de Activare === 
- 
-**ReLU (Rectified Linear Unit):** 
-  * Formula: f(x) = max(0, x) 
-  * Introduce neliniaritate în rețea 
-  * Permite învățarea de pattern-uri complexe 
-  * Rapid de calculat 
- 
-**Tanh (Tangentă Hiperbolică):​** 
-  * Formula: f(x) = (e^x - e^(-x)) / (e^x + e^(-x)) 
-  * Output în intervalul [-1, 1] 
-  * Folosit la stratul final 
-  * Perfect pentru reprezentarea altitudinii normalizate 
- 
-=== De ce Generatorul Neantrenant Produce Zgomot? === 
- 
-Un Generator **neantrenant** (cu greutăți aleatorii inițiale) produce zgomot structurat pentru că: 
-  - Nu a învățat pattern-urile din date reale 
-  - Greutățile sunt aleatorii → transformări aleatorii 
-  - Structura rețelei impune o formă de bază (64×64), dar conținutul e aleatoriu 
- 
-**Pentru terenuri realiste**, generatorul ar trebui: 
-  - Antrenat pe un dataset de terenuri reale 
-  - Învățat în tandem cu un Discriminator 
-  - Antrenat pentru mii de iterații 
- 
-**În acest laborator**,​ scopul este să înțelegeți:​ 
-  - Cum funcționează un Generator 
-  - Cum spațiul latent controlează output-ul 
-  - Conceptul de interpolare 
-  - Reproducibilitatea cu seed-uri 
- 
-==== Resurse Suplimentare ==== 
- 
-=== Cod Complet === 
- 
-Codul complet pentru laborator se găsește în fișierul: 
-  * **gan_terrain_simple.py** - implementarea completă cu toate funcțiile 
- 
-=== Rulare === 
- 
-<code bash> 
-# Rulează tot laboratorul (task obligatoriu + bonus + demo) 
-python gan_terrain_simple.py 
- 
-# Sau importă funcțiile individual 
-python 
->>>​ from gan_terrain_simple import Generator, generate_random_terrain 
->>>​ generator = Generator() 
->>>​ terrains = generate_random_terrain(generator,​ num_samples=3) 
-</​code>​ 
- 
-=== Dependințe Necesare === 
- 
-<code bash> 
-pip install torch torchvision matplotlib numpy 
-</​code>​ 
- 
-=== Extensii Posibile === 
- 
-Dacă vreți să mergeți mai departe: 
-  * **Antrenarea efectivă a unui GAN** pe terenuri reale (Lab 08?) 
-  * **3D Terrain Generation**:​ Generare de terenuri tridimensionale 
-  * **Conditional GAN**: Control asupra tipului de teren generat (muntos/​plat/​ondulat) 
-  * **Higher Resolution**:​ Generare de terenuri 128×128 sau 256×256 
-  * **Export pentru Unity/​Unreal**:​ Integrare în engine-uri de jocuri 
- 
-==== Referințe ==== 
- 
-  * **Goodfellow et al. (2014)** - "​Generative Adversarial Networks"​ (paper-ul original GAN) 
-  * **PyTorch Documentation** - https://​pytorch.org/​docs/​stable/​index.html 
-  * **Procedural Generation Wiki** - https://​pcg.fandom.com/​wiki/​Procedural_Generation_Wiki 
-</​hidden>​ 
gp/laboratoare/07.1774852137.txt.gz · Last modified: 2026/03/30 09:28 by maria_anca.balutoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0