Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Codice del generatore


Come il generatore crea immagini 28X28X1, partendo da un vettore di rumore casuale di dimensione 100

Spiegazione del Codice del Generatore

Il generatore è una parte cruciale di una rete GAN (Generative Adversarial Network) ed è responsabile della creazione di immagini realistiche a partire da un vettore di rumore casuale.
Analizziamo in dettaglio come il codice per il generatore crea immagini e come definisce le loro dimensioni.

Codice del Generatore



def make_generator_model():
    model = tf.keras.Sequential()
    
    # Primo strato: Dense
    model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100,)))
    model.add(layers.BatchNormalization())
    model.add(layers.ReLU())
    
    # Reshape per creare una mappa di caratteristiche 7x7 con 256 canali
    model.add(layers.Reshape((7, 7, 256)))
    
    # Secondo strato: Conv2DTranspose
    model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))
    model.add(layers.BatchNormalization())
    model.add(layers.ReLU())
    
    # Terzo strato: Conv2DTranspose
    model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False))
    model.add(layers.BatchNormalization())
    model.add(layers.ReLU())
    
    # Quarto strato: Conv2DTranspose
    model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh'))
    
    return model

Dettagli del Processo di Generazione delle Immagini

Input Layer



   model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100,)))


- **Input Shape**: `(100,)`
- **Descrizione**: Questo strato riceve un vettore di rumore casuale di dimensione 100.
Lo strato denso (fully connected) trasforma questo vettore in un tensore di dimensione `7*7*256` (12.544 valori).

Batch Normalization e ReLU


   model.add(layers.BatchNormalization())
   model.add(layers.ReLU())


- **Descrizione**: La Batch Normalization standardizza le attivazioni del layer precedente, migliorando la stabilità e la velocità dell'addestramento.
La funzione di attivazione ReLU introduce non linearità nel modello.

Reshape Layer


   model.add(layers.Reshape((7, 7, 256)))


- **Descrizione**: Questo strato cambia la forma del tensore dallo strato denso in una mappa di caratteristiche tridimensionale `7x7x256`.

Transposed Convolution (Conv2DTranspose)


   model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))
   model.add(layers.BatchNormalization())
   model.add(layers.ReLU())


- **Descrizione**: Uno strato di convoluzione trasposta applica una convoluzione inversa che aumenta la dimensione spaziale delle mappe di caratteristiche.
- **Parametri**:
- **Filtri**: 128
- **Kernel Size**: `(5, 5)`
- **Strides**: `(1, 1)`
- **Padding**: `same`
- **Output Shape**: La dimensione spaziale rimane `7x7`, ma il numero di canali è ridotto a 128.

Secondo Transposed Convolution



   model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False))
   model.add(layers.BatchNormalization())
   model.add(layers.ReLU())


- **Descrizione**: Un'altra convoluzione trasposta per aumentare ulteriormente la dimensione spaziale.
- **Parametri**:
- **Filtri**: 64
- **Kernel Size**: `(5, 5)`
- **Strides**: `(2, 2)`
- **Padding**: `same`
- **Output Shape**: La dimensione spaziale diventa `14x14`, con 64 canali.

Terzo Transposed Convolution



   model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh'))


- **Descrizione**: L'ultimo strato di convoluzione trasposta porta la dimensione spaziale finale a `28x28`.
- **Parametri**:
- **Filtri**: 1 (Immagine in scala di grigi)
- **Kernel Size**: `(5, 5)`
- **Strides**: `(2, 2)`
- **Padding**: `same`
- **Activation**: `tanh`
- **Output Shape**: La dimensione finale dell'immagine è `28x28x1`.

Processo di Generazione delle Immagini

Il generatore prende un vettore di rumore casuale di dimensione 100 e lo trasforma attraverso una serie di strati completamente connessi e convoluzionali trasposti.
Ogni strato convoluzionale trasposto aumenta la dimensione spaziale dell'immagine, mentre il numero di filtri si riduce progressivamente fino a ottenere un'immagine di dimensione `28x28` con un singolo canale (in scala di grigi).
La funzione di attivazione finale `tanh` normalizza i valori dei pixel nell'intervallo [-1, 1].
Questo processo consente alla rete di generare immagini realistiche partendo da input casuali, apprendendo progressivamente le caratteristiche del dataset durante l'addestramento.