Üdv mindenki!
Eléggé elvetélt próbálkozás, de azért elkezdtem gyúrni ezeket a neuron hálókat.
Van valaki köztetek, aki ért ezekhez? :D
Lenne pár kérdésem.
- 5927 megtekintés
Hozzászólások
Használok neurális hálózatot a diplomamunkámban (MATLAB), bár még kezdő vok a témában. Azért mondjad a kérdéseket, hátha van ötletem.
- A hozzászóláshoz be kell jelentkezni
Jajj, de jó! Köszi!
Az első és legfontosabb kérdés, amire nem kapok semmilyen leírásban választ:
"Miképpen lesz mondjuk egy 'hello' stringből, megfelelő input adat?"
illetve:
"Milyen a megfelelő input adat? 0 és 1 közötti törtszám, vagy egy tetszőleges nagyságú szám?"
- A hozzászóláshoz be kell jelentkezni
Várjál, először is milyen típusú (és topológiájú) hálózattal akarsz dolgozni?
Ellenőrzött tanítású vagy nem ellenőrzött?
- A hozzászóláshoz be kell jelentkezni
Nem akarom túlbonyolítani az elején, ellenőrzöttel kezdeném.
BackPropogation-ben gondolkodom egyelőre.
- A hozzászóláshoz be kell jelentkezni
Mi a konkrét feladat, amit szeretnél megoldani vele?
- A hozzászóláshoz be kell jelentkezni
ejj de rossz ez a rétegződés itt a fórumon :D:D
Naszal első körben lenne egy káromkodásfelismerő.
a "ku*va" kimenete 1
az "asztal" kimenete mondjuk 0
Node az "asztal" -ból pl miképpen lesz input? Hány input neuronom legyen kezdetben? stbstb
- A hozzászóláshoz be kell jelentkezni
A karakterek ASCII kódja is megfelel input-nak, a cellák lehetnek binárisak (ekkor viszonylag sok lesz a bemenő rétegben a cellák száma),
vagy folytonosak attól függetlenül, hogy diszkrét értékeket kapnak. Így karakterenként egy cella a bemenő rétegben. (Az első esetben ugye 8-szor annyi.)
A gond mindíg az, hány cella legyen a rejtett rétegben, egyáltalán hány rejtett réteg legyen. Erre nincs recept.
A kimeneti rétegben a cellák száma annyi, ahány adatot vársz, illetve amennyi a döntést reprezentálni tudja. Esetedben ha jól értem ez 1.
- A hozzászóláshoz be kell jelentkezni
igen, érzésem szerint pont a bemeneti neuronok száma az (egyik) achilles-sarka az egésznek.
Kezdjük az egyszerűbbel:
A kimeneti neuronok száma lehet 2. Legegyszerűbb megközelítésben [1 0] pl a káromkodás és [0 1], ha nem. Mindenképp minimum 2D állapotvektorokkal érdemes dolgozni, mert nyilván sose fogod a fenti vektorokat kapni a hálótól csak mindenféle [0.234 0.893]-öket, és így biztosabban lehet kategorizálni, mintha csak egy számot köpne ki.
Kezdetnek sztem jó a 3 rétegű backpropagation. Kérdés a középső (hidden) rétegbeli neuronok száma. Van erre is kiindulásnak egy ökölszabály, csak a könyvem épp Pesten van én meg otthon :). Aztán persze reszelni kell a neuronok számát, az biztos.
A bementi neuronokra (régen az volt) a mondás, h minél jobban le kell redukálni a bemenő adatmennyiséget, persze úgy, h az értékes infó benne maradjon. Ugyanis a bemeneti neuronok száma meghatározó a tanításhoz szükséges lépések számára nézve. Persze a mai számítási sebességeknél már ez se igazán téma.
Hogy miképp adagold be a szavakat, azon még gondolkozom... skylooker verziója jó ugródeszka.
- A hozzászóláshoz be kell jelentkezni
Kezdem érteni :)
Most az van, hogy van egy valami programom.
Betanítom szépen (4 szóra) egy 10000-es loopban. Beállítódnak szépen az értékek. a Bias és a súly is. Namost akármit írok neki utána, mindig ugyanaz az output értékpár lesz. Minden inputra. :S
Asszem holnap folytatom.
Köszi a segítséget azért, nagyon! Szerintem lesz még kérdésem! :)
- A hozzászóláshoz be kell jelentkezni
Még mindig gondolkozom a bemeneti neuronokon... ami nem tetszik nekem, az ugye a változó szóhossz, ez zavar kicsit a bemenetnél. Még az az eretnek ötletem támadt, h ki kéne próbálni, mennyire működik a rendszer, ha nem a szavakat, hanem minden szó esetében egy hisztogramot adunk be. Kifejtem, mire gondolok.
Csinálsz egy tömböt (vektort), minden eleme megfelel az ABC egy betűjének (+még kategória az írásjeleknek meg vmi "egyéb", ahova minden más megy). Alapból ki van nullázva. Bejön a szó, és egyszerűen megszámolod, melyik betűből (írásjelből) hány darab van benne. És ezt a fix elemű tömböt adod be a hálózatnak.
Ez csak egy ötlet, lehet hülyeség. De lehet pl kombinálni a rendes bemenettel. Mindegyik fajta bemenettel csinálni külön 1-1 hálózatot, aztán a végén még a kettő kimenetét is össze lehet hasonlítani. A tanítást lehet ugyanazzal a halmazzal csinálni, szal nem sok plusz meló egyáltalán.
Ami még érdekes: a tanítóhalmaz: összeszedni sok jó szót meg a káromkodásoknak normál meg mindenféle elfajult (&urva #ny#dat) formáját. Létezik ilyen készen, vagy Magadanak kell megcsinálni? Max veszel vmi magyar szótár file-t, kiszedsz belőle egy rakat jó szót és hozzáírsz egy adag káromkodást :) Az elején szórakoztató feladat mindenféle válfaját kitalálni :D
Az, h nem működik fogható a hidden layer neuronjainak a számára is. Ti. akkor se képes általánosítani, ha túl kevés, ill. ha túl sok. Ezzel kell bűvészkedni.
Ha esetleg lenne kéznél MATLAB Neural Network Toolbox, annak elég jó a helpje, általánosan is magyarázza a működésüket. De asszem mintha ez a help külön is letölthető lenne a www.mathworks.com-ról (némi turkálás után) pdf formátumban.
- A hozzászóláshoz be kell jelentkezni
Nu.
Kezdjünk valami egyszerűbbel: szórzó AI.
2 inputja van, amelyek a szorzandó számok
1 outputja, ami megadja az eredményt.
2:2:1 -es felállásra gondolok (tán elég ennyi)
Megtanítom úgy, hogy mutatok neki 2 inputot meg 1 eredményt, persze sok variációt sokszor.
Mi ebben a tudnivaló? Milyen lesz az output-om? Rábírhatom-e valahogy arra, hogy ne törtszámot adjon, hanem a szorzatot? A back propogatoin a fent említett link szerint működik "még". De ezzel azt érem el tényleg, hogy midnen inputra ugyanaz az eredmény jön :'(
- A hozzászóláshoz be kell jelentkezni
Rövid kérdés a témához: ti 0ról megírtátok az ehhez szükséges dolgokat, vagy vmi libraryt használtok?
- A hozzászóláshoz be kell jelentkezni
0-ról :)
Legalábbis én.
Maga a neurális működés nem nagy bonyolultságú algoritmusok sora. Csak pontosan megérteni, hogy mikor mire és hogyan van szükséged... :S
Na ezzel szívok most én.
Kezdetnek jó kiindulópont:
http://richardbowles.tripod.com/neural/neural.htm
- A hozzászóláshoz be kell jelentkezni
Marha jó link, thx.
- A hozzászóláshoz be kell jelentkezni
Nincs mit! Ebből indultam én is.
- A hozzászóláshoz be kell jelentkezni
A bemeneti réteg celláinak számát az határozza meg, max hány betű lehet a vizsgált szó. ha pl. 15 betűre méretezed és a szó csak 6 betű, a többi tele lesz 0-val, erről gondoskodni kell.
A kimeneti cellák száma itt egyértelműen 1.
Ilyesmihez legalább 2 rejtett réteg kell, de inkább 3. Csak becslés.
Nagyon nagy számú bemeneti minta esetén azonban nem hiszem, hogy jó lesz,
illetve ha tanulásnál nagy mintaszámból tanul, kaotikus lehet.
- A hozzászóláshoz be kell jelentkezni
...és hogy tudod megbecsülni a rejtett rétegek számát? :)
Ha más nem, legalább írhatnál pár példát, hogy milyen típusú feladatokhoz kb. hány rejtett réteg kell.
Üdv,
kl223
- A hozzászóláshoz be kell jelentkezni
CCC-ben elkezdtem egy hálózatot.
Ha gondoljátok, kirakom egy svn repo-ba, és szerkeszthetnénk közösen :D
- A hozzászóláshoz be kell jelentkezni
Nézd meg ezt:
http://www.heatonresearch.com/articles/5/page2.html
Ilyen kétállapotú dolgoknál jobban jársz, ha két neuron ül a kimeneten.
[1 0] ha rendes szó
[0 1] ha káromkodás
És ezekkel kell tanítani.
Tegyük fel, hogy egy neuronod van, és azon megjelenik, h 0.22 (0 jelent káromkodás, 1 nem az). Ez alapján azt gondolnánk, obszcén szóval van dolgunk.
Namost alkalmazzunk két neuront. Ekkor jön egy olyan kimenet, h [0.22 0.35]. Innen már látszik, h kétséges, h jól tippelt-e a hálózat, ugyanis az második kimeneti neuron is kis értéket mutat, holott obszcén szónál annak 1-hez közelinek kéne lennie.
- A hozzászóláshoz be kell jelentkezni
valahogy nagyon nem kóser ez nálam.
Nem tud valaki egy érthető pacal vagy ccc példát mutatni mondjuk egy szórzó hálóhoz?
aminek megmutatódik az 1-es vagy még a 2-es szorzótábla, és utána megtanul szorozni? :D
- A hozzászóláshoz be kell jelentkezni
Egy ilyen szorzat-készítő hálózatnak milyen aktivációs függvényt érdemes megadni?
Illetve elvárhatom-e a hálózattól, hogy a 2 inputon beadott számból az 1 outputon kijöjjön a pontos szorzat?
tehát ha
input1:=5
input2:=4
akkor
output:=20
??
- A hozzászóláshoz be kell jelentkezni
Na találtam egy howtoszeráséget:
http://www.codeproject.com/useritems/brainnet.asp#4.1.%20Training%20Pha…
Ez lett belőle ccc-ben, de hibás:
static TRAIN:=10000
static LEARNING_RATE:=0.5
static ipl:={}
static hl:={}
static ol:={}
static test_pat:={}
static NUM
static MAX_INP:=2
static MAX_HID:=3
static MAX_OUT:=1
******************************************************
class neuron(object)
method initialize
attrib weight
attrib a
attrib threshold
attrib E
attrib change
attrib t_change
******************************************************
function neuron.initialize(this,NUM)
local i
this:weight:=array(NUM)
this:change:=array(NUM)
this:E:=0
this:t_change:=0
this:a:=0
for i:=1 to len(this:weight)
this:weight[i]:=(random()%399+1)/1000
this:change[i]:=0
next
this:threshold:=(random()%399+1)/1000
return this
******************************************************
function sigmoid(x)
return 1/(1+exp(-x))
******************************************************
function populate_arrays()
local i
for i:=1 to len(ipl)
ipl[i]:=neuronNew(MAX_INP)
next
for i:=1 to len(hl)
hl[i]:=neuronNew(len(ipl))
next
for i:=1 to len(ol)
ol[i]:=neuronNew(len(hl))
next
return NIL
******************************************************
function output_error(expout)
local i
for i:=1 to MAX_OUT
ol[i]:E:=expout-ol[i]:a
ol[i]:t_change:=ol[i]:a*(1-ol[i]:a)*ol[i]:E
next
return NIL
******************************************************
function hidden_error()
local i,sum,j
for i:=1 to MAX_HID
sum:=0
for j:=1 to MAX_OUT
sum+=(ol[j]:t_change*hl[i]:weight[j])
next
hl[i]:E:=sum
hl[i]:t_change:=hl[i]:a*(1-hl[i]:a)*hl[i]:E
next
return NIL
******************************************************
function update_params()
local i,j
for i:=1 to MAX_HID
hl[i]:threshold:=hl[i]:threshold + LEARNING_RATE * 1 * hl[i]:t_change
for j:=1 to len(hl[i]:weight)
hl[i]:weight[j]:=hl[i]:weight[j] + LEARNING_RATE * 1 * ipl[j]:a * hl[i]:t_change
next
next
for i:=1 to MAX_OUT
ol[i]:threshold:=ol[i]:threshold + LEARNING_RATE * 1 * ol[i]:t_change
for j:=1 to len(ol[i]:weight)
ol[i]:weight[j]:=ol[i]:weight[j] + LEARNING_RATE * 1 * hl[j]:a * ol[i]:t_change
next
next
return NIL
****************************************************************************
****************************************************************************
****************************************************************************
function teach()
local in1,in2
local i,j
local tab:={{0,0,0},{0,1,0},{1,0,0},{1,1,1}}
for i:=1 to TRAIN
for j:=1 to len(tab)
test_pat:={}
aadd(test_pat,tab[j][1])
aadd(test_pat,tab[j][2])
run_network()
output_error(tab[j][3])
hidden_error()
update_params()
next
next
return NIL
******************************************************
function run_network()
local i,j
local sum
for i:=1 to MAX_INP
sum:=0
for j:=1 to NUM
sum:=sum+ipl[i]:weight[j]*test_pat[j]
next
ipl[i]:a:=sigmoid(sum+ipl[i]:threshold)
next
for i:=1 to MAX_HID
sum:=0
for j:=1 to MAX_INP
sum:=sum+hl[i]:weight[j]*ipl[j]:a
next
hl[i]:a:=sigmoid(sum+hl[i]:threshold)
next
for i:=1 to MAX_OUT
sum:=0
for j:=1 to MAX_HID
sum:=sum+ol[i]:weight[j] * hl[j]:a
next
ol[i]:a:=sigmoid(sum+ol[i]:threshold)
next
return NIL
******************************************************
function main(in1,in2)
local i
NUM:=2
ipl:=array(MAX_INP)
hl:=array(MAX_HID)
ol:=array(MAX_OUT)
populate_arrays()
teach()
aadd(test_pat,val(in1))
aadd(test_pat,val(in2))
run_network()
for i:=1 to MAX_OUT
? "Output preceptron value #"+tostrtrim(i)+"= "+tostrtrim(ol[i]:a)
next
xquit()
return NIL
- A hozzászóláshoz be kell jelentkezni
Mi a napi gyakorlatban használunk neuronhálókat, virtuális
kísérleti adatok előállítására. Az ezzel kapcsolatos
publikációkat megtalálod a public_kukac_meditor_pont_hu
ftp szerveren, a jelszó egy üres [enter].
Mindegyik cikket érdemes elolvasnod, különösen a HM_*.pdf-eseket.
Itt jegyzem meg, hogy a neurális hálók teljesítményével
elégedetlen voltam, ezért kifejlesztettem az ún. "matematikai
kristály"-okat (Zorax-kristályok). Ez utóbbiak segítségével
nagyságrendekkel gyorsabban kapunk sokkal pontosabb erednényt.
A ZORAX kristályokkal kapcsolatban itt találsz néhány apróságot:
http://www.meditor.hu/z_axidef.php
A legújabb fejlesztésekről, amelyek életszerű, kaotikus
rendszerekben (pl tőzsde) vágnak rendet, publikáció nincs,
de ha érdekel néhány részeredményt szívesen közlök.
Üdv: Végvári Lajos [meditor]
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
LEhet, hogy bennem a hiba, de itt nem lelek cikkeket :S
- A hozzászóláshoz be kell jelentkezni
Bocs: ./hrspub alkönyvtár...
Nagyon siettem reggel.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
Nu.
odáig eljutottam, hogy látszólag működik. De csak az utolsó tanítási eredményt jeyzi meg. Mit lehet ezzel kezdeni?
- A hozzászóláshoz be kell jelentkezni
Hi!
Kicsit eltérve az általános kérdésektől (és talán kicsit off); ezúttal egy konkrét feladatom van:
van egy szótáram, benne szavakkal (településnevek, utcanevek, etc.)
A user által beadott stringet kellene "azonosítanom" a szótár elemeinek valamelyikével.
A gond az, hogy előfordulhatnak elírások, előfordulhatnak (pl. utcanevekben) plusz elemek (pl. a hivatalosan Kossuth utcára valaki Kossuth Lajos utcaként keres rá, etc.)
Több megoldás is eszembe jutott. Az egyik egy kissé optimalizált levenshtein algoritmus lenne pl.
Kérdés: neurális hálókat meg lehet ilyesmire megbízhatóan tanítani? Van vkinek tapasztalata ilyen téren?
Ha igen, akkor merre induljak el a témában? (ezúttal célirányosan már)
Kösz előre is,
kl223
- A hozzászóláshoz be kell jelentkezni
Hello!
Sztem neked valami Hopfield szerű hálózatra van szükséged:
http://richardbowles.tripod.com/neural/hopfield/hopfield.htm
- A hozzászóláshoz be kell jelentkezni
Üdv!
Érdemes egy meglévő neuron háló motort használni, pl:
www.jooneworld.com
java alapú és komoly több mint 100 oldalas doski tartozik hozzá. Érdemes a 2-es verziót letölteni ha valakit érdekel, illetve alig pár sorból lehet készíteni egy hálót.
Most képfelismeréssel, közlekedési tábla és betű felismeréssel foglalkozom hobbi szinten, ha valakit érdekel, írjon zoltan.hanisch@gmail.com-ra.
- A hozzászóláshoz be kell jelentkezni