Функция isa(a, 'class_name') проверяет, принадлежит ли объект a данному классу.
При использовании вне контекста методов функция class допускает только один аргумент.
Команда class(a) возвращает строку, содержащую имя класса для объекта a.
Преобразование классов. Вызов функции преобразования класса имеет вид
b = class_name(a),
где a – объект некоторого класса, отличного от class_name. В этом случае система MATLAB ищет метод с именем class_name в каталоге классов для объекта a. Такой метод преобразовывает объект одного класса в объект другого класса. Если данный объект уже является объектом класса class_name, то система MATLAB вызывает функцию конструктора, который просто возвращает этот объект.
Наиболее важными функциями преобразования классов являются double и char. Преобразование к классу double создает традиционный массив системы MATLAB, хотя это может и не отражать требуемого соответствия для некоторых классов. Преобразование к классу char полезно для вывода на печать.
При работе с объектами и методами система MATLAB использует специальное множество правил, чтобы гарантировать вызов требуемой функции. Если, по крайней мере, один из аргументов является объектом, система MATLAB рассматривает список параметров слева направо, чтобы определить их старшинство. Для операторов равного старшинства выбирается крайний левый. Затем к нему применяются следующие правила:
1. Если имя вызываемой функции совпадает с именем встроенной функции, то проверяется, существует ли переопределенная версия этой функции для этого класса, а затем – для родительского. Если ни один из этих случаев не имеет место, выдается ошибка.
2. Если имя функции совпадает с названием каталога классов, проверяется, не является ли эта функция функцией преобразования, и если да, то эта функция преобразования вызывается. В противном случае вызывается конструктор класса.
3. Если оба случая не подходят, то анализируются следующие возможности:
а) если есть метод соответствующего типа, то вызывается этот метод;
б) если есть метод родительского класса, то вызывается метод родительского класса;
в) если есть функция с таким именем на пути поиска, то вызывается эта функция;
г) в противном случае генерируется ошибка.
Частные методы и функции. Каталоги классов могут иметь связанные с ними частные каталоги. Такие каталоги могут содержать как частные методы, которые работают с объектами данного класса, так и частные функции, которые не работают с объектами, но выполняют общие вычисления. Можно устанавливать частный каталог в каталоге класса точно так же, как создается любой частный каталог, т. е. просто создать каталог, именуемый private, внутри каталога @class_name.
Во многих случаях можно изменить поведение операторов и функций системы MATLAB, когда в качестве аргумента выступает объект. Это осуществляется путем переопределения соответствующих функций. Переопределение класса открывает возможность обработки с помощью этой функции различных типов данных при произвольном количестве входных аргументов.
Переопределение арифметических операций. Каждый встроенный оператор в системе MATLAB имеет имя. Поэтому любой оператор может быть переопределен путем создания М-файла с соответствующим названием в каталоге классов.
Переопределение функций. Можно переопределить любую М-функцию, создавая функцию с тем же именем в каталоге класса. Когда функция применяется к объекту, MATLAB прежде всего просматривает каталог соответствующего класса, а уже потом другие пути доступа.
Практические задания
Задание 1.Создать массив ячеек, содержащий данные различного типа, с помощью индексации ячеек и индексации содержимого.
1. Для создания массива ячеек с помощью индексации ячеек ввести следующие команды:
>> A(1,1)={[1 4 3; 0 5 8; 7 2 9]};
>> A(1,2)={'Anne Smith'};
>> A(2,1)={3+7i};
>> A(2,2)={-pi:pi/10:pi};
>> A
A =
[3x3 double] 'Anne Smith'
[3.0000+ 7.0000i] [1x21 double]
2. Для создания массива ячеек с помощью индексации содержимого ввести следующие команды:
>> A{1, 1} = [1 4 3; 0 5 8; 7 2 9];
>> A{1, 2} = 'Anne Smith';
>> A{2, 1} = 3+7i;
>> A{2, 2} = -pi:pi/10:pi
A =
[3x3 double] 'Anne Smith'
[3.0000+ 7.0000i] [1x21 double]
3. Для отображения содержимого ячеек использовать функцию celldisp:
>> celldisp(A)
A{1,1} =
1 4 3
0 5 8
7 2 9
A{2,1} =
3.0000 + 7.0000i
A{1,2} =
Anne Smith
A{2,2} =
Columns 1 through 9
-3.1566
-0.9
Columns 10 through 18
-0.36 1.51
Columns 19 through 21
2.56
Задание 2. Создать массив структур, содержащих имя, фамилию и год рождения.
1. Для создания массива структур ввести следующие команды:
>> S. name = 'Ed';
>> S. fam = 'Plum';
>> S. year = 1979
S =
name: 'Ed'
fam: 'Plum'
year: 1979
>> S(2).name = 'Tony';
>> S(2).fam = 'Miller';
>> S(2).year = 1980
S =
1x2 struct array with fields:
name
fam
year
>> S(3) = struct('name','Jerry','fam','Garcia','year',1981)
S =
1x3 struct array with fields:
name
fam
year
Задание 3. Разработать файл-сценарий для решения предыдущей задачи с возможностью ввода значений пользователем.
1. Запустить редактор m-файлов и ввести следующую программу:
%Ввод структуры S
%Структура имеет три поля:
%имя name, фамилию fam и год рождения year
disp('Введите поля структуры');
S.name=input('name = ');
S. fam=input('fam = ');
S. year=input('year = ');
disp(S)
2. Сохранить файл под именем «strdialog.m».
3. Выполнить в командном окне MATLAB следующую команду:
>> strdialog
Обратите внимание на то, что xmin и xmax объявляются в теле сценария и объявлять глобальные переменные не требуется.
Задание 4. На системном диске, где установлена математическая система MATLAB, найти папки инструментального пакета по нейронным сетям Neural Network Toolbox (NNT, или ПППНС) и скопировать в рабочий каталог все методы класса network, обеспечивающие создание, инициализацию, обучение, моделирование и визуализацию нейронной сети. В рабочем каталоге найти М-файл конструкторов класса и проанализировать их структуру.
Задание 5. Запустить на пошаговое исполнение конструктор сети network, который не имеет параметров, и проследить последовательность действий по формированию объекта класса network и заданию значений по умолчанию для его атрибутов.
Задание 6. Создать объект класса нейронной сети network, исполнив команду
net = network,
и вывести на экран все поля и все ячейки этого объекта, используя функцию celldisр.
Задание 7. Создать объект класса нейронной сети network, исполнив команду
net = network(2,3,[1;0;0], [11;00;00], ...
[000;100;010], [001], [001],
и вывести на экран все поля и все ячейки этого объекта, используя функцию celldisр.
Задание 8. Исполнив команду gensim(net), получить на экране структурную схему созданной сети, раскрыть её блоки с помощью двойного щелчка мыши и выяснить смысл параметров конструктора network. Изменяя значения параметров, проследить их влияние на элементы структурной схемы.
Лабораторная работа № 3
Модели искусственного нейрона
Цель работы: изучение основных моделей искусственного нейрона, их математического описания, а также функционального и структурного графических представлений, исследование функций активации и рассмотренных моделей нейронов с помощью инструментального пакета имитационного моделирования Simulink системы MATLAB.
Теоретические сведения
Простой нейрон
Элементарной ячейкой нейронной сети является нейрон.
Структура нейрона с единственным скалярным входом показана
на рис. 3.1,а.

а б
Рис. 3.1. Простой нейрон
Скалярный входной сигнал р умножается на скалярный весовой коэффициент w, и результирующий взвешенный вход w*p является аргументом функции активации нейрона, которая порождает скалярный выход а.
Нейрон, показанный на рис. 3.1,б, дополнен скалярным смещением b. Смещение суммируется со взвешенным входом w*p и приводит к сдвигу аргумента функции на величину b. Действие смещения можно свести к схеме взвешивания, если представить что нейрон имеет второй входной сигнал со значением, равным 1. Вход n функции активации нейрона по-прежнему остается скалярным и равным сумме взвешенного входа и смещения b. Эта сумма является аргументом функции активации f; выходом функции активации является сигнал а. Константы w и b являются скалярными параметрами нейрона. Основной принцип работы нейронной сети состоит в настройке параметров нейрона с тем, чтобы функционирование сети соответствовало некоторому желаемому поведению. Регулируя веса или параметры смещения, можно “научить” сеть выполнять конкретную работу; возможно также, что сеть сама будет корректировать свои параметры, чтобы достичь требуемого результата.
Уравнение нейрона со смещением имеет вид
a = f(w*p+b*l).
Как уже отмечалось, смещение b – настраиваемый скалярный параметр нейрона, который не является входом, а константа 1, которая управляет смещением, рассматривается как вход и может быть учтена в виде линейной комбинации векторов входа
.
Функция активации
Функции активации (передаточные функции) нейрона могут иметь самый разнообразный вид. Функция активации f, как правило, принадлежит классу сигмоидальных функций с аргументом n и выходом а.
Ниже рассмотрены три наиболее распространенные функции активации.
Единичная функция активации с жестким ограничениям hardlim. Эта функция описывается соотношением а = hardlim(n) = 1(n) и показана на рис. 3.2. Она равна 0, если
n < 0, и 1,если n >= 0.

Рис. 3.2. Функция активации hardlim
В состав пакета ППП Neural Network Toolbox входит
М-функция hardlim, реализующая функцию активации с жесткими ограничениями.
Линейная функция активации purelin. Эта функция описывается соотношением а = purelin(n) = n и показана на рис. 3.3.

Рис. 3.3. Линейная функция активации purelin
Логистическая функция активации logsig. Эта функция описывается соотношением а = logsig(n) = 1/(1 + ехр(-n)) и показана на рис. 3.4. Она принадлежит к классу сигмоидальных функций, и ее аргумент может принимать любое значение в диапазоне
от
до
, а выход изменяется в диапазоне от 0 до 1. В пакете ППП Neural Network Toolbox она представлена М-функцией logsig. Благодаря свойству дифференцируемости эта функция часто используется в сетях с обучением на основе метода обратного распространения ошибки.

Рис. 3.4. Функция logsig
Символ в квадрате в правом верхнем углу графика характеризует функцию активации. Это изображение используется на структурных схемах нейронных сетей.
В пакет ППП Neural Network Toolbox включены и другие функции активации. Используя язык MATLAB, пользователь может создавать и свои собственные уникальные функции.
Нейрон с векторным входом
Нейрон с одним вектором входа р с R элементами
показан на рис. 3.5. Здесь каждый элемент входа умножается на веса
соответственно и взвешенные значения передаются на сумматор. Их сумма равна скалярному произведению вектора-
строки W на вектор входа р.

Рис. 3.5. Функциональная схема нейрона
Нейрон имеет смещение b, которое суммируется со взвешенной суммой входов. Результирующая сумма n определяется как

и служит аргументом функции активации f. В нотации языка MATLAB это выражение записывается так:
n = W*p + b.
Структура нейрона, показанная на рис. 3.5, содержит много лишних деталей. При рассмотрении сетей, состоящих из большого числа нейронов, будет использоваться укрупненная структурная схема нейрона (рис. 3.6).
Вход нейрона изображается в виде темной вертикальной черты, под которой указывается количество элементов входа R. Размер вектора входа р указывается ниже символа р и равен Rxl. Вектор входа умножается на вектор-строку W длины R. Как и прежде, константа 1 рассматривается как вход, который умножается на скалярное смещение b. Входом n функции активации нейрона служит сумма смещения b и произведения W*p. Эта сумма преобразуется функцией активации f, на выходе которой получается выходная величина нейрона а, которая в данном случае является скалярной величиной. Структурная схема, приведенная на рис. 3.6, называется слоем сети. Слой характеризуется матрицей весов W, смещением b, операциями умножения W*p, суммирования и функцией активации f. Вектор входов р обычно не включается в характеристики слоя.

Рис. 3.6. Структурная схема нейрона
Каждый раз, когда используется сокращенное обозначение сети, размерность матриц указывается под именами векторно-матричных переменных. Эта система обозначений поясняет строение сети и связанную с ней матричную математику.
На укрупненной структурной схеме для обозначения типа функции активации применяются специальные графические символы; некоторые из них приведены на рис. 3.7, где а – ступенчатая; б – линейная; в – логистическая функция.

Рис. 3.7. Функции активации
Практические задания
Задание 1. Для функции активации с жесткими ограничениями hardlim и её производной dhardlim, определяемыми следующими соотношениями:


выполнить следующие действия:
1. Выдать на экран информацию об этих функциях с помощью следующих команд:
name=hardlim(′name′) % – полное название функции;
dname=hardlim(′deriv′) % – название производной;
inrange=hardlim(′active′) % – диапазон входа;
outrange=hardlim(′output′) % – диапазон выхода;
2. Построить графики функций:
n=-5:0,1:5;
a=hardlim(n);
da=dhardlim(n);
plot(n,a,′r′) % – график функции активации – красный;
hard on
plot (n,da,′c′) % – график производной – голубой;
3. Рассчитать векторы выхода А и производной dA_dN для слоя из трёх нейронов с вектором входа N, состоящим из трёх компонентов:
N=[-0,7; 0,1; 0,8];
A=hardlim(N) % – вектор выхода функции актива;
dA_dN= dhardlim(N,A) % – вектор выхода производной.
4. Рассмотренную последовательность команд оформить в виде скрипта и записать в М-файл с именем hardlimfile.
Задание 2. Для симметричной функции активации с жёсткими ограничениями hardlims и её производной dhardlims, определяемыми соотношениями


выдать на экран информацию об этих функциях, построить их графики и рассчитать векторы выхода, воспользовавшись скриптом из М-файла hardlimfile. Новый скрипт записать в файл под именем hardlimsfile.
Задание 3. Для линейной функции активации purelin и ее производной, dpurelin, определяемыми соотношениями
рurelin = n;
dpurelin = 1,
выдать на экран информацию об этих функциях, построить их графики и рассчитать векторы выхода, воспользовавшись скриптом из М-файла hardlimfile. Новый скрипт записать в файл под именем purelinfile.
Задание 4. Для положительной линейной функции активации
poslin и ее производной dposlin, определяемыми соотношениями
выдать на экран информацию об этих функциях, построить их
графики и рассчитать векторы выхода, воспользовавшись скриптом
из М-файла hardlimfile. Новый скрипт записать в файл под именем poslinfile.
Задание 5. Для линейной функции активации с ограничениями saflin и ее производной dsaflin, определяемыми соотношениями
0, n < 0;
soflin(n) = n, 0
n
1;
n, n > 0,
0, n < 0;
dsoflin(n)= 1, 0
n
1
1, n > 0,
выдать на экран информацию об этих функциях, построить их графики и рассчитать векторы выхода, воспользовавшись скриптом из М-файла hardlimfile. Новый скрипт записать в файл под именем satlinfile.
Задание 6. Для симетричной линейной функции активации satlins с ограничениями и ее производной dsatlins, определяемыми соотношениями
-1, n < -1;
satlins(n) = n, -1
n
1;
1, n > 1,
0, n < -1;
dsatlins(n) = 1, -1
n
1
0, n > 1,
выдать на экран информацию об этих функциях, построить их графики и рассчитать векторы выхода, воспользовавшись скриптом из М-файла hardlimfile. Новый скрипт записать в файл под именем satlinsfile.
Задание 7. Для радиальной базисной функции активации radbas и ее производной dradbas, определяемыми соотношениями
radbas = e-2n,
dradbas = -2ne-2n,
выдать на экран информацию об этих функциях, построить их графики и рассчитать векторы выхода, воспользовавшись скриптом из М-файла hardlimfile. Новый скрипт записать в файл под именем radbasfile.
Задание 8. Для треугольной функции активации tribas и ее производной dtribas, определяемыми соотношениями
0, n < -1;
tribas(n) = 1-abs(n), -1
n
1;
0, n > 1,

0, n < -1;
dtribas(n) = 1, -1
n
0
-1, 0 < n
1
0, n > 1,
выдать на экран информацию об этих функциях, построить их графики и рассчитать векторы выхода, воспользовавшись скриптом из М-файла hardlimfile. Новый скрипт записать в файл под именем tribasfile.
Задание 9. Для логистической функции активации logsig и ее производной dlogsig определяемыми соотношениями
logsig(n) = 1 / (1 + e-n);
dlogsig(n) = e-n / (1 + e-n)2,
выдать на экран информацию об этих функциях, построить их
графики и рассчитать векторы выхода воспользовавшись скриптом из М-файла hardlimfile. Новый скрипт записать в файл под именем logsigfile.
Задание 10. Для гиперболической тангенциальной функции активации tansig и ее производной dtansig определяемыми соотношениями
tansig(n) = 2 / (1 + e-2n) – 1;
dtansig(n) = 1 – tansig2(n),
выдать на экран информацию об этих функциях, построить их графики и рассчитать векторы выхода, воспользовавшись скриптом из М-файла hardlimfile. Новый скрипт записать в файл под именем tansigfile.
Задание 11. Для конкурирующей функции активации compet используемой для формирования вероятных и самоорганизующихся нейронных сетей выполнить следующие действия:
1. Выдать на экран информацию об этой функции с помощью следующего скрипта:
Name = compet(′name′) % – cometitive;
Dname = compet(′dеriv′) % – ″;
Inrange = compet(′active′) % – - in : inf;
Outrange = compet(′outrut′) % – 0 1.
2. Построить столбцовые диаграммы для вектора входа и для вектора выхода, используя слой из четырех нейронов:
N = [0; 1; - 0.5; 0.5];
A = compet(n);
subplot(2, 1, 1), % – подокна 2 1; вывод в 1-е;
bar(n), % – столбцовая диаграмма;
ylabet(‘n’) % – метка оси ординат;
subplot(2, 1, 2), bar(a), ylabet(‘a’) % – во 2-м подокне.
3. Рассмотренную последовательность команд оформить в виде скрипта в М-файл с именем competlile.
Задание 12. Выполнить действия 11-го задания для конкурирующей функции активации с мягким максимумом softmax, записав при этом новый скрипт в М-файл с именем softmaxfile.
Задание 13. Для простого нейрона с одним двойным входом Р и функции активации hardlim подобрать весовой коэффициент W и смещение b таким образом, чтобы обеспечить инвертирование входного сигнала, т. е. замену нуля единицей, а единицы нулем.
Задание 14. Для нейрона с двумя двойными входами р1 и р2 и функцией активации hardlim подобрать весовые коэффициенты и смещение таким образом, чтобы нейрон выполнял функции логического сложения и логического умножения.
Задание 15. Для нейрона с двумя двойными входами р1 и р2 и функцией активации hardlim подбирать весовые коэффициенты W11 и W12 и смещение b таким образом, чтобы классифицировать входные двойные наборы на два класса – нулевой и первый:
а) {00, 01} – нулевой класс, {10, 11} – первый класс;
б) {11} – нулевой класс, {00, 01, 10} – первый класс;
в) {00, 11} – нулевой класс, {01, 10} – первый класс;
г) {00, 11} – первый класс, {01, 10} – нулевой класс.
Задание 16. Для нейрона с двумя непрерывными входами р1 и р2 и функции активации hardlim построить график разделяющей линии, определяемой уравнением
W11p1 + W12p2 + b = 0,
считая, что значения весовых коэффициентов W11 W12 и смещения b заданы. Убедиться, что наборы входов р1 и р2 по разную сторону от разделяющей линии принадлежат разным классам и что не всякое множество наборов значений входов можно разделить на два класса, используя нейрон рассмотренного типа.
Задание 17. Используя блоки имитационного моделирования инструментального пакета Simulink системы MATLAB (блоки источников и регистраторов сигналов, математические и нелинейные блоки) построить рассмотренные в заданиях 1 – 16 модели нейронов, провести исследования моделей нейронов и оформить в электронном виде отчет с помощью генератора отчетов Simulink.
Лабораторная работа № 4
Искусственные нейронные сети
Цель работы: изучение архитектуры искусственных нейронных сетей, способов их графического изображения в виде функциональных и структурных схем и программного представления в виде объектов специального класса network, включающих массив структур с атрибутами сети и набор необходимых методов для создания, инициализации, обучения, моделирования и визуализации сети, а также приобретение навыков построения сетей различной архитектуры с помощью инструментального программного пакета Neural Network Toolbox системы MATLAB.
Теоретические сведения
Хотя отдельные нейроны и способны после некоторой процедуры обучения решать ряд задач искусственного интеллекта, все же для эффективного решения сложных задач по распознаванию образов, идентификации и классификации объектов, распознаванию и синтезу речи, оптимальному управлению применяют достаточно большие группы нейронов, образуя из них искусственные нейронные сети в виде связанных между собой слоёв, напоминающие биологические нейронные (нервные) сети человека и животных.
Существует множество способов организации искусственных нейронных сетей, которые могут содержать различное число слоёв нейронов. Нейроны могут быть связаны между собой как внутри отдельных слоёв, так и между слоями. В зависимости от направления передачи сигнала эти связи могут быть прямыми или обратными. Слой нейронов, непосредственно принимающий информацию из внешней среды, называется входным слоем, а слой, передающий информацию во внешнею среду, – выходным слоем. Остальные слои, если они имеются в сети, называются промежуточными, или скрытыми. В ряде случаев такого функционального распределения слоёв сети не производится, так что входы и выходы могут присоединяться к любым слоям и иметь произвольное число компонент.
Структура, или архитектура сети искусственных нейронов зависит от той конкретной задачи, которую должна решать сеть. Она может быть однослойной без обратных связей или с обратными связями, двухслойной с прямыми связями, трехслойной с обратными связями и т. д. Сети с обратными связями называют часто рекуррентными.
Описание архитектуры искусственной нейронной сети помимо указания числа слоёв и связей между ними должно включать сведения о количестве нейронов в каждом слое, виде функций активации в каждом слое, наличии смещений для каждого слоя, наличии компонент входных, выходных и целевых векторов, а в ряде случаев и характеристики топологии слоёв. Например, для аппроксимации любой функции с конечным числом точек разрыва широко используется сеть с прямой передачей сигналов. В этой сети имеется несколько слоёв с сигмоидальными функциями активации. Выходной слой содержит нейроны с линейными функциями активации. Данная сеть не имеет обратных связей, поэтому её называют сетью с прямой передачей сигналов (FF-net).
Графически искусственная нейронная сеть изображается в виде функциональной или структурой схемы. На функциональной схеме сети с помощью геометрических фигур изображаются её функциональные блоки, а стрелками показываются входы, выходы и связи. В блоках и на стрелках указываются необходимые обозначения и параметры.
Структурная схема сети изображается с помощью типового набора блоков, соединительных элементов и обозначений, принятых в инструментальном программном пакете Neural Network Toolbox системы MATLAB и пакете имитационного моделирования Simulink той же системы. Структурная схема сети может быть укрупнённой или детальной, причём степень детализации определяется пользователем. Системы обозначений блоков, элементов и параметров сети является векторно-матричной, принятой в системе MATLAB. Если в обозначении используется два индекса, то, как правило, первый индекс (индекс строки) указывает адресата, или пункт назначения, а второй индекс (индекс столбца) – источник структурной схемы сети. Структурные схемы создаются системой автоматически с помощью команды gensim. Если элементом вектора или матрицы на структурной схеме является сложный объект, то используются соответственно ячейка и массив ячеек.
Программным представлением, или вычислительной моделью искусственной нейронный сети, является объект специального класса network, который включает массив структур с атрибутами сети и набор методов, необходимых для создания сети, а также для её инициализации, обучения, моделирования и визуализации. Класс Network имеет два общих конструктора, один из которых не имеет параметров и обеспечивает создание массива структур с нулевыми значениями полей, а второй – имеет минимальный набор параметров для создания модели нейронной сети, достраиваемой затем до нужной конфигурации с помощью операторов присваивания. Для создания нейронных сетей определённого вида используются специальные конструкторы.
Практические задания
Задание 1. Создать вычислительную модель нейронной сети с двумя выходами, тремя слоями и одним целевым входом, используя общий конструктор сети с параметрами
Net = network (numInputs, numLayers, biasConnect, imputConnect, layerConnect, outputConnect, tartegtConnect).
Связи между слоями должны быть только прямыми, входы необходимо соединить с первым слоем, а выход – с последним. Выход должен быть целевым, первый слой должен иметь смещения.
Смысл и значения параметров конструктора для создания модели сети заданной архитектуры таковы:
numImputs=2 – количество входов сети;
numLayers=3 – количество слоёв в сети;
biasConnect=[1; 0; 0] – матрица связности для смещений размера numLayers * 1;
inputConnect=[1 1; 0 0; 0 0] – матрица связности для входов размера numLayers * numImputs;
layerConnect=[0 0 0;; 0 1 0] – матрица связности для слоёв размера numLayers * numLayers;
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 |


