2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Вопрос по matlab
Сообщение06.07.2011, 22:28 


23/11/09
130
Я вообще не силен в матлабе, но подозреваю что требуются скобки и проверка на равенство пишется наверное через два равно ==
if( (a+b+c)==r )
f=1
else
f=0

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение07.07.2011, 08:51 


05/07/11
22
Спасибо за ответ)
программа наконец заработала в низменном уровне :D
Код:
x=-1;
y=1;
z=0;
x^2+y^2+z^2;
a=x^2;
b=y^2;
c=z^2;
r=64;
if ((a+b+c)==r)
    f=1;
else
    f=0;
end   
f

на основе этого можно судить о принадлежности введённых координат для сферы
но теперь возникает такая проблема: как засунуть это в нейронную сеть и обучить?
щас вот думаю над тем как задавать множество точек x,y,z для данного условия
просто если попробовать идти через цикл for
например
for x=-100:100
y=-100:100
z=-100:100
end
дальше идёт наше условие
x^2+y^2+z^2;
a=x^2;
b=y^2;
c=z^2;
r=64;
if ((a+b+c)==r)
f=1;
else
f=0;
end
f

-- 07.07.2011, 10:18 --

как вариант с рандомными числами, но подгонкой под однозначный ответ можно сделать так
x=rand(10);
y=rand(10);
z=x-y;

Код:
x^2+y^2+z^2;
a=x^2;
b=y^2;
c=z^2;
d=r^2;
d=a+b+c

if ((a+b+c)==d)
    f='сфера';
else
    f='что-то другое';
end   
f

но я не знаю как бы можно задать на определённом промежутке x и y
или как массив из точных координат которые лежат на сфере

-- 07.07.2011, 10:18 --

-- 07.07.2011, 10:41 --

с циклом for удаётся сделать реализацию
for i = -1:1
Код:
    x=i;

    for j=2:5
        y=j;

   z=x-y;
   z
   x
   y
x^2+y^2+z^2;
a=x^2;
b=y^2;
c=z^2;
d=r^2;
d=a+b+c

if ((a+b+c)==d)
    f='сфера';
else
    f='что-то другое';
end
    end
end   
f


но всё это надо сделать как то через массив с конкретно подобранными координатами для нашей фигуры

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение07.07.2011, 12:44 


23/11/09
130
Ну вот поэтому я и толкую о создании функции для сферы которая бы выдавала правильный набор координат. А потом эту функцию загоняем в цикл и создаем уже выборку. И так для всех фигур.

Лично мне вариант с вектором очень нравится, ничего проще пока не вижу.

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение07.07.2011, 21:43 


05/07/11
22
с вектором я пока не знаю как можно было бы выкрутиться
я ещё не понимаю какую тут надо задавать цель T
на вход P понятное дело, что нужно задавать массив из координат
а что ставить на цель?

-- 07.07.2011, 23:30 --

Код:
P={[-1;  1; 0]] [-1/3;  1/4; 1/2] [1/2; 0; 1] [1/6; 2/3; 3/5]}; % Массив координат точек
T={[ -1;  1; 0]] [-1/3;  1/4; 1/2] [1/2; 0; 1] [1/6; 2/3; 3/5]};  % Массив векторов цели
net=newln(P,T);
net.trainParam.epochs = 30; % Число циклов обучения
net.adaptParam.passes = 50;  % Число проходов
[net,x,y,z] = adapt (net,p,t); %Настройка параметров, используя процедуру адаптации
x^2+y^2+z^2;% Формула вычисления радиуса сферы
a=x^2;
b=y^2;
c=z^2;
d=r^2;
d=a+b+c
% Вводим условие по принадлежности координат для данной фигуры
if ((a+b+c)==d)
    f='сфера';
else
    f='что-то другое';

   end   
f
%на выходе мы получаем окончательный ответ
Если координаты не подошли для данного условия, тогда они проверяются на условии другой фигуры

примерно написал как можно пробовать обучить нейронную сеть
остаётся проблема синтаксиса

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение08.07.2011, 08:16 


23/11/09
130
Цитата:
с вектором я пока не знаю как можно было бы выкрутиться

Про афинные преобразования слышали? Обычно в 3D графике используются.
Используем повороты и вертим вектор, все предельно просто :wink:
Цитата:
я ещё не понимаю какую тут надо задавать цель T

Задаемся вектором длиной (количество фигур)+(1 для неверных интерпретаций, если это надо)
оговариваем что:
1 0 0 ... 0 - это сфера
0 1 0 ... 0 - это куб
0 0 1 ... 0 - это цилиндр
0 0 0 ... 1 - это не распознанная фигура
Я же вам сказал воспользоваться принципом для подачи и получения данных в нейронную сеть "один из".
так вот подали координаты на вход а в Т подаем эти вектора которые являются "идеальным ответом сети"

Почитайте хоть немного теории про подачу и получение данных в сеть
Цитата:
newln

Что это за функция? Это вам преподаватель сказал такую использовать

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение08.07.2011, 09:03 


05/07/11
22
прочитал про афинные преобразования
удобство етсь в плане того, что можно как-то взаимодействовать с координатами
но я пока не знаю как связаны афинные преобразования с нейронной сетью
Как вы говорите можно на вход подать координаты,
в качестве цели можем задать интерпретацию той или иной фигуры [0 1 0 0 0]
а вот дальше как раз начитается загвоздка с её обучением
например если для линейной сети обучение выглядит в принципе в 2 строчки
Код:
net.trainParam.epochs = 30;
net.trainParam.passes = 50;

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

-- 08.07.2011, 10:14 --

newln - линейная нейронная сеть
преподаватель даже ниче не советует по выбору типа нейронной сети не говоря уже о способе её обучения...

-- 08.07.2011, 10:26 --

у меня ещё вопрос такой, какую можно почитать ещё литературу по нейронной сети в С++
просто чувствую проще на самом деле её самому создать в С++

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение08.07.2011, 11:09 


23/11/09
130
Уважаемый FunnyDeath, у меня сложилось впечатление, что вы впервые видите нейронную сеть, почитайте теорию, без нее вы элементарные вещи не понимаете.
Почитайте следующее:
1. Как устроена сеть и какие виды бывают.
2. Почему линейная сеть не подходит для задач распознавания? Про проблему функции XOR почитайте, я не даром вам посоветовал этот пример.
http://www.aiportal.ru/articles/neural- ... n-xor.html
3. Каким образом проходит обучение.
Попытайтель почитать и понять почему я советую именно многослойный персептрон, а не радиально базисную и никакую другую сеть
Цитата:
как связаны афинные преобразования с нейронной сетью

Никак не связаны с сетью, они связаны с подготовкой данных.
Цитата:
если для линейной сети обучение выглядит в принципе в 2 строчки

Эти 2 строчки это параметры обучения, кстати 30 эпох хватит для очень маленькой сети скажем 5 нейронов.
Цитата:
у меня ещё вопрос такой, какую можно почитать ещё литературу по нейронной сети в С++
просто чувствую проще на самом деле её самому создать в С++

Как я уже говорил, саму сеть сделать просто, а вот алгоримы обучения... уже сложнее.
Литература как раз маловато, да и вообще обучение НС это пока слабо разрешимая проблема.
Гуглите про "бэк пропагейшн" и генетический алгоритм.
Советую: попытайтесь для начала понять как они работают в матлабе.

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение08.07.2011, 12:49 


05/07/11
22
Так и есть. Matlab я изучаю всего 2 недели
читал книгу Медведева и Потёмкина про Нейронные сети
знаний в этой программе конечно мало, насчёт типов нейронной сети читал, хоть и поверхностно. Сегодня с преподавателем разговаривал
появилась идея как можно сделать задачу, идею предложил он, думаю если реализую то поставит оценку по практике. Суть идеи в том что нужно брать этот массив из координат точек (он мне про него уже не знаю сколько времени твердит), это подать на вход, цель как мы и хотели поставить оговорённые числа тех фигур
а дальше как он мне объяснил работа с массивами и циклом условия

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение11.07.2011, 10:10 


23/11/09
130
Цитата:
Суть идеи в том что нужно брать этот массив из координат точек (он мне про него уже не знаю сколько времени твердит), это подать на вход, цель как мы и хотели поставить оговорённые числа тех фигур

Ну так это вообще суть обучения НС, я вам тоже это твержу с самого начала. :wink:
А для того чтобы было что подавать нам надо это еще сгенерировать или как то загрузить уже имеющиеся данные! Поэтому и надо сделать функции для генерации обучающих пар!
Еще раз кратко разъясню:
Мы берем обучающие пары, состоящие из входов и желаемых выходов.
Подаем их в обучающий алгоритм а он настраивает веса сети уменьшая ошибку отклика. (это алгоритмы "бэк проп", Левенберг-Маркар и тд)
Несколько иначе действуют генетические алгоритмы:
В начале рандомизируем сеть. Далее смотрим отклик.
Поехали в цикле:
Мутируем сеть, смотрим отклик, если он стал лучше то переходим на лучшую сеть и работает уже с ней. Далее в начало цикла пока не достигнуто условие выхода.
Цитата:
а дальше как он мне объяснил работа с массивами и циклом условия

Не понял какими массивами, каким циклом условия.

Еще раз перечислю ключевые моменты для вашего понимания решения задачи.
1. Почему нельзя использовать линейную сеть?
2. Почему именно персептрон с сигмоидной передаточной функцией?
3. Почему как входы так и выходы работают с диапазонами значений [-1;1] (выбирайте этот диапазон) или [0;1] (этот диапазон непригоден для распознавания)? Раз они работают с такими диапазонами, то возникает необходимость в подготовке данных перед обучением!

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение11.07.2011, 12:58 


23/11/09
130
Вообще же обучение НС можно рассматривать как нахождение глобального экстремума целевой функции, за которую и выступает сама НС.
Подумайте над этим. :wink:

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение11.07.2011, 14:40 


05/07/11
22
Сегодня наконец-то удалось сделать программу!)
завтра осталось мне её сдать
Код:
P = zeros(4,81);
T = [0 1];
% y = -5;
% z = -5;
% r = 1;
i=1;
for x = -2:1:0
    for y = -1:1:1
        for z = -1:1:1
            for r = 1:1:3
                 P(1,i)=x;
                 P(2,1)=y;
                 P(3,i)=z;
                 P(4,i)=r;
                 i = i+1;
if ((x^2+y^2+z^2)==r^2)
    T(i)=1;
else
    T(i)=0;
end
            end
         end
     end
end


net=newff(P,T);
%,{'logsig' 'logsig' 'purelin'},'trainlm'
net.trainParam.goal=0.01;
net.trainParam.epochs=1000;
net=train(net,P);

x
y
z
T


-- 11.07.2011, 15:42 --

собственно удалось НС обучить на эту формулу сферы
на выходе получаем 82 значения Т из 0 и 1
только ещё нужно сделать так чтобы можно было вводить определённые координаты и симулировать с НС

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение11.07.2011, 18:56 


23/11/09
130
А вы проверяли сколько у вас выборок T=0 и T=1?
Потому что их должно быть не абы сколько а поровну! Тогда обучение не будет "перекошено".
ЗЫ: Я поэтому и предлагал генерировать выборки а не отсеивать по проверке. Но вы упорно продолжаете игнорировать все рекомендации :-)

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение11.07.2011, 20:44 


05/07/11
22
по идее их должно быть поровну (правда я не считал)
должно быть 41 значения с T=0 и 41 c T = 1
82 брал исходя из начального условия (в зависимости от промежутков x,y,z)
один раз пробовал брать промежуток -100:1:100
там количество значений дошло до 5000
компьютер просто не осилил их все пересчитать.
по поводу отсеивания я правда не уверен, нужно проверить на самом деле мы теряем какие либо результаты.

-- 11.07.2011, 22:19 --

кстати для решения очень помогла эта статья http://www.nsu.ru/matlab/MatLab_RU/neur ... k1.asp.htm там кстати подробно расписано про тестирование НС, но просто мне и преподаватель сказал что ему это не нужно, главное чтобы на выходе получить то что он хочет
ещё вот такой вопрос есть если я делаю для 1 координаты по идее такой код должен работать?
Код:
x=-2;
y=0;
z=0;
r=4;
if ((x^2+y^2+z^2)==r^2)
    T(i)=1;
else
    T(i)=0;
end

Y=sim(net,p);
T

насчёт p я думаю он будет брать его из начального условия

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение12.07.2011, 08:59 


23/11/09
130
Цитата:
ещё вот такой вопрос есть если я делаю для 1 координаты по идее такой код должен работать?

Цитата:
насчёт p я думаю он будет брать его из начального условия

Сформулируйте нормально вопрос пожалуйста, что вы делаете?

Если учесть что начальное условие из предыдущего листинга у вас обнуление p то он и выдаст вам что это не сфера.

 Профиль  
                  
 
 Re: Вопрос по matlab
Сообщение12.07.2011, 22:14 


05/07/11
22
Раздел "Математика\Neural Network Toolbox"

Практическое занятие 1. Создание однонаправленной сети

В оглавление \ К следующему разделу \ К предыдущему разделу

Цель занятия – продемонстрировать основные этапы реализации нейронно-сетевого подхода для решения конкретной задачи. Можно выделить 4 основных этапа:
1. Подготовка данных для тренировки сети.
2. Создание сети.
3. Обучение сети.
4. Тестирование сети.
5. Моделирование сети. (Использование сети для решения поставленной задачи.)

В качестве примера рассмотрим следующую задачу:
Задан массив, состоящий из нескольких значений функции (S>0) на интервале (0,1). Создать нейронную сеть такую, что при вводе этих значений на входы сети на выходах получались бы значения параметров С,A и S.

1. Подготовка данных для обучения сети

В первую очередь необходимо определиться с размерностью входного массива.
Выберем количество значений функции равным N=21, т.е. в качестве входных векторов массива используем значения функции y в точках х=0.05; …1.0. Для обучения сети необходимо сформировать массив входных векторов для различных наборов параметров С,A и S. Каждый набор этих параметров является вектором-эталоном для соответствующего входного вектора.

Для подготовки входного и эталонного массивов воспользуемся следующим алгоритмом. Выбираем случайным образом значения компонент вектора – эталона С,A S и вычисляем компоненты соответствующего входного вектора. Повторяем эту процедуру М раз и получаем массив входных векторов в виде матрицы размерностью NxM и массив векторов – эталонов в виде матрицы размерностью в нашем случае 3хМ. Полученные массивы мы можем использовать для обучения сети.

Прежде чем приступать к формированию обучающих массивов необходимо определиться с некоторыми свойствами массивов.

Диапазон изменения параметров С,A S. Выберем диапазоны изменения параметров C,A,S равными (0.1, 1). Значения, близкие к 0 и сам 0 исключим в связи с тем, что функция не определена при S=0. Второе ограничение связано с тем, что при использовании типичных передаточных функций желательно, чтобы компоненты входных и выходных векторов не выходили за пределы диапазона (-1,1). В дальнейшем мы познакомимся с методами нормировки, которые позволяют обойти это ограничение.
Количество входных и эталонных векторов выберем равным М=100. Этого достаточно для обучения а процесс обучения не займет много времени.

Тестовые массивы и эталоны подготовим с помощью программы mas1:

% формирование входных массивов (входной массив 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';

С помощью этой программы формируется матрица P из M=100 входных векторов-столбцов, каждый из которых сформирован из 21 точки исходной функции со случайно выбранными значениями параметров C,A,S, и матрица T эталонов из 100 эталонных векторов-столбцов, каждый из которых сформирован из 3 соответствующих эталонных значений. Матрицы P и T будут использованы при обучении сети. Следует отметить, что при каждом новом запуске этой программы будут формироваться массивы с новыми значениями компонентов векторов, как входных, так и эталонных.

2. Создание сети

Вообще, выбор архитектуры сети для решения конкретной задачи основывается на опыте разработчика. Поэтому предложенная ниже архитектура сети является одним вариантом из множества возможных конфигураций.
Для решения поставленной задачи сформируем трехслойную сеть обратного распространения, включающую 21 нейрон во входном слое (по числу компонент входного вектора) с передаточной функцией logsig, 15 нейронов во втором слое с передаточной функцией logsig и 3 нейрона в выходном слое (по числу компонентов выходного вектора) с передаточной функцией purelin. При этом в качестве обучающего алгоритма выбран алгоритм Levenberg-Marquardt (trainlm). Этот алгоритм обеспечивает быстрое обучение, но требует много ресурсов. В случае, если для реализации этого алгоритма не хватит оперативной памяти, можно использовать другие алгоритмы (trainbfg, trainrp, trainscg, traincgb, traincgf, traincgp,trainoss,traingdx). По умолчанию используется trainlm. Указанная сеть формируется с помощью процедуры:

net=newff(minmax(P),[21,15,3],{'logsig' 'logsig' 'purelin'},'trainlm');

Первый аргумент - матрица Mx2 минимальных и максимальных значений компонент входных векторов вычисляется с помощью процедуры minmax.
Результатом выполнения процедуры newff является объект – нейронная сеть net заданной конфигурации. Сеть можно сохранить на диске в виде mat. файла с помощью команды save и загрузить снова с помощью команды load. Более подробную информацию о процедуре можно получить, воспользовавшись командой help.

3. Обучение сети

Следующий шаг – обучение созданной сети. Перед обучением необходимо задать параметры обучения. Задаем функцию оценки функционирования sse.

net.performFcn='sse';

В этом случае в качестве оценки вычисляется сумма квадратичных отклонений выходов сети от эталонов. Задаем критерий окончания обучения – значение отклонения, при котором обучение будет считаться законченным:

net.trainParam.goal=0.01;

Задаем максимальное количество циклов обучения. После того, ка будет выполнено это количество циклов, обучение будет завершено:

net.trainParam.epochs=1000;

Теперь можно начинать обучение:

[net,tr]=train(net,P,T);

Процесс обучения иллюстрируется графиком зависимости оценки функционирования от номера цикла обучения.

Таким образом, обучение сети окончено. Теперь эту сеть можно сохранить в файле nn1.mat:

save nn1 net;

4. Тестирование сети

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

Для оценки достоверности результатов работы сети можно воспользоваться результатами регрессионного анализа, полученными при сравнении эталонных значений со значениями, полученными на выходе сети когда на вход поданы входные векторы тестового массива. В среде MATLAB для этого можно воспользоваться функцией postreg. Следующий набор команд иллюстрирует описанную процедуру:

>> mas1 - создание тестового массива P
>> y=sim(net,P); - обработка тестового массива
>> [m,b,r]=postreg(y(1,:),T(1,:)); - регрессионный анализ результатов обработки.

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

>> [m,b,r]=postreg(y(2,:),T(2,:));

>> [m,b,r]=postreg(y(3,:),T(3,:));

Как видно из рисунков, наша сеть отлично решает поставленную задачу для всех трех выходных параметров. Сохраним обученную сеть net на диске в файл nn1.mat

save nn1 net

5. Моделирование сети. (Использование сети для решения поставленной задачи)

Для того, чтобы применить обученную сеть для обработки данных, необходимо воспользоваться функцией sim:

Y=sim(net,p);

где p – набор входных векторов, Y – результат анализа в виде набора выходных векторов. Например, пусть
С=0.2, A=0.8, S=0.7, тогда

p=0.2*exp(-((x-0.8).^2/0.7));

Подставив этот входной вектор в качестве аргумента функции sim :

Y=sim(net,p)

Получим:

Y =
0.2048 (C)
0.8150 (A)
0.7048 (S)
>>
Что весьма близко к правильному результату (0.2; 0.8; 07).

взял с сайта

-- 12.07.2011, 23:41 --

Вопрос заключается в том можно ли также засунуть туда нашу функцию X^2+Y^2+Z^2=r^2?
на месте Y
просто если получится то задача будет решена, в том коде предыдущего поста все же есть ошибка
программа считает координаты в обход НС
а если через саму нс
то нужно уже как тут писать
p=X^2+Y^2+Z^2
y=sim(net,p)
но на p нужно задать как то то условие равновесия X^2+Y^2+Z^2=r^2

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group