Pull to refresh

Comments 19

Не знаю как у вас работает этот пример, но как минимум следующие исправления надо внести (чтобы компилятор не ругался)


@@ -61,6 +61,7 @@
    case 3:
        return "Ничего не делать"
    }
+   return "" // Функция должна возвращать значение
 }

 func main() {
@@ -73,8 +74,8 @@
    // weapon - наличие оружия (0 - нет, 1 - есть)
    // enemyCount - количество врагов
    hp := 0.7
-   weapon := 1
-   enemyCount := 1
+   var weapon float64 = 1 // По умолчанию, GO воспринимает 1 как int
+   var enemyCount float64 = 1 // По умолчанию, GO воспринимает 1 как int

    // Получаем ответ от НС (массив весов)
    out := nn.Forward([]float64{hp, weapon, enemyCount})
Спасибо! Не внимательно переписал код, уже исправил.
Есть мнение, что на таком большом количестве итераций такая сеть просто заучит входные данные и выход на новых будет не очень адекватным.

На самом деле, интересней узнать, как у gonn обстоят дела с платформо-зависимыми оптимизациями. Может ли оно использовать gpu для математики, например. Вообще, для подобной статьи неплохо предложить сравнение с другими библиотеками.
Есть мнение, что на таком большом количестве итераций такая сеть просто заучит входные данные и выход на новых будет не очень адекватным.

Эта сеть, очевидно, переобучится со свистом. Другое дело, что здесь нет никакого сплита на train/test или train/dev/test и оценки базовых параметров получившегося результата (хотя бы банальные fp, fn, precision, recall и f1).

gonn написан на Go без CGO, поэтому не может задействовать GPU и SSE/MMX/и т.д.
Через Go ассемблер можно использовать и SSE, и AVX, а MMX я бы просто не рекомендовал использовать. :)
И это добро реально используют при оптимизации, например, стандартной библиотеки Go.

В Golang очень плохо с такими вещами, как cuda.
Я на go три года и… освоил python для ml, dl. Он лучше. В го очень неудобно и многословно, когда речь заходит про данные и ml — нет именованных параметров, значений по умолчанию, нет коротких конструкций для работы со списками и хэштаблицами, отсутствие удобного функционального подхода, вызовы cgo стали пошустрее, но до python еще далеко.
Всему свой инструмент. Для ds — это python или java.

Как видим, процесс работы с нейронными сетями на Golang такой же, как и с другими языками программирования.

"Такой же" — это наличие метода train? Что-то не очень видно настроек количества скрытых слоёв, всяких развлечений типа dropout'а и подобных регуляризаций, метода спуска и критерия остановки (кроме количества итераций).


Если посмотреть в их примеры, то количество сугубо вспомогательного кода, некритичного к производительности (начальная загрузка и обработка данных) превышает все разумные пределы. Проще и лаконичней написать на Си с использованием cilkplus.


Кому это gonn'о нужно после python'а с приличными библиотеками? Умеет ли оно хотя бы в нативный blas/mkl?

Как я понимаю мотив библиотеки — Python это эксперименты, а Go продакшн (на самом деле надо понимать, что все годные ML-либы в Python'е на C++ или numpy сделаны, поэтому по скорости не уступают, но это не суть). Мне кажется идея такая, но это неточно.

Столь примитивная библиотека выглядит просто смешно как решение для прода (сравните со всякими TensorFlow, Theano, Torch).


Естественно, на python'е в ML почти всегда используется обвязка над нативными реализациями того же BLAS'а. Иии..? Почему это является внезапно минусом?


А насчёт "не уступают" мне интересно увидеть бенчмарк, который это подтвердит. Против numpy+icc+mkl или numpy+gcc+atlas (собранный под конкретный хост, а не из репозитория). Я сильно сомневаюсь, что оно сможет догнать даже numpy+gcc+openblas.

Библиотека как 4 года не поддерживается (2 года назад readme поправили только).
Думаю, кто-то просто пробовал golang и учился. Обучение идет в один поток, параллельная версия медленнее однопоточной (в readme указано). Просто учебный проект, на мой взгляд.
Что-то мне не понятно, он просто выбирает из матрицы готовых решений?
В чем фишка использования нейросетей то в данном случае?
Это простой пример. И он не выбирает из матрицы. Это обучение.
А вот здесь вопрос — как и чему он обучается? По мне так это просто красивое слово «обучается», как добавление слова «блокчейн» ко всему чему можно.
Он обучается на простых примерах. Это как показать человеку, чем он должен заниматься: сначала говорим, какие инструменты и материалы у него есть, а потом говорим, что у него должно получиться. Представим, что этот человек в принципе такими вещами не занимался. Поэтому он будет учиться это делать. И со временем, после обучения, он сможет делать то, что у него просят.
Тут аналогично: я обучил нейросеть на простых примерах, а она теперь сама может «решать», что будет лучше, даже вводить числа з 6 знаками и больше.
Я понимаю если бы он после обучения смог получать данные за пределами введенных на начальном этапе диапазонов, но т.к. все крутится внутри диапазона то в чем фишка данного обучения мне не понятна, поэтому и прошу объяснить в чем цимес и профит данного примера машинного обучения.
Я новичок в ML. Не могли бы вы рассказать почему скрытых нейронов именно 16? И как вы выбирали это значение?
Честно, не знаю, почему автор этой нейронной сети (я просто перевёл её на другой ЯП) выбрал именно число 16. В общем, количество скрытых нейронов подбирается экспериментально. В зависимости от желаемого результата, надо корректировать это значение.
Sign up to leave a comment.

Articles