Il debug delle reti neurali di solito comporta la modifica di iperparametri, la visualizzazione dei filtri appresi e la stampa di metriche importanti. Potresti condividere quali iperparametri stai usando?
- Qual è la dimensione del tuo lotto?
- Qual è il tuo tasso di apprendimento?
- Che tipo di codificatore automatico stai usando?
- Hai provato a utilizzare un autodificatore Denoising? (Quali valori di corruzione hai provato?)
- Quanti strati nascosti e di quali dimensioni?
- Quali sono le dimensioni delle immagini di input?
Anche l'analisi dei registri di allenamento è utile. Traccia un grafico della perdita di ricostruzione (asse Y) in funzione dell'epoca (asse X). La tua perdita di ricostruzione sta convergendo o divergendo?
Ecco un esempio di un codificatore automatico per la classificazione di genere umano che era divergente, è stato fermato dopo 1500 epoche, aveva sintonizzato gli iperparametri (in questo caso una riduzione del tasso di apprendimento) e riavviato con gli stessi pesi che stavano divergendo e alla fine convergevano.
Eccone uno che converge: (lo vogliamo)
La vaniglia "non vincolata" può incorrere in un problema in cui semplicemente imparano la mappatura dell'identità. Questo è uno dei motivi per cui la community ha creato i sapori Denoising, Sparse e Contractive.
Potresti pubblicare un piccolo sottoinsieme dei tuoi dati qui? Sarei più che disposto a mostrarti i risultati di uno dei miei autoencoder.
Nota a margine: potresti chiederti perché stai usando le immagini dei grafici in primo luogo quando quei grafici potrebbero essere facilmente rappresentati come un vettore di dati. Vale a dire,
[0, 13, 15, 11, 2, 9, 6, 5]
Se riesci a riformulare il problema come sopra, essenzialmente stai semplificando la vita del tuo codificatore automatico. Non è necessario prima imparare a vedere le immagini prima di poter provare a imparare la distribuzione generatrice.
Risposta di follow-up (dati forniti)
Ecco i filtri di un'unità nascosta 1000, Autoencoder Denoising a strato singolo. Nota che alcuni dei filtri sono apparentemente casuali. Questo perché ho smesso di allenarmi così presto e la rete non ha avuto il tempo di imparare quei filtri.
Ecco gli iperparametri con cui l'ho allenato:
batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2
Ho smesso di pre-allenamento dopo la 58a epoca perché i filtri erano sufficientemente buoni per essere pubblicati qui. Se fossi in te, mi allenerò per iniziare un codificatore di denoising in pila a 3 strati completo con un'architettura 1000x1000x1000.
Ecco i risultati della fase di messa a punto:
validation error 24.15 percent
test error 24.15 percent
Quindi, a prima vista, sembra meglio del caso, tuttavia, quando osserviamo la suddivisione dei dati tra le due etichette, vediamo che ha esattamente la stessa percentuale (75,85% redditizio e 24,15% non redditizio). Ciò significa che la rete ha imparato a rispondere semplicemente "redditizio", indipendentemente dal segnale. Probabilmente lo farei allenare più a lungo con una rete più grande per vedere cosa succede. Inoltre, sembra che questi dati siano generati da una sorta di set di dati finanziari sottostante. Consiglierei di esaminare le reti neurali ricorrenti dopo aver riformulato il problema nei vettori come descritto sopra. Gli RNN possono aiutare a catturare alcune delle dipendenze temporali che si trovano nei dati della timeseries come questa. Spero che sia di aiuto.