50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
from neuron import Neuron
|
|
from connection import Connection
|
|
import random
|
|
import json
|
|
|
|
class Network():
|
|
def __init__(self):
|
|
self.layers = []
|
|
|
|
def build_layers(self, count:int, input_size:int, output_size:int, layer_size:int):
|
|
|
|
for layer in range(0, count):
|
|
self.layers.append([])
|
|
|
|
for _ in range(0, input_size if layer == 0 else output_size if layer == count - 1 else layer_size):
|
|
self.layers[layer].append(Neuron())
|
|
|
|
|
|
def _connect_layer(self, last_layer, current_layer):
|
|
for last_neuron in last_layer:
|
|
for current_neuron in current_layer:
|
|
connection = Connection(last_neuron, current_neuron)
|
|
last_neuron.connect_out(connection)
|
|
current_neuron.connect_in(connection)
|
|
|
|
def connect_layers(self):
|
|
|
|
for i in range(1, len(self.layers)):
|
|
last_layer = self.layers[i-1]
|
|
current_layer = self.layers[i]
|
|
|
|
self._connect_layer(last_layer, current_layer)
|
|
|
|
def fire(self, vec):
|
|
|
|
for l in range(0, len(self.layers)):
|
|
layer = self.layers[l]
|
|
for i in range(0, len(layer)):
|
|
neuron = layer[i]
|
|
neuron.calc(vec[i] if l == 0 else None)
|
|
|
|
output = []
|
|
|
|
for i in range(0, len(self.layers[-1])):
|
|
layer = self.layers[-1]
|
|
output.append(layer[i].value)
|
|
|
|
return output
|
|
|