[PHP] Neuraal netwerk opslaan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Gisteravond heb ik een groot deel van een Artificial Neural Network geimplementeerd in PHP. Tot nu toe lijkt dit gewoon prima te werken.

Nu kom ik echter op het volgende punt, ik wil de netwerken ook op kunnen slaan. Hiervoor zijn 3 mogelijkheden:

1. Opslaan met serialize in een file. Lijkt mij niet erg handig omdat ik het zo wil implementeren dat het performancewijs vaak aangeroepen kan worden, inclusief concurrente aanroepen.
2. Opslaan met serialize in een database (gewoon tabel met tekstcolumn en per netwerk een record)
3. Alle weights van de neuronen in de database opslaan.

Nu vraag ik me echt af welke oplossing de beste performance zal geven. Zoals gezegd, concurrente aanroepen moeten kunnen, en zo snel mogelijk (qua tijd/cpu).

- = Step Into The Pit | Industrial Strength = -


Acties:
  • 0 Henk 'm!

Verwijderd

optie 3 lijkt mij het makkelijkst/snelst , je hoeft dan alleen copies van je (standaard/template/insert jouw term) NN te maken en die te laden met de desbetreffende weights uit de DB
voordeel: je kan de weights makkelijk in tabelletjes laten zien.
en je kan de weights van verschillende netwerken makkelijker met elkaar vergelijken.
met serialize is dat niet zo makkelijk

Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Het grootste probleem lijkt me alle weights goed op te slaan en weer duidelijk uit te lezen (niet onmogelijk hoor, alleen stuk lastiger dan met serialize). De voordelen om weights in tabellen uit te drukken doen met niet zoveel, dat is op te lossen met een Neuron->toString() functie (en ook in Layer en Network).

Dus performance blijft er over. Weights per stuk sneller dan een serialize.. Iemand daar ervaring mee?

- = Step Into The Pit | Industrial Strength = -


Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 08-09 13:47
Extra optie: Gebruik shared memory. MMcache maakt de implementatie daarvan een stuk gemakkelijker.

Natuurlijk is dit alleen een optie in een controlled environment. De meeste servers hebben geen MMcache geinstalleerd staan (aanrader trouwens voor drukke servers!).

Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Ik zal er eens op zoeken. Persoonlijk zat ik er ook al aan te denken om het netwerk in de applicatie array ($Global toch in PHP? :? ) op te slaan. Maar dan nog zal ik m ook ergens moeten kunnen wegschrijven, voor het geval van system crashes e.d.

- = Step Into The Pit | Industrial Strength = -


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

$Global is niet de applicatie array :). Serializen lijkt me op zich helemaal zo traag nog niet. Zeker als het vaak aangeroepen wordt, wordt het waarschijnlijk door je disk cache wat versneld. Het ge-serialized in de db opslaan is eigenlijk een beetje onzin. Dit is in principe langzamer dan gewoon in een bestand wegschrijven.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Serializen is sowieso nodig, omdat een DB alleen met een string interface werkt. Je moet dus alle nummers naar decimaal vertalen e.d. Naar file is het iets heftiger, maar anders moet de DB hetzelfde werk doen. Hoe dacht je anders dat de DB het persistent houd? Dat kan niet in RAM. De snelste manier om data op te slaan is in een platte file. Lezen is dan wel langzamer, maar als je het wil schrijven i.v.m. system crashes dan moet je de writes optimaliseren, en niet de reads.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1