Приложение на matlab при синтез и анализ на поведението на изкуствени невронни мрежи



страница3/3
Дата15.04.2017
Размер489.62 Kb.
#19208
1   2   3

В MATLAB съществуват и други функции, позволяващи създаване на невронни мрежи, но те не са обект на разглеждане в настоящата дипломна работа.

4.2.2. Функции за обучение на невронна мрежа

Обучението на невронните мрежи може да се извършва с помощта както на крайни алгоритми, така и на интерационни процедури. При обучението с крайни алгоритми, примерно алгоритъма на линейните най-малки квадрати описанието на архитектурата на мрежата и обучението на мрежата се осъществяват с една команда (примерно newlind). Обучението с интерационни процедури се прави с една от двете команди adapt или train. В повечето случай една мрежа може да се обучава както с adapt, така и с train. Обучението с adapt става с последователно обработване на данните, а при обучението с train данните се обработват пакетно. В таблица 4.2 са дадени параметрите, който функциите изискват за да може да бъде извършено обучението и параметрите който описват мрежата след обучението.[1]



Таблица 4.2

Име на функцията

Изискуеми параметри

Параметри след обучението

adapt

train


P – вход на мрежата

Т – еталон ( ако се изисква от съответната мрежа )

Pi – времезакъснения на входовете ( ако се използва от мрежата)

Ai – времезакъснение на слоевете (ако се използва от мрежата)




Net – актуализирана мрежа.

Y – изход на мрежата.

Е – грешки на мрежата

Pf - Окончателни условия (състояния) на входните сигнали.

Af – Окончателни условия (състояния) на слоевете използващи времезакъснения.

TR – брой цикли




V. Приложение на Matlab за решаване на типични задачи с изпозване на невронни мрежи.

5.1. Използване на невронни мрежи за апроксимация

Много често се налага прогнозиране на изменението на дадени изходящи величини, в зависимост от входните. Използването на невронни мрежи улеснява разработването на модели. В този раздел от дипломната работа, на база на примери, е представен опитът да се изградят и използват невронни мрежи с различна архитектура за целите на апроксимацията, както и изследванията свързани с влиянието на параметрите на мрежата върху получените резултати



5.1.1. Използване на мрежи с радиално базисни функции в задачите за апроксимация

Невронни мрежи с радиално-базисни функции в средата на MATLAB могат да се реализират чрез две функции - newrb и newrbe. И при двете потребителят трябва да зададе ширината на радиално базисната функция. При newrb той трябва да определи и средноквадратичната грешка между изхода от мрежата и наборът еталонни изходи, след достигането на която се счита, че обучението е завършено. При използването на newrbe подобна величина не се задава, а тази функция проектира невронни мрежи, като добавя неврони в скрития слой до постигне на минимална грешка.

Симулация на поведението на невронната мрежа при произволни входни сигнали се извършва чрез функция sim. Тя има два параметър – моделът на мрежата и входен вектор с данни. Като резултат от използването и се получава изходен вектор със същата размерност като входния, който съдържа стойностите получени от реакцията на мрежата.

Първата задача, която си поставихме беше чрез използването на невронни мрежи да се прогнозира поведението на обект, за който е известно, че при изменение на входа от 0 до 1 със стъпка 0.1 са измерени следните стойности за изхода: -0.447 1.947 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3. Тези данни са използвани за обучение на мрежата.

За целта беше разработена следната програма в средата на MATLAB, в която мрежата е изградена с използване на функцията newrb. В нея входния вектор е зададен с променлива P, a еталонният изходен вектор с T. С променливата V e отбелязан векторът на изхода от симулацията на мрежата. Изграждането на мрежата и симулацията се осъществяват чрез следната програма :

T=[-0.447 1.947 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3 11.2]

P=[0 : 0.1 : 1]

plot (P,T,'c+:')

hold on


eg=0.02;

sc=2;


net=newrb(P,T,eg,sc)

net.layers{1}.size

V=sim(net,P)

plot (P, V,'r-')

pause

p=[0:0.01:1]



v=sim(net,p);

plot (P,T,p,v,'r+:')


При създаването на радиално базисните функции не можем да променяме броя на невроните във слоевете, а единствено да разберем колко са те. Това става с командата net.layers{}.size. Параметърът във фигурните скоби определя номера на слоя чиято размерност желаем да получим. Освен това, вече създадената невронна мрежа може да се трансформира до симулинк формат чрез функция gensim(хххх), където с xxxx e означено името на променливата в която е запаметена невронната мрежа. Този подход позволява невронната мрежа да бъде лесно визуализирана. На фиг.5.1. е показано представянето на структурата на невронната мрежа в средата на симулинк – Neural Network, входния вектор p{1}, и изхода от симулацията y{1} .




Фиг.5.1. Проектиране на невронната мрежа в simulink.

След разкриване на блока се виждат двата невронни слоя - Layer 1 и Layer 2, като изходът от първият а{1} се явява вход на втория – Фиг. 5.2.




Фиг. 5.2. Двата невронни слоя, представени в Simulink

На фиг.5.3. е дадена структурната схема на първия слой . В блока weight са дадени връзките между отделните неврони. С bias са обозначени отместванията, използваната активционна функция е radbas – радиално-базисна.




Фиг. 5.3. Архитектурата на първия невронен слой на невронната мрежа.

На фиг 5.4. е дадена структурната схема на втория невронен слой на невронната мрежа, в който невроните използват линейна функция.





Фиг. 5.4. Архитектурата на втория невронен слой на невронната мрежа.

Невронната мрежа е създадена и обучена при следните стойности на параметрите: вектори, използвани при обучението P и T със стойности, съответстващи на посочените в условието на задачата, допустима средноквадратичната грешка - не по-голяма от 0.02 (променлива eg), ширината на радиалната базисна функция 1 (зададена чрез променлива sc). На фиг 5.5. са изобразени получените резултати и еталонните данни съответно с плюсове и непрекъсната линия. Като така създадената невронна мрежа има 10 неврона в първият слой и 1 във втория.




Фиг. 5.5. Получените резултати от мрежата и еталонните данни

Направените изследвания показаха, че задаваната ширината на Гаусовата функция е параметър, съществено влияещ на работоспособността на мрежата. На пример при големи стойности на този параметър не може да се извърши апроксимацията с необходимата точност. При задаване на стойности на този параметър над 2 се забелязват неточности в апроксимацията. Това явление е илюстрирано на фиг 5.6. На нея с плюсове са представени резултати е получени от мрежата, а с непрекъсната линия – еталонните данни.

Ако стойността на параметъра за ширината на функцията се зададе твърде малка, апроксимацията е лоша, защото гаусовата функция ще “сработва” за много тесен диапазон на изменение на входа. Следователно при използване на радиално-базисни мрежи, изследователят за всяка конкретна задача по експериментален път трябва да определи оптималната стойност на ширината на гаусувата функция, така че да постигне желаната точност при апроксимация.

Фиг.5.6. Резултати от работата на мрежата при голяма стойност за ширината на функцията.

Интерес представлява да се изучи поведението на мрежата при стойности на входа, различни от еталонните, използвани при обучението и. За целта на входа е подаден сигнал, изменящ се от 0 до 1 с десетократно по-малка стъпка от еталонните данни - 0,01. Получените резултати са представени на фиг.5.7. На нея еталонните данни са показани с непрекъсната линия, а данните, получени от мрежата с плюсове.


Фиг. 5.7. Резултати от работата на мрежата при входен вектор със стъпка 0.01

Анализът на получените резултати показва, добри прогнозиращи свойства на мрежата в точките, използвани като еталон за обучение и неудовлетворителни резултати при изменение на аргумента в интервалите [0, 0.2] и [0.7, 1]. Допълнителното намаление на критерия за спиране на обучението под 0,02 не доведе до съществена промяна в резултата. Поради това се взе решение вместо с функция newrb, мрежата да се изгради с използване newbre, която, според авторите и минимизира средноквадратичната грешка и води до постигане на максимална точност. На фиг. 5.8. с плюсове са показани данните, получени от така създадената мрежа при входен вектор, изменящ се в диапазона от 0 до 1 със стъпка с размер 0.01, а еталонните данни са представени с непрекъсната линия.





Фиг. 5.8 . Резултат при симулация при използване на невронна мрежа, изградена и обучен с функция newbrе .

Очевидно е, че с използване на функцията newbre се получават по-добри резултати при апроксимацията. Едновременно с това трябва ад се отбележи, че това е постигнато за сметка само на още един допълнителен неврон в първия слой, като при така изградената мрежа те са 11.



Изводи, касаещи използването на радиално-базисни невронни мрежи в задачите за апроксимация:

  1. Ширината на радиалната базисна функция е важен параметър, като от избора му зависи качеството на работата на невронната мрежа. Неговата стойност не трябва да се задава нито прекалено голяма, нито прекалено малка, защото мрежата работи незадоволително и в двата случая. Оптималната и стойност зависи от спецификата на конкретната задача и трябва да бъде определена от изследователя.

  2. Функцията nebre дава по-добри резултати при апроксимацията, но при по-сложни задачи, е възможно използването и да доведе до значително нарастване на броя неврони в скрития слой, а в резултат на това и обема на изчислителните операции за определяне на изхода, което ще доведе до силно намаляване на бързодействието. Следователно изборът на функция, за създаване на радиално-базисна невронна мрежа е компромисна задача, в която точността и бързодействието са два противоречиви критерия.

5.1.2. Решаване на задачите за апроксимацията с използване на многослойни невронни мрежи с еднопосочно предаване на сигнала, използващи метода за обучение с обратно разпространение на грешката и сравняване на работата им с мрежи с радиално базисни функции.

Многослойни невронни мрежи с еднопосочно предаване на сигнала използващи метода с обратно разпространение на грешката се създават с функцията newff. Създадената мрежа е с два невронни слоя като в първият активационната функция е сигмоидална, а във втория - линейна.

За разлика от радиално-базисните мрежи, при многослойни невронни мрежи с прави връзки, използващи метода с обратно разпространение на грешката, потребителят определя броя неврони в слоевете, както и диапазона на изменение на входните величини. Това става съответно като параметрите на мрежата се задават преди синтеза и, който се извършва с функция newff (Таблица 4.1). Трябва да се обърне внимание, че за коректното задаване на първия и параметър е удобно да се използват функцията minmax(), която намира най – голямата и най – малката стойност на масива, явяващ се неин аргумент. Вторият параметър на функцията представлява вектор с толкова елемента, колкото са невронните слоеве в проектираната мрежа. Всяко число в него определя броя неврони в съответния слой. При двуслойни мрежи (каквито са най-често използваните) параметрите задаващи вида на активационните функции могат да не се зададат явно и тогава по подразбиране се приема, че първият слой работи със сигмоидна, а втория с линейна функция.

Преди започване на обучението, което се извършва с функцията train се задават параметрите : максималния брой цикли до който може да стигне обучението - linnet.trainparam.epochs и желаната цел ( стойност на грешката при достигането на която обучението се счита за завършено) -linnet.trainparam.goal . Обучението по-подразбиране, ако не бъде зададена допълнително друга функция се извършва с ТRAINLM, която използва метода на най-малките квадрати и се характеризира със значително бързодействие много бърза.

Една от поставените задачи беше изследване на влиянието на броя на невроните върху точността на апроксимацията. За целта беше избарана функция при . За обучение на мрежата е използвана извадка само с пет елемента x = (-1,-0.5,0,0.5,1). След синтез на мрежата се симулира нейното поведение при подаване на входа на вектор със стойности, обхващащи пълния диапазон на изменение на аргумента със стъпка 0,1.

Изграждането, обучението на мрежата и симулацията се осъществяват чрез следната програма :



clear all

x=[-1 -0.5 0 0.5 1];

y=2*x.^3-1.5*x+0.5;

x1=-1:0.1:1;

y1=2*x1.^3-1.5*x1+0.5;

m=2;


linnet=newff(minmax(x),[m,1],{'logsig','purelin'});

m=1000;


err=0;

linnet.trainparam.epochs=m;

linnet.trainparam.goal=err;

linnet=train(linnet,x,y)

ysim=sim(linnet,x1);

plot(x1,y1,'r',x1,ysim),grid,figure(1),pause


На фиг. 5.9 е показан резултатът от симулацията, когато мрежата е с два неврона в скрития слой. Със синя линия е представен изхода от мрежата, а с червена – еталонната функция. Очевидно е, че при тази архитектура, мрежата не е в състояние да възпроизведе еталонната функция поради недостатъчен брой неврони. Интегралната квадратична грешка има стойност 2.2521.

Хипотезата, че колкото са повече невроните в слоя, толкова по-добри резултати ще бъдат получени, също не е вярна. На фиг. 5.10. са представени еталонната функция и изходния сигнал от мрежата, когато тя е с десет неврона в скрития слой. В този случай апроксимацията също не е добра. При стойности на входа, съвпадащи с включените в обучаващата серия, изходът се възпроизвежда точно, но в следствие на варирането на останалите свободни тегла, той има неопределени стойности при стойности на аргумента, съществено отличаващи се от зададените в обучаващата серия. Интегралната квадратична грешка има стойност 1.6682.



Фиг. 5.9. Резултат от симулацията при два неврона в скритият слой



Фиг. 5.10. Резултат от симулацията при десет неврона в скритият слой

Направените изследвания показват, че за конкретната задача при посочената обучаваща серия, най-добра апроксимация се постига при три неврона в скрития слой фиг. 5.11. В този случай интегралната квадратична грешка има стойност 0.1319.





Фиг. 5.11. Резултат от симулацията при три неврона в скритият слой

За да се сравни поведението на невронни мрежи с различни активационни функции, беше изградена радиално-базисна мрежа, предназначена за решаване на по-горе описаната задача. Използвана беше същата обучаваща серия. Синтеза и обучението на мрежата се извърши чрез функция newbre, която показа по-добри резултати по отношение на точност на апроксимация в сравнение с newbr.

На фиг. 5.13 е показан резултатът от симулацията. С зелена линия е представена еталонната функция, а със синия – изходът от мрежата.

При този тип мрежа стойността на интегралната квадратична е 0.0946, като намерената оптимална стойност на невроните в скритият слой е 5.

Следователно може да се направи извода, че използването на радиално-базисна функция води до незначително подобряване на апроксимацията за сметка на значително увеличаване на броя неврони в скрития слой.



Фиг. 5.12. Резултат от симулацията на мрежа, изградена с функция newbre.

Изводи

Многослойните невронни мрежи с право предаване на сигнала, използващи метода с обратно разпространение на грешката се нуждаят от по-малко невронни в скритият слой, в сравнение с невронните мрежи с радиално базисни функции.

В същото време използването на невронните мрежи с радиални базисни функции е значително по-лесно за изследователите, тъй като при тях не е необходимо по експериментален път да бъдат определен оптималният брой неврони, както се налага при многослойните невронни мрежи с право предаване на сигнала, използващи метода с обратно разпространение на грешката.

5.1.3. Изследване на степента на промяна на параметрите на обекти върху броя цикли на обучението при многослойни невронни мрежи с еднопосочно предаване на сигнала

Идеята е да се изследва колко бързо ще се осъществи ”дообучение” на една мрежа, така че тя да се адаптира към промените в параметрите на обект. За целта е избрана функция, чрез която се симулира обект. За извадка от входни стойности е намерен изхода на мрежата и тези данни са използвани за нейното начално обучение. След което се следи има ли съществена разлика между прогнозираният чрез мрежата изход на обекта и действителния (получаван чрез еталонния модел). Промяната на обекта е симулирана чрез промяна на стойностите на коефициентите в еталонния модел.

Мрежата, която е използвана за извършване на това изследване е двуслойна с право предаване на сигнала( прави връзки ), използваща метода за обучение с обратно разпространение на грешката. Скритият слой се състои от пет неврона със сигмоидална активационна функция , а изходният слой от един неврон с линейна активационна функция. Обучението се извършва с функцията TRAINBFG, която е по-бавна от ТRAINLM, но за сметка на това изисква значително по малко памет, което е от съществено значение при управление на по-сложни обекти. При обучението са зададен следните параметри: желана точност – 0.015 и максимален брой обучаващи цикли - 500 цикъла.

Изграждането, обучението на мрежата и симулацията се осъществяват чрез следната програма :


P=[0.1:0.1:1.5];

T = 3*P.^3+2*P.^2+4*P;

net = newff([0 2],[5 1],{'logsig' 'purelin'}, 'TRAINBFG');

Y = sim(net,P);

plot(P,T,P,Y,'o')

pause


net.trainParam.epochs = 500;

net.trainParam.goal = 0.015

net = train(net,P,T)

pause


Y = sim(net,P);

plot(P,T,P,Y,'o')

pause

T1=3.3*P.^3+2.2*P.^2+4.4*P;



e = T1-Y

e=std(e)


if e > 0.015

net.trainParam.epochs = 500;

net.trainParam.goal = 0.015

net = train(net,P,T1)

pause

end


Y1= sim(net,P);

plot(P,T1,P,Y1,'o')

pause

clear all



P=[0.1:0.1:1.5];

T = 3*P.^3+2*P.^2+4*P;

net = newff([0 2],[5 1],{'logsig' 'purelin'}, 'TRAINBFG');

Y = sim(net,P);

plot(P,T,P,Y,'o')

pause


net.trainParam.epochs = 500;

net.trainParam.goal = 0.015;

net = train(net,P,T)

T2=4.5*P.^3+3*P.^2+6*P;

e = T2-Y1;

e=std(e)


if e > 0.015

net.trainParam.epochs = 500;

net.trainParam.goal = 0.015

net = train(net,P,T2)

pause

end


Y= sim(net,P);

plot(P,T2,P,Y,'o')


На фиг. 5.13 е показано първоначалното обучение на невронна мрежа. За да се апроксимира функцията до желаната стойност на средноквадратичната грешка са необходими 42 цикъла на обучение.


фиг. 5.13. Обучение при необучената невронна мрежа
След промяна на параметрите на функцията (открита грешка по-голяма от 0,015), мрежата започва нов цикъл на обучение. На фиг. 5.14 е илюстрирано това ново обучение, когато е симулирана промяна в параметрите на обекта чрез увеличаване на всички коефициенти във функцията с 10 % . Новото обучение е ангажирало 12 цикъла.

Фиг. 5.14. Ново обучение с увеличаване на коефициенти с 10 %

При 50% изменениена коефициентите в еталонния модел, адоптацията на мрежата към променените параметри на обекта отнема 19 епохи. Процесът на обучението в този случай е илюстриран на фиг. 5.15.




Фиг. 5.14. Ново обучение с увеличаване на коефициенти с 50 %
Изводи :
Невронните мрежи успешно могат да се използват при прогнозиране на поведението на обекти с променливи параметри, ако в системата за управление е заложено “дообучение” на мрежата при откриване на несъответствия между реалните и прогнозирани стойности.

Най-голям бой обучаващи цикли(епохи) са необходими за да бъде първоначално обучена невронна мрежа. Броят циклите необходими за обучението при промяна на параметрите зависи от степента на тази промяна, но във всички случаи постигнатото бързодействие е значително по-голямо в сравнение с първоначалното обучение на мрежата.



5.2. Използване на невронни мрежи в задачите за разпознаване на образи

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

Целта на този раздел е да покаже как задача за разпознаване на образи може лесно да се реализира чрез изкуствена невронна мрежа.

Конкретната задача беше да бъде синтезирана и обучена мрежа която да разпознава буквите от латинската азбука. Всеки символ е представян чрез матрица с размерност 5x7. За формиране на матричното представяне на символите е използвана вградената в MATLAB функция prprob, която връща 26 вектора, всеки описващ един символ. Всеки вектор има по 35 елемент.

С цел изследване поведението на мрежата при наличие на шум, към елементите на образа, предназначен за разпознаване е добавен нормално разпределен случаен шум с различна дисперсия, генериран чрез функцията randn.

Създадена е двуслойна невронна мрежи с прави връзки, използваща метода за обучение с обратно разпространение на грешката. Тя има 26 неврона в изходния слой и 10 неврона в скрития, като броя им е избран въз основа на предположения и опит. И в двата слоя е избрана сигмоидална активационна функция. Тъй като наличието на шум може да доведе до формулирането на изходен вектор с различни стойности от нули и единици е използвана функция compet. Тя присвоява единица на елемента с максимална стойност от изходния вектор, а на всички останали нули.

За да се създаде мрежа която може да обработва зашумени обекти е необходимо да се извърши обучение както с идеални, така и с зашумени образци. Първо се извършва обучение без наличието на шум, след това се обучава и с зашумени вектори, но след второто обучение мрежата загубва способността си да разпознава векторите без шум и затова се извършва отново обучение с идеални символи. Зададено е обучението да се изпълнява с функция trainbpx, която използва метода с обратно разпространение на грешката.

Буквата която сме избрали за изследванията е “J”. Изграждането на мрежата, обучението и изследване на прага на разпознаваемост във функция от дисперсията на шума е извършено чрез следната програма:

alphabet,targets] = prprob;

[R,Q] = size(alphabet);

[S2,Q] = size(targets);

S1=10;


net = newff(minmax(alphabet),[S1 S2], {'logsig' 'logsig'}, 'traingdx');

net.LW{2,1} = net.LW{2,1}*0.01;

net.b{2} = net.b{2}*0.01;

P = alphabet;

T = targets;

net.performFcn = 'sse' ;

net.trainParam.goal = 0.1;

net.trainParam.show = 20;

net.trainParam.epochs = 5000;

net.trainParam.mc = 0.95

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

pause


netn=net;

netn.trainParam.goal = 0.6;

netn.trainParam.epochs=300;

T=[targets targets targets targets];

for pass =1:10

P=[alphabet,alphabet,(alphabet +randn(R,Q)*0.1),(alphabet +randn(R,Q)*0.2)];

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

end


pause

netn.trainParam.goal = 0.1;

netn.trainParam.epochs =500;

netn.trainParam.show = 5;

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

noisyJ = alphabet( : ,10) + randn(35,1)*0.9;

plotchar(noisyJ)

pause


A2=sim(net,noisyJ);

A2=compet(A2)

answer = find(compet(A2)==1)

plotchar(alphabet(: ,answer))

На фиг. 5.16 е представен образът, получен след зашумяване на идеалното изображение с нормално-разпределен шум с дисперсия 0,2

Полученият изход от мрежата е представен на фиг. 5. 17. Както се вижда при тази стойност на дисперсията мрежата успява вярно да класифицира образа





Фиг.5.16. Зашумен Образ Фиг. 5.17. Образ от мрежата

След извършване на редица изследвания се установява, че при увеличаване на шума (дисперсията) над 0.9, мрежата не успява да класифицира правилно символа (буквата) и започва да се бърка. Зашуменият образ на буквата е представен на фиг. 5.18, а на фиг. 5.19 символът към който мрежата извършва класификация.





Фиг.5.18. Зашумен Образ Фиг. 5.19. Образ от мрежата

Извод :

Използването на невронни мрежи за целите на разпознаване на образи е изключително перспективно направление. С използването на този подход класификационните задачи се реализират изключително леко. Не са необходими сложни алгоритми и модели, които да описват еталоните към които се извършва класификацията, нито критерии за съвпадение, които в много случаи са комплексни и трудно подлежат на формализация. За да бъде обучена невронната мрежа е необходима само до се зададе подходящ набор от незашумени и зашумени еталони. Едно от предимствата на невронните мрежи е , че те успешно разпознават области със значително ниво на зашуменост, като праговата стойност зависи както от вида на самия еталон, така и от използваните при обучението образци.



VІ. Заключение

В дипломната работа е представена същността на изкуствените мрежи и са очертани възможностите, които предоставя програмната среда MATLAB за техния синтез, обучение и симулация на работата им. Чрез често срещани задачи от областта на идентификацията и разпознаването на образите е представен механизма на изграждане на невронни мрежи с различна архитектура. Изследвано е влиянието на параметрите на мрежите (вид архитектура, активационна функция, брой неврони в скрития слой и др.) върху получените резултати. Направен е опит за формулиране на препоръки при използване на различни невронни мрежи.

Резултатите от дипломната работа могат да се използват както в процеса на обучението, така и при решаване на реални задачи, свързани с апроксимация и разпознаване на образи.




Каталог: 2013
2013 -> Временно класиране „В”-1” рг мъже – Югоизточна България
2013 -> Конкурс за заемане на академичната длъжност „Доцент в професионално направление Растителна защита; научна специалност Растителна защита
2013 -> Задание за техническа поддръжка на информационни дейности, свързани с държавните зрелостни изпити (дзи) – учебна година 2012/2013
2013 -> 1. Нужда от антитерористични мерки Тероризъм и световната икономика
2013 -> Тест за проверка на математическите знания и умения на учениците в началото на четвърти клас
2013 -> Днес университетът е мястото, в което паметта се предава
2013 -> Отчет за научноизследователската, учебната и финансовата дейност на националния природонаучен музей при бан през 2013 г
2013 -> Програма за развитие на туризма в община елхово за 2013 г


Сподели с приятели:
1   2   3




©obuch.info 2024
отнасят до администрацията

    Начална страница