Code: Alles auswählen
import mnist
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
from skimage import data, io, filters, measure
from skimage.measure import regionprops
import random
import time
###################################### initialize Values ######################################
x = np.linspace(0,5,51)
def basis_function(value,G):
f_x = 2*value*value - G*value + 1
return f_x
k = 0
N = 7
training_set = np.empty([N,2],dtype=np.float64)
t = np.empty(51,dtype=np.float64)
y = np.empty(51,dtype=np.float64)
for i in range(x.size):
y[i] = basis_function(x[i],5)
for i in range(x.size):
t[i] = y[i]+ np.random.normal(0,4)
for i in range(0,51,8):
training_set[k] = x[i],t[i]
k+=1
d = 2
psi = np.empty(d+1,dtype=np.float64)
psi[0] = 1
Um den Gradienten zu berechnen bin ich nach diesem Skript https://svivek.com/teaching/machine-lea ... ession.pdf vorgegangen. Ich setze grad = w damit dieser vektor die selbe Form hat wie w.
Code: Alles auswählen
w = np.empty(d+1,dtype=np.float64)
w.fill(random.uniform(0,5))
grad = w
def gradient(target,weight,training,inputvector,N):
for j in range(d):
for i in range(N):
k = 1
psi[k] = x[i]
psi[k+1] = x[i]*x[i]
element = t[i]- np.dot(weight,psi)
element = -training[i][j]*element
grad[j] += element
return grad
Code: Alles auswählen
def LMS(target,training,inputvector,N,weight):
learning_rate = 0.01
condition = True
while condition:
dE_dw = gradient(target,weight,training,inputvector,N)
weight = weight - learning_rate * dE_dw
if(dE_dw[0]<1 and dE_dw[0]>0.1):
if(dE_dw[1] <1 and dE_dw[1]>0.1):
condition = False
return weight
Ich denke das etwas mit meiner Gradienten Funktion nicht funktioniert, wobei diese mir zumindest Werte liefert, wenn ich sie alleine aufrufe.
Ich hoffe meine Code ist halbwegs verständlich und mir kann jemand weiter helfen.