Coder Social home page Coder Social logo

genboost's Introduction

Зависимости:

  • Tensorflow 1.1+
  • Pygmo 2.9 +
  • Keras 2.1+
  • numpy 1.14+

Задачи проекта:

В этом проекте исследуется примнение метаэвристических алгоритмов к оптимизации весов нейронных сетей. Рассматривается оптимизация весов в следующих архитектурах:

  1. Полносвязная - dense.py, задача классификации на датасете MNIST.
  2. Рекуррентная - rnn.py, задача бинарной класиификации на датасете IMDB.
  3. Сверточная - cnn.py, задача классификации на датасете MNIST.

Использование:

Для тестирования метаэвристических алгоритмов на примерах 1)-3) необходимо выбрать конфигурацию алгоритма, заполнив файл config.json, и запустить одну из команд:

  • python dense.py
  • python rnn.py
  • python cnn.py

В файле config.json в поле "algo" должно быть записано название одного из алгоритмов оптимизации доступных в Pygmo, остальные поля - параметры алгоритмов. С доступными алгоритмами и параметрами можно ознакомиться здесь: https://esa.github.io/pagmo2/.

После завершения работы скрипта лучший набор весов будет сохранен в файл best_weights_X.bin, а значение качества работы сети при этом наборе весов в файл result_X.json. (X=dense/rnn/cnn).

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

def eval_func(weights):
    ...
    return -1.*quality

Далее необходимо задать задачу оптимизации и создать экземляр оптимизатора:

from scripts.problem import Problem
from scripts.genboost import GenBoost

my_prob = Problem(fit_func=eval_model, dim=N, lb=-l, rb=r)
gb = GenBoost(problem=my_prob)

dim - число весов сети. lb, rb - верхняя и нижняя границы значений весов сети.

Для запуска оптимизации:

with open('config.json') as json_data:
    params = json.load(json_data)
pop = gb.run(params)

После окончания процесса оптимизации переменная pop будет содержать результирующее множнство наборов весов сети.

Лучший набор весов и его качество:

pop.champion_x
pop.champion_f

genboost's People

Contributors

alxkorn avatar evgeniy97 avatar katesim avatar pokushala avatar resi2311 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.