76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

Begonnen von DS_Starter, 11 Februar 2024, 14:11:00

Vorheriges Thema - Nächstes Thema

DS_Starter

@all,

bezüglich des neuronalen Netzes für die Verbrauchsprognose habe ich einige Erweiterungen vorgenommen um die Einstellmöglichkeiten für das Training zu erweitern. Es gibt immer Fälle wo die bisherigen Möglichkeiten nicht ausreichen oder zumindest für einen Test gut wäre sie zu haben.

So gibt es jetzt:

- neuen Schlüssel aiConTrainLimit: Damit kann man die Trainingsdaten z.B. auf die neuesten 4000 Datensätze (ca. 5 Monate) begrenzen. Dadurch kann man saisonale Effekte oder Daten durch veränderte Consumer im Haushalt die es früher nicht gab (oder erst neu gibt) im dem Training berücksichtigen.

- man kann jetzt mehr Neuronenlayer, z.B. 32-16-8-8 einsetzen. D.h. die Tiefe des Netzes kann größer werden
- die Lernrate (aiConLearnRate) kann weiter runtergeregelt werden um ein langsameres Lernen bzw. eine spätere Konvergenz zu erreichen. Der Einstellbereich geht nun von 0.0001-0.05.

Neben den erweiterten Einstellmöglichkeiten gibt es nun einen eingebauten Architekturberater der die Architektur des Netzes auf Grundlage der verfügbaren (oder eingestellen) Trainingsdatenmenge zusammen mit den Trainingsergebnissen prüft und Vorschläge zur Einstellung macht, z.B.:

* Architektur möglicherweise zu klein für die Datenmenge: Verhältnis Trainingsdaten zu Netzparametern ist 1.0 (Zielwert: 8–20) - größere Architektur wie z.B. 16-9-8 versuchen (aiControl->aiConHiddenLayers)
* Empfohlene Lernrate für die vorgeschlagene Architektur 16-9-8 mit 61 Inputs: 0.0030 (aiControl->aiConLearnRate)

Natürlich ist das keine 100%ige Erfolgsgarantie, aber es hilft die richtigen Schritte zu gehen, Einstellungen zu testen und mit etwas Erfahrung und Gefühl optimale Ergebnisse zu erzielen.

Besonders auch der Einsatz von aiConTrainLimit kann sehr hilfreich sein. Man muß bei weniger Daten auch die Größe des Netzes verringern, also z.B. auf aiConHiddenLayers=32-16 zu gehen statt aiConHiddenLayers=80-40-20. Der Berater hilft dabei.

Update liegt im Contrib.

LG,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

300P

Hallo Heiko,

ich bekomme nach dem shutdown/restart mit der letzten Version

->> V2.6.10 "# $Id: 76_SolarForecast.pm 31273 2026-05-24 15:11:25Z DS_Starter $"

nach dem Start alle ca. 15 Sekunden ein Perlwarning jeweils mit dem SF-Interval:
026.05.24 20:58:26 0: Featurelevel: 6.4
2026.05.24 20:58:26 0: Server started with 442 defined entities (fhem.pl:30992/2026-03-21 perl:5.036000 os:linux user:fhem pid:465525)
2026.05.24 20:58:31 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 2330) line 73.
2026.05.24 20:58:46 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 4295) line 73.
2026.05.24 20:59:01 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 5874) line 73.
2026.05.24 20:59:16 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 6588) line 73.
2026.05.24 20:59:31 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 7200) line 73.
2026.05.24 20:59:39 2: AttrTemplates: got 272 entries
2026.05.24 20:59:46 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 7958) line 73.
2026.05.24 20:59:50 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 8704) line 73.
2026.05.24 21:00:01 1: Forecast DEBUG> start add AI raw data for hour: 21
2026.05.24 21:00:01 1: Forecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.05.24 21:00:01 1: Forecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_Forecast
2026.05.24 21:00:02 1: Forecast DEBUG> DRIFT SAFETY [con]: block=none
  -- RMSE Analysis --
     rmse_rel_ratio=2.712 | dynamic_limit=4.932 | margin=2.219 ok
     Limit Composition: base=4.0 | peak_part=0.326 (peak_ratio=0.326) | sem_part=0.309 (sem_ratio=0.804) | var_part=0.297 (slope_var=0.59354)
  -- Slope Analysis --
     slope_live=0.700 | slope_drift=0.824 | slope_rel_drift=0.176 | slope_var=0.59354
     slope_var_limit=19.62200 | var_ratio=0.03 ok
  -- Bias Analysis --
     bias_live=825.7 | bias_limit=931.2 | bias_ratio=0.89 ok
     quant30=776.0 | quant90=2092.0 | median_load=990.0
  -- Context --
     drift_score=1.771 | bias_drift_norm=0.192 | bias_var_norm=0.313
     peak_ratio=0.326 | sem_ratio=0.804
2026.05.24 21:00:02 1: Forecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.700 | DriftSlope=0.824 | BiasLive=825.65 | DriftBias=72.28 | RMSErelLive=89.5 | RMSErelRatio=2.71 | BiasVarNorm=0.31 | DriftIndex=1.58 | DriftScore=1.77 | Zone3Hours=6 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.05.24 21:00:02 1: Forecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_Forecast
2026.05.24 21:00:02 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 9204) line 73.
2026.05.24 21:00:18 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 10272) line 73.
2026.05.24 21:00:19 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 10465) line 73.
2026.05.24 21:00:33 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 11977) line 73.
2026.05.24 21:00:48 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 12869) line 73.
2026.05.24 21:01:03 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 13593) line 73.
2026.05.24 21:01:18 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 14057) line 73.
2026.05.24 21:01:33 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 14745) line 73.
2026.05.24 21:01:48 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 15120) line 73.
2026.05.24 21:02:03 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 15774) line 73.
2026.05.24 21:02:18 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 16480) line 73.
2026.05.24 21:02:33 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 17296) line 73.
2026.05.24 21:02:48 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 17664) line 73.
2026.05.24 21:03:03 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 18298) line 73.
2026.05.24 21:03:18 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 18961) line 73.
2026.05.24 21:03:33 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 19624) line 73.
2026.05.24 21:03:48 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 20254) line 73.
2026.05.24 21:04:03 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 21581) line 73.
2026.05.24 21:04:18 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 22329) line 73.
2026.05.24 21:04:33 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 23344) line 73.
2026.05.24 21:04:48 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 23784) line 73.
2026.05.24 21:05:03 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 24298) line 73.



Ich lasse neu trainieren - mal sehen ob es den weg geht ?!


EDIT:

und das kommt auch
The key 'aiConLearnRate=0.0001' is not specified correctly. Please refer to the command reference.

Ich gehe wieder zurück ;)
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast| DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP| ESP32_AI_on_the_Edge|ESP32CAM usw.