Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

48 lines
1.6KB

  1. import time
  2. import numpy as np
  3. class Epoch:
  4. def __init__(self, epoch, inputs, labels, learning_rate, batch_size):
  5. self.epoch = epoch
  6. self.loss = -1.0
  7. self.duration = 0
  8. self.learning_rate = learning_rate
  9. self.batch_size = batch_size
  10. self.batches = []
  11. for i in range(0, len(inputs), self.batch_size):
  12. self.batches.append(TrainingBatch(i, inputs[i:i + batch_size], labels[i:i + batch_size]))
  13. self.layer_dl_gradients = []
  14. self.layer_dl_biases = []
  15. self.layer_weights = []
  16. self.finished = False
  17. def start(self):
  18. self.start_time = time.time()
  19. def finish(self, neural_net):
  20. self.finished = True
  21. self.trained_weights = neural_net.get_all_weights()
  22. self.end_time = time.time()
  23. self.duration = self.end_time - self.start_time
  24. def all_predictions(self):
  25. return np.concatenate(np.array([batch.predictions for batch in self.batches]))
  26. def all_labels(self):
  27. return np.concatenate(np.array([batch.labels for batch in self.batches]))
  28. def all_inputs(self):
  29. return np.concatenate(np.array([batch.inputs for batch in self.batches]))
  30. def print_epoch(self):
  31. print(f"Epoch {self.epoch}:")
  32. print(f"Loss: {self.loss}")
  33. print(f"dL / Gradients: {self.layer_dl_gradients}")
  34. print(f"dL / Bias: {self.layer_dl_gradients}")
  35. class TrainingBatch:
  36. def __init__(self, batch_num, inputs, labels):
  37. self.batch_num = batch_num
  38. self.inputs = inputs
  39. self.labels = labels
  40. self.predictions = []