WMR 25 - Lab IV
Lecture Info
Date:
Course Site: Web Mining e Retrieval (a.a. 2019/20)
Lecturer: Danilo Croce.
Slides: ()
Table of Contents:
1 Keras
Keras offre delle high-level API che utilizzano a loro volta la libreria TensorFlow per la costruzione di reti neurali.
Per definire una rete neurale queste librerie chiedono di definire le seguenti cose:
La funzione che trasforma l'input in vettori utili per la rete.
La funzione che dato l'output della rete calcola la loss del modello.
Il grafo di flusso del modello, ovvero il grafo che che specifica la struttura interna della rete e che permette di definire come l'output è calcolato a partire dell'input.
1.1 Batch, Steps and Epochs
Durante il processo di training, al posto di calcolare la loss su un elemento alla volta, che potrebbe portare a situazioni di overfitting, si è subito preferito calcolare la loss su un batch di elementi alla volta.
L'idea è quindi quella di prendere un tot. di elementi (chiamato batch), e di utilizza la rete neurale su questi elementi per ottenere un risultato. Durante questo calcolo i pesi della rete sono tutti fissati (singolo step), e alla fine si calcola la loss su tutti gli elementi calcolati.
Per rendere più efficiente il calcolo della rete su un determinato batch al posto di considerare i singoli input come singoli vettori, si raggruppano questi vettori in matrici \(n \times b\), dove \(b\) è l'iperparametro che specifica il batch utilizzzato. Così facendo l'input (e anche l'output) diventa una matrice, che contiene tutti i "vettori" di input.
Il numero di epoche (epochs) invece specifica quante volte la rete andrà a vedere i vari esempi del training set set.
L'idea è quindi quella di prendere il dataset di training, dividerlo in batch di \(b\) elementi, dove tendenzialmente \(b \approx 50\), e ripetere questo procedimento un numero \(e\) di volte.
1.2 API Examples
1.2.1 The Sequential API
import keras from keras import layers model = keras.Sequential() model.add(layers.Dense(20, activation='relu', input_shape=(10,))) model.add(layers.Dense(20, activation='relu')) model.add(layers.Dense(10, activation='softmax')) model.fit(x, y, epochs=10, batch_size=32)
1.2.2 The functional API
import keras from keras import layers input = keras.Input(shape=(10,)) x = layers.Dense(20, activation='relu')(x) x = layers.Dense(20, activation='relu')(x) outputs = layers.Dense(10, activation='softmax')(x) model = keras.Model(inputs, outputs) model.fit(x, y, epochs=10, batch_size=32)
1.2.3 Sequential NN examples
Il seguente codice mostra come costruire una semplice rete neurale sequenziale utilizzando keras.
# Model initialization: model = Sequential() # A simple model: model.add(Dense(units=20, input_dim=28*28)) model.add(Activation('relu')) #why don't I have the dropout here? # A bit more complex model: #model.add(Dense(units=50, input_dim=28*28)) #model.add(Activation('relu')) #model.add(Dropout(0.2)) model.add(Dense(units=20)) model.add(Activation('relu')) model.add(Dropout(0.2)) # The last layer needs to be like this: model.add(Dense(units=10, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary())
2 Example 1
from keras.models import Sequential import numpy as np np.random.seed(100) model = Sequential()
dim_input = 2 dim_hidden = 2 model.add(Dense(dim_hidden, input_dim = dim_input, init='uniform')) model.add(Activation('sigmoid'))
dim_output = 1 model.add(Dense(dim_output, input_dim = dim_hidden)) model.add(Activation('sigmoid'))