Comments 7
А какой смысл в этой надстройке, если сам gonn заброшен и последний коммит там 9 лет назад?
Я бы сказал не заброшен, а закончен. А Вас не смущает, что таблица умножения не обновлялась уже более 2-х тысяч лет и все равно ей продолжают пользоваться?
не заброшен, а закончен
Закончен, но с TODO большими буквами на главной странице README?
Ну и просто для справки, помимо описанных в gonn
BackPropagation Network / RBF Network / Perceptron Network
Есть еще много чего еще, например, Convolutional NN (1d, 2d, 3d, etc.), Recurrent NN (rnn, lstm, gru, etc.), Graph NN (gcnn, graphsage, etc.), Transformers и т.д. Конференции типа NIPS, где каждый год представляют что-то новое, являются одними из самых посещаемых... Так что сравнение про таблицу умножения звучит странно.
Семен, я полностью с вами согласен, что в области машинного обучения очень много нового, и очень много людей этим интересуется. Я не хотел вас обидеть своим комментарием про "таблицу умножения" :-)
Во вступлении я написал, что статья больше подходит для тех кто хочет начать использовать машинное обучение в своих проектах на Go, а не для тех кто уже все понял.
Мне кажется, что если мы свалим на человека кучу непонятных терминов и названий, то он отложит эту тему ещё на год :-)
Пакет gonn хорошо справляется с описанной в стате задачами, шустро работает, имеет небольшой размер и не тянет за собой зависимостей.
Мне кажется, что читателю, с помощью nnhelper, будет легко и удобно начать использовать нейросети в своих проектах на Go. В случае необходимости всегда можно взять что-то более сложное.
Мне удобно пользоваться nnhelper, я делюсь этим удобством с читателем.
Спасибо!
Тема интересная, но мне бы хотелось чуть больше вводной информации. Не подскажете какой-нибудь толковый источник по нейросетям для чайников?
Посмотрел ваш пакет, и могу сказать, что даже если у вас всё ОК по части нейросетей, то сам пакет оставляет желать лучшего.
Например,
// ReadCsvFile read csv file and return float array
func ReadCsv(filePath string) (out [][]float64, err error) {
csv, err := ReadCsvFile(filePath)
if err != nil {
return
}
Если была ошибка при чтении файла, тут вместо неё вернётся nil.
В вызывающем коде похожая ситуация:
input, _ := ReadCsv(inpupCsv)
if len(print) > 0 && print[0] {
Ошибка вообще игнорируется.
Надо работать над качеством!
У меня нет под рукой ссылки на что-то совем вводное по нейросетям. Мне кажется эта информация доступна в сети. Если мне попадётся что-то простое, понятное и с вводной информацией, я обязательно Вам пришлю ссылку.
Извените, Дмитрий, но я не вижу ошибки, о которой вы говорите, в функции "ReadCsvFile read csv file and return float array". Вот, добавил к проекту тест этой функции в файле csv_test.go:
// Reading existing csv file
func TestReadCsvFile(t *testing.T) {
_, err := ReadCsvFile("examples/sam01/sam01_inp.csv")
if err != nil {
t.Errorf("Can't read csv file, error = %s; want nil", err.Error())
return
}
}
// Reading non-existing csv file
func TestReadCsvFile2(t *testing.T) {
_, err := ReadCsvFile("examples/sam01/sam01_inp_notexists.csv")
if err == nil {
t.Errorf("Does not return error when read not existing csv file, "+
"error = %v", err)
return
}
}
И оба теста проходят. Первый тест читает существующий файл, второй тест читает несуществующий файл.
Спасибо.
NNHelper – пакет на языке Go для создания и использования нейронной сети