33 lines
871 B
Python
33 lines
871 B
Python
from network import Network
|
|
import json
|
|
import random
|
|
|
|
class Trainer:
|
|
def __init__(self, network: Network, train_file):
|
|
self.network = network
|
|
|
|
with open(train_file, "r") as file:
|
|
f_data = file.read()
|
|
self.data = json.loads(f_data)
|
|
|
|
def adjust(self, check_vec, layer_idx):
|
|
layer = self.network.layers[layer_idx]
|
|
|
|
for i, neuron in enumerate(layer):
|
|
error = check_vec[i] - neuron.value
|
|
neuron.adjust(error)
|
|
|
|
def train(self, iters):
|
|
for i in range(0, iters):
|
|
if i % 100 == 0:
|
|
print(f"Train {round((i / iters) * 100)}%")
|
|
sample = random.choice(self.data)
|
|
in_vec = sample[0]
|
|
check_vec = sample[1]
|
|
|
|
self.network.fire(in_vec)
|
|
|
|
self.adjust(check_vec, len(self.network.layers) - 1)
|
|
|
|
|
|
|