Basierend auf dem Coursera Kurs für maschinelles Lernen, versuche ich die Kostenfunktion für ein neuronales Netzwerk in Python zu implementieren. Es gibt eine question ähnliche - mit einer akzeptierten Antwort - aber der Code in dieser Antwort ist in Oktave geschrieben. Um nicht zu faul zu sein, habe ich versucht, die relevanten Konzepte der Antwort auf meinen Fall anzupassen, und soweit ich das beurteilen kann, implementiere ich die Funktion korrekt. Die Kosten, die ich ausgegeben habe, weichen jedoch von den erwarteten Kosten ab, daher mache ich etwas falsch.Kostenfunktion des neuronalen Netzwerks implementieren (Woche 5 Coursera) mit Python
Hier ist ein kleines reproduzierbares Beispiel:
Der folgende Link führt zu einer .npz
Datei, die (wie unten) geladen werden kann relevante Daten zu erhalten. Benennen Sie die Datei "arrays.npz"
bitte um, wenn Sie sie verwenden.
http://www.filedropper.com/arrays_1
if __name__ == "__main__":
with np.load("arrays.npz") as data:
thrLayer = data['thrLayer'] # The final layer post activation; you
# can derive this final layer, if verification needed, using weights below
thetaO = data['thetaO'] # The weight array between layers 1 and 2
thetaT = data['thetaT'] # The weight array between layers 2 and 3
Ynew = data['Ynew'] # The output array with a 1 in position i and 0s elsewhere
#class i is the class that the data described by X[i,:] belongs to
X = data['X'] #Raw data with 1s appended to the first column
Y = data['Y'] #One dimensional column vector; entry i contains the class of entry i
import numpy as np
m = len(thrLayer)
k = thrLayer.shape[1]
cost = 0
for i in range(m):
for j in range(k):
cost += -Ynew[i,j]*np.log(thrLayer[i,j]) - (1 - Ynew[i,j])*np.log(1 - thrLayer[i,j])
print(cost)
cost /= m
'''
Regularized Cost Component
'''
regCost = 0
for i in range(len(thetaO)):
for j in range(1,len(thetaO[0])):
regCost += thetaO[i,j]**2
for i in range(len(thetaT)):
for j in range(1,len(thetaT[0])):
regCost += thetaT[i,j]**2
regCost *= lam/(2*m)
print(cost)
print(regCost)
In Wirklichkeit sollte cost
0,287629 und 0,383770 cost + newCost
sein sollte.
Dies ist die Kostenfunktion in der Frage oben geschrieben, als Referenz:
Welchen Wert von Lambda verwenden Sie? Um sicherzugehen, welchen Wert erhalten Sie für die Kosten (ich bekomme ~ 10,441)? – bpachev
Können Sie uns Ihre Quelle für die erwarteten Kosten geben? – bpachev
Ich bin sehr zuversichtlich, dass Ihre Implementierung der Kostenfunktion korrekt ist. Ich denke, das Problem liegt in der Berechnung der Aktivierungen. – bpachev