Skip to content

The simple neural network engine implemented without using any libraries

License

Notifications You must be signed in to change notification settings

Smoren/mushroom-neural-simple

Repository files navigation

mushroom-neural-simple

Движок нейронных сетей, написанный с нуля без использования библиотек для машинного обучения.

Имеет своей целью исключительно демонстрацию принципа работы и обучения нейронной сети, то есть является исключительно учебным пособием. Практическое использование движка для решения прикладных задач не имеет смысла, так как он серьезно уступает по производительности решениям, основанным на tensorflow.

Пример сети для распознавания цифр

Для демонстрации работоспособности движка реализована нейросеть, которая учится распознавать цифры на монохромных изображениях формата xpm и разрешения 16x16.

Обучающая выборка находится в директории numbers. Поддиректории с именами 0-9 содержат наборы изображений соответствующих им цифр. Поддиректория test содержит 10 файлов для каждой цифры, имеющие в именах соответствующие им цифры.

Запуск обучения и последующего тестирования работоспособности сети осуществляется командой:

python3 test_numbers.py

Примеры использования средств движка

Создание нейронной сети:

from structs import NeuralNetwork
import activation

nn = NeuralNetwork()  # создаем нейронную сеть
nn.add_input_layer(3)  # добавляем входной слой
nn.add_layer(4)  # добавляем скрытый слой
nn.add_layer(5, 
             activation_class=activation.ActivationSigmoid, 
             random_radius=2)  # добавляем скрытый слой с явно задаными параметрами
nn.add_layer(2)  # добавляем выходной слой

Установка входных сигналов и выполнение прямого прохода:

nn.run([1, 1, 0])

Обучение нейросети на обучающей выборке с заданным коэффициентом скорости:

# готовим обучающую выборку
train_data = [
    [[1, 0, 0], [1, 0]], # [[набор входных сигналов], [эталонные сигналы на выходе]]
    [[0, 1, 0], [1, 1]],
    [[0, 0, 1], [0, 1]],
    [[1, 0, 1], [1, 1]],
    [[0, 0, 0], [0, 0]],
]

# обучаем нейросеть 
for i in range(30):
    loss_total = nn.train(train_data, 0.1)

# выполняем прогон на тестовом примере
nn.run([1, 1, 0])

# получаем данные на выходе сети
print(nn.get_output())

About

The simple neural network engine implemented without using any libraries

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages