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).
И это добро реально используют при оптимизации, например, стандартной библиотеки Go.
Знаю. Вот пример использования. Но в 2017 писать на ассемблере ML библиотеки, это грустно.
В Golang очень плохо с такими вещами, как cuda.
Я на go три года и… освоил python для ml, dl. Он лучше. В го очень неудобно и многословно, когда речь заходит про данные и ml — нет именованных параметров, значений по умолчанию, нет коротких конструкций для работы со списками и хэштаблицами, отсутствие удобного функционального подхода, вызовы cgo стали пошустрее, но до python еще далеко.
Всему свой инструмент. Для ds — это python или java.
Как видим, процесс работы с нейронными сетями на Golang такой же, как и с другими языками программирования.
"Такой же" — это наличие метода train
? Что-то не очень видно настроек количества скрытых слоёв, всяких развлечений типа dropout'а и подобных регуляризаций, метода спуска и критерия остановки (кроме количества итераций).
Если посмотреть в их примеры, то количество сугубо вспомогательного кода, некритичного к производительности (начальная загрузка и обработка данных) превышает все разумные пределы. Проще и лаконичней написать на Си с использованием cilkplus.
Кому это gonn'о нужно после python'а с приличными библиотеками? Умеет ли оно хотя бы в нативный blas/mkl?
Столь примитивная библиотека выглядит просто смешно как решение для прода (сравните со всякими TensorFlow, Theano, Torch).
Естественно, на python'е в ML почти всегда используется обвязка над нативными реализациями того же BLAS'а. Иии..? Почему это является внезапно минусом?
А насчёт "не уступают" мне интересно увидеть бенчмарк, который это подтвердит. Против numpy+icc+mkl или numpy+gcc+atlas (собранный под конкретный хост, а не из репозитория). Я сильно сомневаюсь, что оно сможет догнать даже numpy+gcc+openblas.
В чем фишка использования нейросетей то в данном случае?
Тут аналогично: я обучил нейросеть на простых примерах, а она теперь сама может «решать», что будет лучше, даже вводить числа з 6 знаками и больше.
Введение в нейронные сети на Golang