Форум программистов, компьютерный форум, киберфорум
Искусственный интеллект
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/39: Рейтинг темы: голосов - 39, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 23
1

Не могу разобраться как правильно сконструировать сеть

28.01.2021, 20:29. Показов 7385. Ответов 45

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Помогите, пожалуйста, начинающему разобраться как правильно сконструировать сеть! Python, Keras.
---------
По порядку:
используемые обозначения
  • А - int
  • Б - float
  • В - long
  • К - класс (может быть 0 или 1)
У меня есть набор данных:
А1,А2,Б1,Б2,Б3,Б4,А3,А4,В1,В2,А5,А6,Б5,Б6,Б7,Б8,А6,А7,В3,В4
далее я каждой такой строке присвоил класс и получил
А1,А2,Б1,Б2,Б3,Б4,А3,А4,В1,В2,А5,А6,Б5,Б6,Б7,Б8,А6,А7,В3,В4,К1,К2,К3
Это строка в CSV файле.

Каждая строка может принадлежать только одному классу.

Входной слой - 20, выходной - 3

А теперь вопросы:
  1. Какую функцию активации стоит применить?
  2. Какой оптимизатор?
  3. Какую функцию потерь?
  4. Какую метрику?
Перелопатил кучу сайтов, пересмотрел кучу примеров, но так и не понял что именно предпочтительней для моей задачи и, желательно, почему.

Буду очень благодарен за содержательные ответы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2021, 20:29
Ответы с готовыми решениями:

Не могу разобраться с OpenMP! Как правильно распараллелить формулу?
Только начинаю изучать ПП. Помогите разобраться как распараллелить формулу. Данные зависимы. Не...

Ошибка. Не могу разобраться как js и html связать правильно
Доброго времени суток всем. Можете ли вы указать чайнику на ошибки? <!DOCTYPE html> <html>...

Header(location) не могу разобраться как перейти правильно
case ('add_to_cart') : $id=$_GET; $add_item=add_to_cart($id); ...

Не могу разобраться как правильно с файлами прямого доступа обращаться
Вот значит написал я програмку, чтобы разобраться. Суть в том, что мне нужно конкретные строчки из...

45
645 / 521 / 72
Регистрация: 20.09.2014
Сообщений: 3,354
28.01.2021, 21:39 2
Вроде четкая постановка задачи, но про классы давайте поподробнее поговорим.
К1, К2, К3 - это абсолютно независимые классы или они как-то друг от друга зависят?

Функция активации - тангенсоида, говорят, лучшая функция активации, хотя вообще пофигу, не суть.
Оптимизатор - обратное распространение ошибки (back propagation).
Функция потерь для классификации - logloss.

Ответ на вопрос "почему" из абстрактных исходных данных не дается. Может быть вам нужен градиентный бустинг или случайный лес. Хрен знает.
1
1486 / 1413 / 240
Регистрация: 19.02.2010
Сообщений: 3,914
28.01.2021, 22:51 3
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Оптимизатор - обратное распространение ошибки (back propagation)
бэкпроп не есть оптимизатор - это аналитический (в противоположность, например, численной оценке через конечные разности) способ вычисления градиента сложной функции, при этом наибыстрейший из всех возможных реализаций аналитического вычисления градиента.
2
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 23
28.01.2021, 23:32  [ТС] 4
Цитата Сообщение от Mikhaylo Посмотреть сообщение
К1, К2, К3 - это абсолютно независимые классы или они как-то друг от друга зависят?
Это я так называю... Извините, возможно это не так.

В общем так:
есть строка данных, по определённому принципу я ей присваиваю "ответ" для обучения сети.
Этот ответ может быть одним из:
  1. 0 0 1
  2. 0 1 0
  3. 1 0 0
Эти "классы" никоим образом друг от друга не зависят. В принципе, можно было бы использовать один выходной нейрон, который бы принимал значение или 0, или 1, или 2.... Но мне показалось, что для обучения сети мои "классы" будут попроще для идентификации )))

Что касается самих данных. Только В1 и В3 - непрерывно возрастающие значения.
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
29.01.2021, 17:27 5
В качестве рабочего варианта:
Цитата Сообщение от vipAvos Посмотреть сообщение
акую функцию активации стоит применить?
ReLU, sigmoid
Цитата Сообщение от vipAvos Посмотреть сообщение
Какой оптимизатор?
SGD, ADAM
Цитата Сообщение от vipAvos Посмотреть сообщение
Какую функцию потерь?
Для бинарной классификации - бинарную кросс-энтропию
Цитата Сообщение от vipAvos Посмотреть сообщение
Какую метрику?
prec, recall, f1
1
645 / 521 / 72
Регистрация: 20.09.2014
Сообщений: 3,354
30.01.2021, 09:32 6
Цитата Сообщение от vipAvos Посмотреть сообщение
Эти "классы" никоим образом друг от друга не зависят. В принципе, можно было бы использовать один выходной нейрон, который бы принимал значение или 0, или 1, или 2.... Но мне показалось, что для обучения сети мои "классы" будут попроще для идентификации )))
Все правильно сделали, но неверна ваша мысль о том, что классы независимы, т.к. если один из классов равен 1, то остальные равны 0. Это довольно сильная зависимость, сильнее всякой статистической.

Цитата Сообщение от vipAvos Посмотреть сообщение
Что касается самих данных. Только В1 и В3 - непрерывно возрастающие значения.
Замените на инкремент или еще что-то придумайте, иначе непонятно, в чем заключается обучение, когда у вас каждый раз что-то новое. Понимаете?
1
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 23
30.01.2021, 20:35  [ТС] 7
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Замените на инкремент или еще что-то придумайте, иначе непонятно, в чем заключается обучение, когда у вас каждый раз что-то новое. Понимаете?
Я прошу прощения за не совсем верную информацию. Дело в том, что второпях глянув на название колонки, я не сразу вспомнил назначение колонки Time. Это не время. Это время формирования...

Давайте с начала.

Есть некоторый объект, параметры которого я записываю таким образом:
А1,А2,Б1,Б2,Б3,Б4,А3,А4,В1,В2

где
  • А1 и А2 - день недели и час "рождения"
  • Б1 - Б4 - данные развития
  • А3 и А4 - день недели и час полного формирования
  • В1 - время формирования
  • В2 - вес объекта
Записав последовательно параметры трёх объектов я присваиваю им один из трёх классов К.

Из-за своей неопытности и не совсем чёткого понимания построения нейросети передо мной и встал вопрос по архитектуре. Я понимаю, что можно сделать максимально полный перебор, и выбрать наиболее приемлемые параметры сети. Но это может занять слишком много времени...

Я так же склонен считать, что моя задача скорее всего относится к классификации. Но я в этом совершенно не уверен.

В то же время я "нагуглил" разные пособия по созданию сетей. К сожалению, задачи классификации там показаны на примерах распознования картинок...
0
1486 / 1413 / 240
Регистрация: 19.02.2010
Сообщений: 3,914
30.01.2021, 21:00 8
Цитата Сообщение от vipAvos Посмотреть сообщение
А1 и А2 - день недели и час "рождения"
А3 и А4 - день недели и час полного формирования
Такие же номинальные признаки, как и К.
Т.е. требуют ту же схему кодирования.
Или вручную - или разбирайтесь, как в keras управлять типами переменных (чтобы keras сам перекодировал каждый этот скаляр в вектор из нулей и единичек).

Цитата Сообщение от vipAvos Посмотреть сообщение
Я понимаю, что можно сделать максимально полный перебор, и выбрать наиболее приемлемые параметры сети. Но это может занять слишком много времени...
Почему-то это 15-20 лет назад никому никаких трудностей не доставляло - автоматические процедуры подбора размеров и структуры нейронки были чуть ли не в каждом мощном нейропакете (и до сих пор есть - см, например, нейромодуль пакета Statistica http://statsoft.ru/products/ST... _Networks/ даже несмотря на то, что он в плане нейросеток почти и не развивался с тех пор, как его купили у исходной фирмы-разработчика и интегрировали в Статистику).
Но если юзерам не хочется платить бабки за дружественный к пользователю нейрософт и хочется вручную ручками писать код (изучив предварительно для этого питон и API какой-то нейробиблиотеки) - пусть пишут
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
31.01.2021, 10:21 9
Цитата Сообщение от vipAvos Посмотреть сообщение
можно сделать максимально полный перебор
Посмотрите, описан общий подход:
Что такое автоматизированное машинное обучение (AutoML)
https://habr.com/ru/post/449260/
В прошлом году встречал такое и для глубокого обучения
1
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 23
31.01.2021, 11:07  [ТС] 10
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
как в keras управлять типами переменных (чтобы keras сам перекодировал каждый этот скаляр в вектор из нулей и единичек)
Честно скажу - я не понимаю зачем нужно преобразовывать числовые значения в нули и единички А вот нормализация данных мне понятна

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
юзерам не хочется платить бабки за дружественный к пользователю нейрософт и хочется вручную ручками писать код
Ну что тут сказать?
  1. Мне нравится писать ручками.
  2. Мне нравится узнавать новое.
  3. Мне нравится разбираться в сложностях.
  4. И лишить себя этого удовольствия? Да ещё и заплатить за это? Ну уж увольте
Да и, как я понимаю, волшебной (универсальной) сети не бывает. Любую сеть нужно настраивать под конкретную задачу. Или я не прав?
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
31.01.2021, 11:14 11
Цитата Сообщение от vipAvos Посмотреть сообщение
Да и, как я понимаю, волшебной (универсальной) сети не бывает.
Ну это Вы зря, попросите у Деда Мороза и на следующий Новый Год ее получите.
Цитата Сообщение от vipAvos Посмотреть сообщение
Мне нравится писать ручками
Цитата Сообщение от vipAvos Посмотреть сообщение
Мне нравится узнавать новое.
Мне нравится разбираться в сложностях.
Мне тоже нравится, но нехорошие дяди платят не за процесс, а за результат.
1
1486 / 1413 / 240
Регистрация: 19.02.2010
Сообщений: 3,914
31.01.2021, 11:40 12
Цитата Сообщение от vipAvos Посмотреть сообщение
Честно скажу - я не понимаю зачем нужно преобразовывать числовые значения в нули и единички
Не все числовые значения - а только номинальные признаки.
Пусть день недели закодирован у Вас скаляром со значениями от 0 до 6 (или от 1 до 7 - не важно).
Почему "расстояние" между понедельником и вторником должно отличаться от "расстояния" между воскресеньем и понедельником? При работе со скалярами - оно будет отличаться. После перекодирования в вектора из 0/1 - не будет.

Цитата Сообщение от vipAvos Посмотреть сообщение
Ну что тут сказать?
Мне нравится писать ручками.
Мне нравится узнавать новое.
Мне нравится разбираться в сложностях.
Тогда непонятно, почему Вы пользуетесь готовым транслятором с Питона и готовой библиотекой keras?
Их Вам тоже надо написать вручную, с нуля. Вместе с ОСью для компутера
2
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 23
31.01.2021, 11:56  [ТС] 13
Одно дело заказать создание сети под конкретную задачу, и совсем другое - купить готовую.

Вы уж извините, но вопросы о том где и что прикупить не входят в круг моих интересов и не были обозначены в данной теме.

Добавлено через 14 минут
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Тогда непонятно, почему Вы пользуетесь готовым транслятором с Питона и готовой библиотекой keras?
Их Вам тоже надо написать вручную, с нуля. Вместе с ОСью для компутера
Оценил Вашу шутку

А за ответ - спасибо. Я действительно об этом не подумал. Чайник ещё

Но у меня тут-же возник вопрос: а зачем мне ""расстояние" между понедельником и вторником"? Они нужны для определения предпочтительного дня недели и часа (без минут и секунд) образования и полного формирования объекта. Сама продолжительность формирования у меня прописана отдельно (вплоть до мсек).
0
645 / 521 / 72
Регистрация: 20.09.2014
Сообщений: 3,354
31.01.2021, 13:08 14
Вы родили в воскресенье (7), а сформировался в понедельник (1). Родили в понедельник (1), а сформировался во вторник (2). Вероятно тут есть общие закономерности, а для вашей нейросети нет, так как (7,1) далеко от (1,2). Хорошенько подумайте над этим. Короче нейросети ваши переходы от воскресенья к понедельнику дорого обойдутся.

Отбросьте признаки несущественные, не надо всякую ерунду скармливать нейросети.

P.S. Нейросети не надо покупать. Разве что мощи вычислительные (облако).
1
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 23
31.01.2021, 16:41  [ТС] 15
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Вы родили в воскресенье (7), а сформировался в понедельник (1). Родили в понедельник (1), а сформировался во вторник (2). Вероятно тут есть общие закономерности, а для вашей нейросети нет, так как (7,1) далеко от (1,2). Хорошенько подумайте над этим. Короче нейросети ваши переходы от воскресенья к понедельнику дорого обойдутся.
Отбросьте признаки несущественные, не надо всякую ерунду скармливать нейросети.
Я с Вами абсолютно согласен, что "всякую ерунду" нейросетям скармливать не надо

Но так уже встаёт чисто субъективный вопрос - а что ерунда, а что нет? Я, конечно же, чайник, но, будем так говорить, слегка "продвинутый"

Из этого следует, что я потратил некоторое время на определение того, что важно, а что нет! Поясню - из наблюдений (а иначе как бы я мог определять класс связки объектов?), я пришёл к выводу, что эти данные имеют некоторый вес в "закономерностях"! Другими словами, объект, рождённый во вторник между 9-ю утра и 14-ю дня имеет несколько больше предпосылок для развития. То же касается и дня и часа "полного формирования"!

Отсюда - то что вс-пн и пн-вт это одинаковая размерность, не имеет никакого значения! А вот то, что это ср или пт - уже весомый аргумент!

Именно поэтому я и включил эти данные для обучения сети.

Но тут же возникает и следующий вопрос: эти данные - в некотором роде, второстепенны (я пока так думаю). Отсюда - как сообщить сети об этом?
0
1486 / 1413 / 240
Регистрация: 19.02.2010
Сообщений: 3,914
31.01.2021, 20:04 16
Цитата Сообщение от vipAvos Посмотреть сообщение
эти данные - в некотором роде, второстепенны (я пока так думаю). Отсюда - как сообщить сети об этом?
К счастью, сетка при обучении сама способна разобраться в информативности (важности) входных признаков.
Более того, приличный нейрософт может затем показать юзеру значения информативностей признаков - чтобы юзер увидел "мнение" обученной сети.
Следующим шагом удобства возможностей - идёт софт, который автоматом позволяет отстреливать неинформативные входы у нейросети (до тех пор, пока на обучающей выборке сетку удаётся дообучать сохранять требуемую точность распознавания).
Так что при пользовании правильным нейрософтом - можно предварительно не думать и не отбирать признаки Можно просто совать сетке абсолютно всё имеющееся. Ибо зачем воспроизводить человеческую (возможно, ошибочную) логику, обучая сетку на "экспертно отобранном" наборе признаков? Интерес представляет ведь нахождение ранее неизвестных и нетривиальных закономерностей. А компутер таки влёгкую способен обсчитать и сотню, и тысячу, и больше признаков (и выделить затем из этой кучи признаков необходимые и/или достаточные) - там, где человек просто потеряется.
1
645 / 521 / 72
Регистрация: 20.09.2014
Сообщений: 3,354
31.01.2021, 20:37 17
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
можно предварительно не думать и не отбирать признаки
На примере дней недели (воскресенье, понедельник) - это все туфта, все равно нужна некая ручная работа на более высоком уровне. А мы в этой теме еще этот этап не прошли, мне кажется.
1
4 / 4 / 0
Регистрация: 17.01.2021
Сообщений: 41
31.01.2021, 20:41 18
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
бэкпроп не есть оптимизатор - это аналитический (в противоположность, например, численной оценке через конечные разности) способ вычисления градиента сложной функции, при этом наибыстрейший из всех возможных реализаций аналитического вычисления градиента.
Я читал что нельзя считать в некоторых случаях обратное распространение оптимальным вариантом вычисления градиента.Если число выходов в графе больше числа входов то предполагается более предпочтительной форма автоматического дифференцирования с прямым аккумулированием.(в частности в рекуррентных сетях)
1
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 23
31.01.2021, 21:28  [ТС] 19
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Так что при пользовании правильным нейрософтом
Что именно Вы понимаете под "правильным"? Правильный = платный? Или есть какие-то другие критерии?

Добавлено через 6 минут
Цитата Сообщение от Mikhaylo Посмотреть сообщение
На примере дней недели (воскресенье, понедельник) - это все туфта, все равно нужна некая ручная работа на более высоком уровне. А мы в этой теме еще этот этап не прошли, мне кажется.
Не могли бы Вы пояснить - какой более высокий уровень имеется в виду?
0
4 / 4 / 0
Регистрация: 17.01.2021
Сообщений: 41
31.01.2021, 23:40 20
Цитата Сообщение от vipAvos Посмотреть сообщение
Что именно Вы понимаете под "правильным"? Правильный = платный? Или есть какие-то другие критерии?
Надо полагать имелось в виду правильный под задачу.Недавно VTsaregorodtsev упомянул в одном из комментариев Essoin. Алгоритм улучшенной самоорганизующейся растущей нейросети. Если задача кластеризации это "правильный" софт. Но речь также шла и "дружественном" к пользователю софте. Готовые программы под решение каких то задач. Можете посмотреть например "Deductor " .Дедуктор академик студио бесплатная если что и "дружественная"

Добавлено через 1 час 17 минут
Цитата Сообщение от Mikhaylo Посмотреть сообщение
На примере дней недели (воскресенье, понедельник) - это все туфта, все равно нужна некая ручная работа на более высоком уровне. А мы в этой теме еще этот этап не прошли, мне кажется.
Этот этап возможно скоро будет пройден- AutoML Zero

Добавлено через 6 минут
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Так что при пользовании правильным нейрософтом - можно предварительно не думать и не отбирать признаки Можно просто совать сетке абсолютно всё имеющееся. Ибо зачем воспроизводить человеческую (возможно, ошибочную) логику, обучая сетку на "экспертно отобранном" наборе признаков? .
Что Вы думаете о AutoML Zero.?
1
31.01.2021, 23:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2021, 23:40
Помогаю со студенческими работами здесь

Я не могу разобраться как мне правильно подключить исполняемый файл .срр
Доброго всем времени суток. Начал изучать Visual С++. Конечно интерестный язык, но довольно таки...

Верстальщик прислал форму авторизации на HTML, не могу разобраться, как ее правильно настроить
Собственно, кому не тяжело, объясните, пожалуйста, как сделать этот код рабочим. Я сильно...

Не могу разобраться с готовым проектом на github и не могу правильно загрузить его в eclipse
Здравствуйте, В среде Java совсем нет опыта , только по книге изучаю эту среду разработки,...

Обработка на стороне сервера с большим количеством условий. Как правильно сконструировать?
Добрый день! 1. В базе в N записях в полях Xn зафиксировано время time()n. time()1 ...

Не могу разобраться с загрузкой данных из файлов,и чтоб в дальнейшем с ними мжно было работать как с массивом,не могу разобраться(
void __fastcall TPoisk::Button3Click(TObject *Sender) { Memo2->Lines->Clear();...

Задали работу, не могу разобраться. Используется делфи 10, не могу разобраться, как это сделать
В одномерном массиве, состоящем из n вещественных элементов, вычислить: минимальный элемент массива...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru