PDA

Просмотр полной версии : Нейросеть на многослойных перцептронах



capzap
24.02.2018, 12:11
Делюсь проектом с построением простейшей нейросети. Повторил пример взятый из этой стати https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/, на скрине видно приблизительное повторение результатов описываемых в предпоследнем абзаце

Сема
27.02.2018, 16:16
А в чём суть? Как система эта работает, что должно происходить?

Newcomer
27.02.2018, 18:30
Стандартная задача - это регулирование температуры обратной воды по температуре наружного воздуха согласно температурного графика.

Как решить эту задачу при помощи нейросети ?

Newcomer
27.02.2018, 19:31
составить выборку данных для обучения, например при температуре нар.воздуха -20 и температуре обрата 50 регулятор должен быть 35, обе температуры это входа, значение регулятора это выход.

Что значит "регулятор должен быть 35" ? Выходов должно быть два и они управляют трехпозиционным клапаном, т.е. подают на него импульсы, длительность которых пропорциональна рассогласованию. Обычно это делается при помощи ПИД-регулятора.
Как это сделать при помощи нейросети ?

lara197a
27.02.2018, 19:58
Что значит "регулятор должен быть 35" ? Выходов должно быть два и они управляют трехпозиционным клапаном, т.е. подают на него импульсы, длительность которых пропорциональна рассогласованию. Обычно это делается при помощи ПИД-регулятора.
Как это сделать при помощи нейросети ?
это значение к примеру подают на фб который делает расчет, для вывода задвижки в это положение.
т.е. к примеру на вход регулятора.

Newcomer
27.02.2018, 20:12
к чему этот разговор тогда будто я в качестве оправдывающегося, я выложил инструмент, кто видит решение своей задачи через нейросети, тот и обучает её, находит какая информация требуется для получения нужного результата.

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

Владимир Ситников
27.02.2018, 20:32
Вот я и спрашиваю как грамотно пользоваться вашим инструментом. Как подготовить исходные данные и прочее. Вы бы на конкретном примере продемонстрировали работу нейросети.

Там "проблема" и в том, что тов. capzap делал "обучение" модели на самом ПЛК.
Это, вообще говоря, сомнительный подход. Ну, можно посомневаться в целесообразности использования ПЛК для шага обучения.

Скорее всего, учить нужно на нормальном ПК (можно оперировать гораздо большими объёмами данных, строить графики), а полученную модель (коэффициенты) загружать в ПЛК.

Владимир Ситников
27.02.2018, 20:41
Вот я и спрашиваю как грамотно пользоваться вашим инструментом. Как подготовить исходные данные и прочее. Вы бы на конкретном примере продемонстрировали работу нейросети.

В двух словах, подход такой:
1) Нужно собрать много-много данных о значениях разных параметров. Например: температура котла, температура подачи, температуры каждой батареи, скорость ветра, направление ветра, потребление электричества, дату, положение клапана (!)

В итоге, получится источник вида

Дата,параметр1,параметр2,параметр3,...

2) Потом придумать "каким алгоритмом машинного обучения пользоваться". Можно попробовать все по очереди, но если разбираться, то сразу понятно, что для задач одного типа лучше работают одни, а лучше другие

3) Допустим, определились с алгоритмом. И, например, это будет "нейронная сеть". Берём весь набор измеренных величин (ну или 50% из него), и "обучаем" нейросеть предсказывать "положение клапана". Ну, как вариант, можно предсказывать не "положение клапана" (открыт-закрыт), а например, в % (% открытости за минуту)

4) В результате шага 3 (обучения) будут получены коэффициенты нейросети. Их можно взять, зашить в ПЛК программу, и эта самая ПЛК программа будет брать результаты уже реальных измерений (температур, скоростей ветров и т.п.) и генерировать значение для "положения клапана"


Как-то так.

Не рекламы ради, но как раз 4-го марта в Новосибирске Алексей Зиновьев будет рассказывать "введение в машинное обучение" (https://2018.jbreak.ru/talks/4yrpmpuqmimsa46w6iwuok/).


Для "понимания", на мой взгляд, один из самых простых примеров -- предсказание того, "выжил бы человек или нет, если бы он плыл на Титанике".
На шаге 1 есть перечень пассажиров с признаками "возраст, пол, ещё что-то, выжил-нет"
На шаге 2 можно взять алгоритм "дерево принятия решения (https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D0%BF%D1%80% D0%B8%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%D1%80%D0%B5%D 1%88%D0%B5%D0%BD%D0%B8%D0%B9)"
На шаге 3 "обучение" состоит в том, что мы скармливаем данные о всех пассажирах, а алгоритм строит дерево в духе

IF пол=Ж THEN
СПАСЛАСЬ;
ELSIF возраст>9.5 THEN
УМЕР;
ELSE ...
END_IF;

Смысл в том, что цепочка IF'ов генерируется автоматически, и размер этих if'ов гораздо меньше общего размера входных данных. Да, могут быть ошибки, но полученный алгоритм может предсказывать результат в том числе и для тех параметров, которые не встречались в исходной выборке.

На шаге 4 берём эту цепочку IF'ов, запихиваем в ПЛК и он может предсказывать "спасётся ли пассажир, если пол у него такой-то и возраст такой-то"

capzap
27.02.2018, 20:48
Как можно грамотно пользоваться прототипом, да ни как, изучать предмет да строить свою сеть. Конкретно в этом примере входные данные располагаются в hiddenLayer в массиве mINPUT, выходные в outputLayer в массиве mOUTS, остальное обычно не заполняется, там при инициализации должны быть случайные величины, о них на форуме должна быть целая тема, какой ГСЧ для этого использовать. У меня же вставлены веса какие используется в примере по ссылке

Newcomer
27.02.2018, 20:51
Как можно грамотно пользоваться прототипом, да ни как, изучать предмет да строить свою сеть. Конкретно в этом примере входные данные располагаются в hiddenLayer в массиве mINPUT, выходные в outputLayer в массиве mOUTS, остальное обычно не заполняется, там при инициализации должны быть случайные величины, о них на форуме должна быть целая тема, какой ГСЧ для этого использовать. У меня же вставлены веса какие используется в примере по ссылке

Вы представили свой материал совершенно не подготовленной аудитории.

Владимир Ситников
27.02.2018, 20:53
Как можно грамотно пользоваться прототипом, да ни как, изучать предмет да строить свою сеть.

Ну, давайте положим что-нибудь куда-нибудь, и согласимся, что прототипы лучше и проще делать в Python/Java? Там гораздо больше готовых библиотек, там гораздо больше статей, примеров и т.п.

Вот загружать и выполнять модели в ПЛК это может быть интересно. А "знакомиться с ML" на ПЛК, по-моему, весьма сомнительное занятие. Но, да, кого-то может радовать КДС, его разновидность ST и т.п.


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

А обучать на ПЛК...

capzap
27.02.2018, 20:57
Там "проблема" и в том, что тов. capzap делал "обучение" модели на самом ПЛК.
Это, вообще говоря, сомнительный подход. Ну, можно посомневаться в целесообразности использования ПЛК для шага обучения.

Скорее всего, учить нужно на нормальном ПК (можно оперировать гораздо большими объёмами данных, строить графики), а полученную модель (коэффициенты) загружать в ПЛК.
с готовыми коэффициентам я выкладывал пример в разделе ПР, так что о сомнительности я осведомлен, но если необходимо дообучение, например из-за сезонности, то режим тренировки понадобиться в этом случае пока ошибка не станет приемлемой, близкой к нулю

capzap
27.02.2018, 21:01
Ну, давайте положим что-нибудь куда-нибудь, и согласимся, что прототипы лучше и проще делать в Python/Java? Там гораздо больше готовых библиотек, там гораздо больше статей, примеров и т.п.

Вот загружать и выполнять модели в ПЛК это может быть интересно. А "знакомиться с ML" на ПЛК, по-моему, весьма сомнительное занятие. Но, да, кого-то может радовать КДС, его разновидность ST и т.п.


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

А обучать на ПЛК...
так ведь не вопрос, вместо заданных изначально в той статье весов, вставить те которые получились после 10К итераций в мой проект, вот и готовая модель, разве не так?

Владимир Ситников
27.02.2018, 21:11
с готовыми коэффициентам я выкладывал пример в разделе ПР, так что о сомнительности я осведомлен, но если необходимо дообучение, например из-за сезонности, то режим тренировки понадобиться в этом случае пока ошибка не станет приемлемой, близкой к нулю

В том-то и дело, что на ПК можно погонять разные алгоритмы с разными параметрами и выбрать наиболее подходящий.
На ПЛК ни график толком не построишь, ни обучение толком не проведёшь (т.к. тупо нет библиотек, а реализовывать с нуля смысла нет), ни проверишь "как бы действовал алгоритм в тех или иных условиях".

Поиграться -- можно и на ПЛК. В смысле, "если нечем заняться вечером, то можно и запустить МО на ПЛК". Хотя, всё равно для того, чтобы таким заниматься нужно хоть что-то понимать.

Если же говорить о реальном использовании МО, то обучать, дообучать, переобучать нужно на нормальном ПК.
Если говорить об изучении МО, то это лучше делать на Coursera, конференциях и т.п.

capzap
27.02.2018, 21:41
я конечно согласен, что это только поиграться, но чтоб дообучить модель на ПК, нужна выборка актуальных данных, затем необходимо будет внести эти веса в работающую модель без остановки техпроцесса, считаете это кому то будет нужно?
А метод обучения после каждой неверной классификации тоже существует и собственно здесь он показан, если изначально вставить правильные веса, функция train просто не будет выполняться,т.к здесь чистая математика то и дообучения не будет. Если же использовать сеть как экспертную систему, где вывод о правильности решения принимает оператор, система обязана переучитваться непосредственно там где она работает, не будет оператор после нажатия кнопки останавливать программу, бежать к компу чтоб получить новые коэффициенты и потом опять их вставлять

Владимир Ситников
27.02.2018, 22:18
но чтоб дообучить модель на ПК, нужна выборка актуальных данных, затем необходимо будет внести эти веса в работающую модель без остановки техпроцесса, считаете это кому то будет нужно?

Берём данные из SCADA, дообучаем на них и отправляем в контроллер обновлённый рецепт?

Думаю, мы поняли друг друга. Вопрос больше в том, чтобы нас поняли другие и, чтобы это всё причинило им какую-нибудь пользу.


Использование МО вместо/совместно с PID, возможно и имеет смысл, т.к. МО может "автоматически" догадаться о том, как лучше регулировать.

Автонастройка PID это, к слову, тоже машинное обучение. Будет ли "дообучение нейросетки" круче "автонастройки ПИД" -- вопрос. Как раз тот самый вопрос -- какой из алгоритмов МО выбирать (нейросеть, дерево принятия решений и т.п.)

capzap
28.02.2018, 08:11
Берём данные из SCADA, дообучаем на них и отправляем в контроллер обновлённый рецепт?

Думаю, мы поняли друг друга. Вопрос больше в том, чтобы нас поняли другие и, чтобы это всё причинило им какую-нибудь пользу.


Использование МО вместо/совместно с PID, возможно и имеет смысл, т.к. МО может "автоматически" догадаться о том, как лучше регулировать.

Автонастройка PID это, к слову, тоже машинное обучение. Будет ли "дообучение нейросетки" круче "автонастройки ПИД" -- вопрос. Как раз тот самый вопрос -- какой из алгоритмов МО выбирать (нейросеть, дерево принятия решений и т.п.)
это всё конечно замечательно, вобщем то повторение моих слов из другой темы, да я тоже считаю, что полноценные вычисления обязательно нужно делать на компе, если не достаточно входных данных, то прогонять сперва через полиноминальную регрессию, а далее отобрать из полученного набора признаков по методу рекурсивного исключения нужное количество. Но все эти плюшки ведут к усложнению модели, а если создавать примитивную сеть на компе, чтоб в итоге полученные веса перенести на плк, чем контроллер то не угодил, сами же мне доказывали что математика одинакова что на ПК что в плк Поэтому первая моя мысль была с контроллеров передавать входные данные, сервер выполняет всё функции принятия решения, а в плк уже выдавать только значения выходов, а не переносить готовую модель, потому что это муторно. Вместо того чтоб взять мой проект пускай даже с обучалкой, Вы предлагаете построить ту же сеть, вместо функции train, создать функцию чтения файла или приема весов по сети, функцию расстановки этих весов по местам в нейросети, изучить основы ЯП для построения сетей на ПК, создать механизм парсинга модели для дальнейшей посылки её в контроллер, ну ок

capzap
28.02.2018, 19:20
выложу еще вариант прогнозирования выходной величины по трем входным данным, ссылка на пример внутри проекта

Сема
01.03.2018, 17:55
Мне кажется не надёжная вещь - нейросеть. Сколько тонн информации надо прогнать через неё, чтобы свести к минимуму ошибки. Очень жёсткий и трудный анализ.

Вольд
01.03.2018, 20:34
capzap, а вы в реальных задачах нейросети использовали ?

Сема
07.03.2018, 16:54
да, использую, конечно не в сфере промавтоматики, здесь только в планах внедрить экспертную систему для операторов, но на неё времени не хватает, а на какие то простые вещи просто нет идей. Основу я выложил, может кто то и применит для своих задач

А если не секрет, в каких вы сферах реализовали, кроме ПЛК. На чём и где конкретно реализована нейросеть у вас?

Вольд
07.03.2018, 20:26
в комп.играх и на форексе

И какие успехи на Forex много депозитов слили ?

вапросик
08.04.2018, 13:23
играйте на биржевых классических опционах (ванильных)
и будет вам счастье :D

Николаев Андрей
09.04.2018, 10:00
А мне эта тема представляется крайне интересной именно для современного и будущего промышленных процессов.
Вы рассматриваете ценность реализации механизма, а не ценность от его применения.
Там где модель поведения понятна и известна - и смысла нет использовать ИИ.
Они нужны именно как предиктивный инструмент прогнозирования поведения для более точного регулирования. При этом сам регулятор может быть любым. Может учитываться в модели или не учитываться.
"Абстрактный" пример - печь для выпечки пироженных (чуть более промышленный - печь для кирпичей). Если нарушать тепловой режим - пироженное не будет воздушным или же наоборот подгорит. 2 оператора. Один имеет свойство открывать дверь в печи во время готовки - второй нет. А это не гарантированное качество продукта.
Машинка анализирует: кто оператор, и обучается в какой момент времени с начала закладки оператор откроет дверь, и на какое время. Исходя из этого предварительно добавит тепла, компенсируя потерю при открытии двери.

Та же история может быть и климатом в коттеджах.
Можно изучить семью и заложить их поведенческие паттерны в модель. Кто во сколько встает. Через сколько от подъема идет купаться (прогреть теплый пол), как часто пьет кофе (включить кофемашину) и т.д.
И тут можно либо изменять модель по желанию заказчика (БЕСКОНЕЧНО), либо система каждый день получает новые данные и самообучается, корректируя модель.

Сейчас действительно представляется, что ИИ - страшный зверь для ПК. Но вот еще в 70-80-х годах переход с аналоговых регуляторов СУРИ\СУРА на цифровые представлялся чудом )))))

capzap
15.04.2018, 20:40
Набросал еще один проект, некая абстрактная ситуация, допустим есть четыре емкости с рубашкой охлаждения, которые охлаждает ледяной водой насос, чтоб не порвать рубашку избыточным давлением используют регуляторы. Вместо стандартного ПИД решил использовать нейросеть, при всевозможных комбинациях включения емкостей(emk1,emk2,emk3,emk4) на охлаждения предустановлены свои значения производительности(RESULT), если со временем текущее давление будет отличаться от заданного(ошибка TE) будет происходить корректировка весовых коэффициентов, во время симуляции можно незначительно "подергать" в ту или иную сторону параметр INP_TRG, при выключенных емкостях значение процентов тоже будет изменятся, уточняю что это макет а не готовый образец

capzap
14.05.2018, 16:34
на выходных, пока не было оживленной движухи на предприятии, активировал свою задумку на счет поддержания давления с помощью нейросети, а не ПИД регулятора. Емкостей стало восемь. Сегодня подкорректировал выявленные недостатки и результат вполне подходящий. Базовые вещи в проекте из предыдущего поста, а сама настройка очень примитивная. Первая фаза, это построить таблицу соответствия результата от различных входных состояний, сидеть смотреть какова производительность насоса при подключении различных емкостей я не стал, написал явовский код
final char ONE = '1';
for (int i = 0; i < 256; i++) {

String sample = "" + Integer.toBinaryString(i);
int pointPosition = sample.length();
sample = sample.substring(0, pointPosition - 1) + "," + sample.substring(pointPosition - 1);
for (int j = 0; j < pointPosition; j++) {
int lastSpacePosition = sample.indexOf(",");
if ((lastSpacePosition - 1) > 0) {
sample = sample.substring(0, lastSpacePosition - 1) + "," + sample.substring(lastSpacePosition - 1);
} else {
break;
}
}
long count = Integer.toBinaryString(i).chars().filter(item -> item == ONE).count();
int result = 0;
switch ((int) count) {
case 1:
case 2:
result = 62;
break;
case 3:
case 4:
result = 65;
break;
case 5:
case 6:
result = 70;
break;
case 7:
case 8:
result = 75;
break;
default:
result = 0;
}
System.out.println(sample + "," +result);
}

вторая фаза это создать модель, код еще меньше чем создать csv файл
from sklearn.neural_network import MLPRegressor
import pandas as pd

df = pd.read_csv('freq8pmp.csv')

X = df[['<EMK1>','<EMK2>','<EMK3>','<EMK4>','<EMK5>','<EMK6>','<EMK7>','<EMK8>']]
y = df[['<PROC>']]

reg = MLPRegressor(hidden_layer_sizes=(6),activation='lo gistic',solver='lbfgs',alpha=0.01)
reg = reg.fit(X,y)

print(reg.score(X,y))
print(reg.coefs_)
print(reg.intercepts_)
print(reg.predict([[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,1]]))чтоб модель была удачной можно заморочиться и применить всевозможные средства для этого, я не стал много писать, просто запускал несколько раз, пока не появился оптимальный вариант стремления score к единице и predict для состояния всё выключено близким к нулю
третья фаза всвил похожий код, как из вышевыложенного проекта, только для сименса и с большим количеством костылей и всё. Далее плк уже делал подстройку весовых коэффициентов без моего участия, через несколько различных включений я уже не стал замечать движение процентов производительности насоса

Тут в начале темы задавались вопросом зачем учить плк, но как оказалось хабр не считает чем то зазорным сослаться на страничку (https://towardsdatascience.com/how-to-build-your-own-neural-network-from-scratch-in-python-68998a08e4f6) выпущенную не так давно как построить сеть, это при наличии помимо skikit-learn еще и tensorflow. Вобщем тема не раскрыта в чем сомнительность таких работ

Вольд
17.05.2018, 11:50
Сколько у вашей нейросети слоев и узлов, входов и выходов ?

capzap
22.09.2019, 20:11
еще один прототип, регулятор в котором изначально заложено, что если уставка выше текущего значения, выход увеличивает свое значение. Сам регулятор в библиотеке и к ней приложен демо-проект. На входы требуется подавать нормированные значения, выход тоже возвращает значение от 0 до 1, чтоб получить проценты умножаем на сто. У меня обычно используются 46-ые таблетки, поэтому я просто делю на верхний диапазон, в особых случаях можно использовать линтрафо. Эмулятор в демке построен по другой формуле, поэтому первоначально долго выходит, меняя уставку с 0.5 до нуля и обратно, можно будет заметить, что выход будет каждый раз устанавливать более близкий процент к нужному, чтоб текущее значение достигло уставки. Так же в демке описано, что еще можно подкрутить, но в целом ни каких настроек можно не задавать. Реализацию как сохранить весовые коэффициенты для конкретной установки не делал (при останове эмуляции в КДС или отключении питания на реальном объекте все вернется к той модели которая идет в библиотеке), я с сименсом работаю, там я по другому сделал