Zaczynam swoją przygodę ze sztuczną inteligencją w python, jako pierwszy "projekt" postanowiłem napisać klasyfikator samochodów na podstawie jego danych takich jak: przyspieszenie, masa, liczba siedzeń, ale nie działa, nie umiem znaleźć problemu. Z góry dziękuję za pomoc .
import numpy as np
def schodkowa(x):
return (x > 0).astype(int)
class SiecNeuronowa:
def __init__(self):
np.random.seed(1)
self.wagi = np.random.randn(3) # np.random.randn(ile) generuje listę tylu liczb ile podamy w jej argumencie
self.bias = np.random.randn(1)
def przejscie_wprzod(self, dane):
suma = np.dot(dane, self.wagi) + self.bias
return schodkowa(suma)
def trenuj(self, dane, oczekiwane, epoki=100, wsp_uczenia=0.1):
i = 0
for _ in range(epoki):
for j in range(len(dane)):
wyjscie = self.przejscie_wprzod(dane[j])
blad = oczekiwane[j] - wyjscie
# Aktualizacja wag (proste dostrajanie)
self.wagi += dane[j] * blad * wsp_uczenia
self.bias += blad * wsp_uczenia
i+=1
print(f'To zajęło: {i} epok')
# Dane uczące (przyspieszenie, masa, liczba siedzeń)
dane_uczace = np.array([
[3.2, 1400, 2], # Sportowy
[4.1, 1300, 2], # Sportowy
[5.8, 1600, 4], # Sportowy
[6.5, 1800, 5], # Normalny
[7.2, 2000, 5], # Normalny
[8.3, 2200, 7], # Normalny
[5.0, 1550, 2], # Sportowy
[7.5, 1900, 5] # Normalny
])
etykiety = np.array([1, 1, 1, 0, 0, 0, 1, 0]) # 1 = sportowy, 0 = normalny
# Tworzenie i trenowanie sieci
siec = SiecNeuronowa()
siec.trenuj(dane_uczace, etykiety, epoki=20000, wsp_uczenia=0.1)
# Testowanie na nowych danych
testowe_samochody = np.array([
[4.5, 1500, 2], # Powinno być sportowy
[6.8, 1700, 5], # Powinno być normalny
[5.5, 1450, 2], # Powinno być sportowy
[7.0, 2100, 7] # Powinno być normalny
])
przewidywania = siec.przejscie_wprzod(testowe_samochody)
print("Przewidywania:", przewidywania)