Skip to content
Snippets Groups Projects
Commit e38de94b authored by Simon Adick's avatar Simon Adick
Browse files

feat: Perzeptron hinzugefügt

parent 8bfd8a6d
No related branches found
No related tags found
No related merge requests found
import numpy
class Perceptron:
def __init__(self, start_weights: list, threshold: float, transfer_function):
# Das erste Gewicht ist -threshold. Hierdurch muss der Threshold nicht bei jeder Summe mitberechnet werden
self.weights = [- threshold] + start_weights
self.transfer_function = transfer_function
def classify(self, features: list):
"""
Klassifiziert einen Vektor an Merkmalen.
Die Dimension des Merkmalsvektors muss dabei mt der Dimension des Startgewichtvektors übereinstimmen.
"""
if len(features) != len(self.weights) - 1:
print("Es wurden nicht genug Features übergeben")
return
# Das erste Merkmal m_0 ist konstant 1
all_features = [1] + features
transposed_weights = numpy.transpose(self.weights)
# Multipliziere die transponierten mit dem Merkmalsvektor
result = numpy.matmul(transposed_weights, all_features)
# Wende die Aktivierungsfunktion auf das Ergebnis an
return self.transfer_function(result)
from algorithm.pla.perceptron import Perceptron
from algorithm.pla.transfer_functions import normalized_tanh
from server.testserver import get_testdata, send_result
def test_perceptron():
response = get_testdata("perceptron_processing")
results = []
for data in response['data']:
# Hole die einzelnen Traningsdaten
test_id = data['id']
all_weights = data['weights']
features = data['input']
# Der Threshold ist der erste Wert in der Liste.
# Der Rest sind die anderen Gewichte
threshold = all_weights[0] * -1
weights = all_weights[1: len(all_weights)]
# Klassifizere die Trainingsdaten
perceptron = Perceptron(weights, threshold, normalized_tanh)
result = perceptron.classify(features)
# Hänge das Ergebnis in der Liste an
results.append({'id': test_id, 'value': result})
# Sende die Ergebnis-Liste zurück an das IUL
send_result('perceptron_processing', {'session': response['session'], 'results': results})
if __name__ == '__main__':
test_perceptron()
import numpy
def normalized_tanh(value):
""" Der Tangens hyperbolicus hat einen Wertebereich von ]-1, 1[. Diese Funktion normiert den Wertebereich zu ]0, 1["""
# Verschiebe den Tangenz um 1 nach oben --> Wertebereich ]0, 2[
# Teile durch Zwei --> Wertebereich ]0, 1[
return (numpy.tanh(value) + 1) / 2
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment