Skip to content

Библиотека представляющий инструментарий для создания и обучения полносвязных нейронных сетей. Написана на golang только с помощью стандартных пакетов.

Notifications You must be signed in to change notification settings

Davmgiz/GoblinNeuronet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GoblinNeuronet

Эта библиотека написана на golang с помощью только стандартных пакетов. Она предоставляет простой инструментарий для создания и обучения полносвязных нейронных сетей. Он включает в себя стандартный метод обучения, такой как стохастический градиентный спуск, а также и регуляризации L2. Данная библиотека может быть использована в разнообразных задачах классификации.

Особенности

  • Встроенные операции с матрицами.
  • Встроенные операции с набором данных.
  • Утилиты для работы с данными в формате CSV.
  • Примеры использования для быстрого старта.

Установка

Для начала работы с библиотекой, установите её с помощью go get:

go get github.com/Davmgiz/GoblinNeuronet

Быстрый старт

Пример для обучения и сохранения параметров нейронной сети. Обучение производится на датасете MNIST в формате CSV.

package main

import (
	"fmt"
	"log"

	goblinet "github.com/Davmgiz/GoblinNeuronet/pkg/neural_network"
    "github.com/Davmgiz/GoblinNeuronet/pkg/data_frame"
)

func main() {

	// Считываем данные для обучения.
	dfTrain, err := data_frame.ReadCSV("mnist_train.csv", 60000)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Data train read")

	// Считываем данные для теста.
	dfTest, err := data_frame.ReadCSV("mnist_test.csv", 10000)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Data test read")

	// Кодируем цифру вектором,
	// так как цифр всего 10, то и длина вектора будет 10.
	err = dfTrain.Num2Vec(10)
	if err != nil {
		log.Fatal(err)
	}

	// Создаем нейронную сеть.
	// Так как MNIST имеет изображение длинной 28 на 28, то всё изображение содержит 28 * 28 = 784 пикселя.
	// Получается входной слой будет содержать 784 нейрона.
	// Последний выходной слой будет содержать 10 нейронов, так как всего 10 цифр.
	// В остальных (скрытых) слоях количество нейронов выбирается в результате экспериментов.
	// Так же будем использовать сигмоидальную функцию активации.
	nn := goblinet.NewNeuralNetwork([]int{784, 30, 10}, goblinet.Sigmoid{})

	// Обучаем нейронную сеть с помощью стохастического градиентного спуска.
	// Передаем указатель на данные на которых будет происходить обучение,
	// количество эпох,
	// размер мини батча,
	// скорость обучения,
	// коэффициент регуляризации,
	// устанавливаем печать текущей эпохи,
	// устанавливаем флаг, чтобы при обучении была нормализация данных.
	nn.Sgd(&dfTrain, 1, 10, 0.01, 5, true, true)

	// Печатаем метрику оценки качества (количество правильно угаданных цифр).
	fmt.Println("Accuracy: ", nn.Accuracy(dfTest))

	// Записываем параметры для нейронной сети в файл net_par.txt,
	// чтобы использовать их в следующие разы и снова не обучать нейронную сеть.
	nn.WriteToFile("net_par.txt")
}

Пример для чтения параметров и использования нейронной сети.

package main

import (
	"fmt"
	"log"

	goblinet "github.com/Davmgiz/GoblinNeuronet/pkg/neural_network"
    "github.com/Davmgiz/GoblinNeuronet/pkg/data_frame"
)

func main() {

	// Считываем данные для теста.
	dfTest, err := data_frame.ReadCSV("mnist_test.csv", 10000)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Data test read")

    // Считываем параметры 
    nn, err := goblinet.ReadFromFile("net_par.txt")
    if err != nil{
        log.Fatal(err)
    }
	
	// Печатаем метрику оценки качества (количество правильно угаданных цифр).
	fmt.Println("Accuracy: ", nn.Accuracy(dfTest))
}

Запуск тестов

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

Пример для директории pkg/matrix:

cd pkg/matrix
go test

Документация

Для ознакомления с полной документацией перейдите к файлам внутри пакетов data_frame, matrix, и neural_network.

Лицензия

Этот проект распространяется под лицензией MIT.

Контакты

Если у вас есть вопросы или предложения, пожалуйста, свяжитесь со мной через почту.

About

Библиотека представляющий инструментарий для создания и обучения полносвязных нейронных сетей. Написана на golang только с помощью стандартных пакетов.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages