Ich arbeite derzeit an einem neuronalen Faltungsnetz in Python und implementiere derzeit eine Rückverbreitung. Ab sofort implementiere ich es gerade für die Ausgabebereich und habe den Code nur geschrieben, um die Ableitungen der Vorspannwerte zu berechnen. < /P>
Hier ist der Code: < /p>
def back_prop(self, learning_rate, d_values = None, desired_outputs = None):
self.d_biases = np.zeros((desired_outputs.size, self.biases.size))
self.d_weights = np.zeros((desired_outputs.size, *self.weights.shape))
#checks if the layer is an output to determine the method for finding the derivatives
if self.is_output_layer:
#finds the derivatives of all of the biases in the output layer given respects to the loss
self.d_biases = np.array([[float(softmax(self.output)[x] - 1) if desired_outputs == x else float(softmax(self.output)[x]) for x in range(self.biases.size)] for i in range(desired_outputs.size)])
self.d_biases *= learning_rate
self.d_biases = np.sum(self.d_biases, axis = 0, keepdims = True)
#updates parameters
self.biases += self.d_biases
< /code>
Wanted_outputs ist ein Array der Klassenindizes einer Trainingsstapel und eines Selbst.outputs ist ein 2D -Array, das von Stapeln X -Klassen organisiert wird. Um den Verlust zu berechnen, verwende ich Kreuzentropie und hier ist der Code: < /p>
def check_loss(self, target_indices):
target_percents = self.output[range(len(self.output)),target_indices]
target_percents = np.clip(target_percents, 1e-7, 1-1e-7)
self.losses = -np.log(target_percents)
return np.mean(self.losses)
< /code>
target_indices ist die gleiche Variable wie gewünscht_outputs. Aber jedes Mal, wenn ich versuche, eine Stapel durch das Modell zu verbreiten, nimmt der Verlust zu. Falsch.
Irgendwelche Hinweise, was falsch ist?
Warum nimmt mein Verlustwert zu, wenn ich die Verzerrungen aktualisiere? ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Subklassige Q_ im Pint - Warum nimmt der Super -Anruf keine Argumente an?
by Anonymous » » in Python - 0 Replies
- 7 Views
-
Last post by Anonymous
-