Seite 1 von 1

Hilfe!!!

Verfasst: Dienstag 3. Juni 2008, 14:09
von Jimmy
Hallo zusammen!
Ich habe ein wenig Schwierigkeiten bei folgender Aufgabe:

1) Trainieren sie einem Perzeptron( 2 eingänge x1, x2 +Gewichtungen, 1 Bias und variables Abbruchkriterium) die Funktion des logischen ODER's an.

2) Entscheiden sie sich für ein Abbruchkriterium für den Lernprozess und implementieren sie es. warum wurde dieses Kriterium gewählt?

3)Wieviel Iterationen braucht das Netz bei folgenden Startwerten für
w=[1,3,-7] & w=[-20,300,5] bei einer Lernrate von 0,2 & 0,9?

Verfasst: Dienstag 3. Juni 2008, 14:14
von shakebox
das hier hast Du gelesen: http://www.python-forum.de/topic-1689.html?

Wenn Du konkrete Fragen hast, werden hier glaub einige gerne helfen. Aber so ohne irgendwelche eigenen Anfaenge, Codeteile, Ueberlegungen, usw., da ist die Bereitschaft zur Hilfe wohl eher gering.

Verfasst: Dienstag 3. Juni 2008, 14:25
von Jimmy
Hier sind die Anfänge! ja danke habs gelesen;) aber toll das so schnell geantwortet wurde...
Ich komm nicht drauf wie man die logische Funktion ODER abbildet(trainieren)

import numarray as na
import math

def perceptron(x, y, n, debug = 0):
"""implements a perceptron

w = na.zeros(x[0].shape[0], na.Float32) #weights
b = 0 #bias
k = 0 #error count
iteration = 0 #number of iterations
mistake_free = 0
while not mistake_free and iteration < 100:
iteration += 1
if(debug): print "iteration #", iteration
mistake_free = 1
for i in range(len(x)):
actual_out = na.dot(w, x) + b #<w*x> + b
if y * actual_out <= 0:
w += n * y * x
if(debug): print n, y, x, w, b
b += y - actual_out
k += 1
mistake_free = 0
return (w, b, k)

def max_norm(array):
"""Returns the max norm of the network input elements in array"""
norms = []
for vector in array:
sum_sq = 0
for x in vector:
sum_sq += x*x
norms.append(math.sqrt(sum_sq))
return max(norms)

Verfasst: Dienstag 3. Juni 2008, 14:48
von jens

Verfasst: Dienstag 3. Juni 2008, 18:04
von Jimmy

Code: Alles auswählen

import numarray as na 
import math 

Code: Alles auswählen

def perceptron(x, y, n, debug = 0):

"""implements a perceptron

Code: Alles auswählen

w = na.zeros(x[0].shape[0], na.Float32) #weights 
b = 0 #bias 
k = 0 #error count 
iteration = 0 #number of iterations 
mistake_free = 0 
while not mistake_free and iteration < 100: 
iteration += 1 
if(debug): print "iteration #", iteration 
mistake_free = 1 
for i in range(len(x)): 
actual_out = na.dot(w, x[i]) + b #<w*x> + b 
if y[i] * actual_out <= 0: 
w += n * y[i] * x[i] 
if(debug): print n, y[i], x[i], w, b 
b += y[i] - actual_out 
k += 1 
mistake_free = 0 
return (w, b, k) 

def max_norm(array): 
"""Returns the max norm of the network input elements in array"""

Code: Alles auswählen

norms = [] 
for vector in array: 
sum_sq = 0 
for x in vector: 
sum_sq += x*x 
norms.append(math.sqrt(sum_sq)) 
return max(norms)
So besser? ;)

Verfasst: Dienstag 3. Juni 2008, 18:08
von audax
Nicht viel.

Einfach den gesamten Code in die `code`-Tags einschließen.

Verfasst: Dienstag 3. Juni 2008, 18:25
von CM
  • a) braucht es dafür keinen neuen Post, den alten kann man editieren
    b) stimmt die Einrückung nicht - damit ist es immer noch kaum lesbar
    c) gibt es (ganz oben im Forum) den sticky thread "Vor dem Posten lesen" - empfehlenswert ;-)
    d) gebe ich ehrlich zu, daß ich nicht verstanden habe, worum es in der Aufgabe genau geht. Wenn nicht zufällig jemand eine Lösung weiß, dann solltest Du vielleicht das Problem herunterbrechen, so daß auch "Neuronale-Netz-Laien" etwas damit anfangen können.