Метою цього проєкту є створення фреймворку для реалізації генетичних алгоритмів, які можуть бути використані для оптимізації параметрів нейронних мереж. Проєкт дозволяє експериментувати з різними методами мутації, кросоверу та селекції, а також підтримує роботу як на 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".