Метою цього проєкту є створення фреймворку для реалізації генетичних алгоритмів, які можуть бути використані для оптимізації параметрів нейронних мереж. Проєкт дозволяє експериментувати з різними методами мутації, кросоверу та селекції, а також підтримує роботу як на CPU, так і на GPU.
Проєкт складається з наступних модулів:
Містить базові компоненти для побудови та тренування нейронних мереж:
- Шари:
Linear
- повнозв'язний шар з лінійною трансформацієюConvolutional
- згортковий шар для обробки зображеньCellularAutomata
- шар, що реалізує клітинний автоматFlatten
- перетворює багатовимірний тензор у одновимірнийCast
- шар для зміни типу даних тензора
- Активаційні функції:
ReLU
- випрямлена лінійна функція активаціїSoftmax
- нормалізована експоненційна функція для класифікації
- Клас
Sequential
- контейнер послідовних шарів нейронної мережі - Утиліти для роботи з пристроями: клас
Device
для абстракції CPU/GPU - Утиліти для роботи з багатовимірними масивами (тензорами): класи
Tensor
,Scalar
,CPUTensor
,GPUTensor
Реалізує компоненти для еволюційної оптимізації:
- Мутації:
GaussianMutation
- мутація на основі нормального розподілуScaledMutation
- мутація зі змінним масштабом
- Кросовери:
SinglePoint
- схрещування в одній точціTwoPoint
- схрещування у двох точкахUniform
- рівномірне схрещування
- Селекції:
RouletteSelection
- селекція методом рулеткиTournamentSelection
- турнірна селекціяBestSelection
- вибір найкращих особинRankSelection
- ранжована селекція
- Пайплайни:
ChromosomePipeline
- обробка окремих хромосомGenomePipeline
- комплексна обробка геномів
Відповідає за роботу з датасетами:
Downloader
- завантаження датасетів з мережіDataManager
- абстрактний клас для керування данимиSklearnBalancedDataLoader
- завантаження збалансованих даних з використанням sklearn- Утиліти для квантизації та нормалізації даних для ефективного навчання
Координує взаємодію між компонентами:
FitnessEvaluator
- обчислення функції пристосованостіFitnessMetric
- метрики для оцінки якості моделейGenerationHandler
- базовий клас для обробки поколіньManager
- головний клас для керування процесом еволюції, відповідає за:- Ініціалізацію популяції
- Оцінку функції пристосованості
- Застосування генетичних операторів
- Формування нового покоління
Містить компоненти для моніторингу та збереження прогресу:
PrintHandler
- виведення інформації про прогрес еволюціїSaveHandler
- збереження стану популяції у файлиTableHandler
- запис статистики у табличному форматі (CSV)
Для роботи з фреймворком потрібно:
- Клонувати репозиторій:
git clone https://github.com/draklowell/numba-machine-learning.git
cd numba-machine-learning
- Встановити залежності:
pip install -r requirements.txt
- Створити модель нейронної мережі:
sequential = Sequential(
Input((8, 8), np.dtype("uint8")),
CellularAutomata(rule_bitwidth=1, neighborhood="moore_1", iterations=80),
Flatten(),
Cast(np.dtype("float32")),
Linear(768),
ReLU(),
Linear(10),
Softmax(),
)
- Налаштувати пайплайн генетичного алгоритму:
# Створення пайплайнів для хромосом
chromosome_pipelines = [
ChromosomePipeline(
mutation=GaussianMutation(0.1, 0.5),
crossover=SinglePoint(),
),
# Додаткові пайплайни за потребою
]
pipeline = GenomePipeline(
selection=RouletteSelection(14),
elitarism_selection=BestSelection(3),
pipelines=chromosome_pipelines,
)
- Створити менеджер даних:
sklear_manager = SklearnBalancedDataLoader(
batch_size=10,
process_device=Device.CPU,
storage_device=Device.CPU,
random_state=42,
)
- Запустити алгоритм:
# Створення директорії для збереження результатів
os.makedirs("generations", exist_ok=True)
manager = Manager(
sequential=sequential,
fitness_evaluator=FitnessEvaluator(),
data_manager=sklear_manager,
genome_pipeline=pipeline,
handlers=[
TableHandler(
log_file=open("log.csv", "w"),
log_period=1,
),
PrintHandler(period=1),
SaveHandler(path="generations/{generation}.pkl", period=10)
],
device=Device.CPU,
population_size=10,
)
manager.run(10) # запуск на 10 поколінь
- Кривий Андрій - фреймворк нейромереж
- Леник Нікіта - дані, квантизація та фітнес
- Шимановський Владислав - генетичний алгоритм (Mutation and Crossover), README
- Максимчук Іван - генетичний алгоритм (Selection), звіт
Проєкт створено студентами Українського Католицького Університету в межах курсу "Дискретна Математика 2".