3.1 KiB
3.1 KiB
Постановка Мы создаем упрощенную версию нейронной сети, которая умеет классифицировать данные на несколько категорий сразу.
- Нейрон (
Neuron): Теперь это отдельный объект, хранящий свои уникальные веса и смещение (bias). Умеет вычислять активацию и корректировать веса методом градиентного спуска. - Слой (
Layer): Содержит список объектовNeuron. Управляет передачей сигналов всем нейронам сразу. - Тренер (
Trainer): Обучает слой, минимизируя среднюю ошибку по всем нейронам.
Задание
Класс Neuron:
- Создайте класс
Neuron. - В
__init__(self, inputs_count, learning_rate)инициализируйтеweights(список случайных значений, например 0.1) иbias(смещение, начните с 0.0). - Метод
predict(self, inputs): верните сумму произведений (входы * веса) +bias. - Метод
train(self, inputs, target):
- Вычислите
prediction = self.predict(inputs). - Вычислите
error = target - prediction. - Обновите веса:
w = w + (error * input * lr). - Обновите смещение:
bias = bias + (error * lr).
Класс Layer:
- Создайте класс
Layer. - В
__init__(self, neurons_count, inputs_count, learning_rate)создайте списокneurons, заполнив егоneurons_countобъектами классаNeuron. - Метод
forward(self, inputs): возвращает список предсказаний каждого нейрона. - Метод
train_layer(self, inputs, targets): принимает список правильных ответов (для каждого нейрона свой). Проходит циклом по нейронам и вызывает у каждого методtrainс соответствующимtarget.
Класс Trainer:
- Создайте класс
Trainer. - Метод
fit(self, layer, dataset, epochs):
- Внешний цикл
for epoch in range(epochs). - Внутренний цикл по датасету: берет
inputsи списокtargets. - Вызывает
layer.train_layer(inputs, targets). - (Опционально) Каждую 10-ю эпоху выводить среднюю ошибку по слою.
Тесты:
- Создайте слой из 2 нейронов (каждый принимает 3 входа).
- Создайте датасет: 3 примера, где каждый пример имеет 3 входа и 2 целевых значения.
- Обучите слой в течение 200 эпох.
- После обучения выведите результат предсказания для нового входа
[0.5, 0.2, 0.1].