Задача 2
На совещании по оптимизации производства решено исследовать зависимость скорости производства деталей на автоматизированной линии от трёх параметров – скорости движения транспортёра А, количества сборщиков S и количества проходов станка при обработке деталей – С. Точный вид зависимости неизвестен, поэтому глава службы ИТ предложил прогнозировать скорость производства с помощью нейронной сети.
Для обучения сети были собраны экспериментальные данные: при фиксированных параметрах процесса А, С и S скорость производства замерялась в течение трёх смен (21 часа) с интервалом в 1 час. На сбор необходимого объема экспериментальных данных руководством завода было отведено 100 дней.
Поскольку в нейронах нейронной сети используются передаточные функции, определённые в диапазоне от 0 до 1, полученные данные были соответственно пронормированы.
3.1 Генерация обучающей выборки
Поскольку задача является учебной, экспериментальных данных нет и обучающую выборку нужно создавать генератором случайных чисел.
Пусть искомая функция на самом деле имеет следующий вид (строка 11, здесь и далее – ссылка на строки таблицы 1):
Подготовим массив из 100 значений тройки параметров (строка 2) и 100 обучающих данных (строка 1). Заполнение массивов происходит в цикле (строка 3, окончание цикла – строка 12). По условиям использования сети (ограничения передаточных функций), будем генерировать данные в диапазоне от 0 до 1 (строки 5-7).
Для удобства все значения параметра Х тоже определяем сразу (строка 4).
№ строки |
Код |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
% формирование входных массивов (входной массив P) и (эталоны T) P=zeros(100,21); T=zeros(3,100); x=0:5.e-2:1; for i=1:100 c=0.9*rand+0.1; a=0.9*rand+0.1; s=0.9*rand+0.1; T(1,i)=c; T(2,i)=a; T(3,i)=s; P(i,:)=c*exp(-((x-a).^2/s)); end; P=P'; |
3.2 Создание сети
Для решения поставленной задачи сформируем трехслойную сеть обратного распространения, включающую 21 нейрон во входном слое (по числу компонент входного вектора) с передаточной функцией logsig, 15 нейронов во втором слое с передаточной функцией logsig и 3 нейрона в выходном слое (по числу компонентов выходного вектора) с передаточной функцией purelin. При этом в качестве обучающего алгоритма выбран алгоритм Levenberg-Marquardt (trainlm). Этот алгоритм обеспечивает быстрое обучение, но требует много ресурсов. В случае, если для реализации этого алгоритма не хватит оперативной памяти, можно использовать другие алгоритмы (trainbfg, trainrp, trainscg, traincgb, traincgf, traincgp,trainoss,traingdx). Соответствующий М-код:
net=newff(minmax(P),[21,15,3],{'logsig' 'logsig' 'purelin'},'trainlm');
Первый аргумент определяет допустимый диапазон входных значений, для этого берется минимум и максимум массива Р.
3.3 Обучение сети
Перед обучением необходимо задать параметры обучения. Задаем функцию оценки функционирования sse.
net.performFcn='sse';
В этом случае в качестве оценки вычисляется сумма квадратичных отклонений выходов сети от эталонов. Задаем критерий окончания обучения – значение отклонения, при котором обучение будет считаться законченным:
net.trainParam.goal=0.01;
Задаем максимальное количество циклов обучения. После того, как будет выполнено это количество циклов, обучение будет завершено:
net.trainParam.epochs=1000;
Теперь можно начинать обучение:
[net,tr]=train(net,P,T);
Процесс обучения иллюстрируется графиком зависимости оценки функционирования от номера цикла обучения:
Сеть можно сохранить в файле (nn1.mat) для последующей загрузки обратно в Matlab:
save nn1 net;