Un'ultima cosa.
Leggendo le slide PDF ho notato che forse potrebbe esserci un errore.
Nella slide 17 "Creiamo il discriminatore" scrivi: "lo strato di input ha tanti neuroni quanti sono gli elementi di ciascun training case,..." e poi segue "Il singolo stato interno che ha tanti neuroni..."
Il discriminatore è definito come segue
discriminator = Sequential()
discriminator.add(Dense((TRAIN_LEN), activation = "relu"))
discriminator.add(Dropout(DIS_DROPOUT))
discriminator.add(Dense(SAMPLE_LEN, activation = "relu"))
discriminator.add(Dropout(DIS_DROPOUT))
discriminator.add(Dense(1, activation = "sigmoid"))
discriminator.compile(optimizer = "adam",
loss = "binary_crossentropy",
metrics = ["accuracy"])
Questa definizione, se non sbaglio, corrisponde però a una rete con uno strato di Input che si adatta automaticamente alla dimensione del dataset e 2 strati hidden, anzichè uno. Questo perchè con il layer Dense
come primo elemento si dichiara esplicitamente uno strato hidden e implicitamente uno strato di Input la cui dimensione dipende dal dataset.
Per avere una rete con un solo strato hidden ci sono due alternative:
- Rimuovere completamente il primo strato
discriminator = Sequential()
discriminator.add(Dense(SAMPLE_LEN, activation = "relu"))
discriminator.add(Dropout(DIS_DROPOUT))
discriminator.add(Dense(1, activation = "sigmoid"))
discriminator.compile(optimizer = "adam",
loss = "binary_crossentropy",
metrics = ["accuracy"])
oppure
- Sostituire
Dense
con InputLayer
from keras.layers import InputLayer
discriminator = Sequential()
discriminator.add(InputLayer([TRAIN_LEN]))
discriminator.add(Dense(SAMPLE_LEN, activation = "relu"))
discriminator.add(Dropout(DIS_DROPOUT))
discriminator.add(Dense(1, activation = "sigmoid"))
discriminator.compile(optimizer = "adam",
loss = "binary_crossentropy",
metrics = ["accuracy"])
Nella PR che ti ho aperto non ho cambiato però nulla, perchè con 2 strati hidden mi è parso che il generatore fornisse risultati migliori.
Grazie ancora per aver condiviso questo notebook! Mi è stato davvero utile.