Also versuche ich, mir neuronale Netze beizubringen (für Regressionsanwendungen, ohne Bilder von Katzen zu klassifizieren).
Meine ersten Experimente waren das Trainieren eines Netzwerks zur Implementierung eines FIR-Filters und einer diskreten Fourier-Transformation (Training für "Vorher" - und "Nachher" -Signale), da dies beide lineare Operationen sind, die von einer einzelnen Schicht ohne Aktivierungsfunktion implementiert werden können. Beide haben gut funktioniert.
Also wollte ich sehen, ob ich ein hinzufügen abs()
und ein Amplitudenspektrum lernen kann. Zuerst habe ich darüber nachgedacht, wie viele Knoten in der verborgenen Schicht benötigt werden, und festgestellt, dass 3 ReLUs für eine grobe Annäherung von ausreichen. Deshalb abs(x+jy) = sqrt(x² + y²)
habe ich diese Operation selbst an einzelnen komplexen Zahlen getestet (2 Eingänge → 3 verborgene ReLU-Knotenschicht → 1) Ausgabe). Gelegentlich funktioniert es:
Aber die meiste Zeit, in der ich es versuche, bleibt es in einem lokalen Minimum stecken und findet nicht die richtige Form:
Ich habe alle Optimierer und ReLU-Varianten in Keras ausprobiert, aber sie machen keinen großen Unterschied. Kann ich noch etwas tun, um einfache Netzwerke wie dieses zuverlässig zusammenzuführen? Oder gehe ich das nur mit der falschen Einstellung an und du sollst einfach mehr Knoten als nötig auf das Problem werfen und wenn die Hälfte von ihnen stirbt, wird das nicht als große Sache angesehen?