تمرین های کتاب هاگان
- E10.3, E10.4,E10.6,E10.9,E10.11,E10.13 ازکتاب هاگان
مقدمه:
“Neural Networks: A Systematic Introduction” یک مقدمه جامع به مفاهیم و کاربردهای شبکههای عصبی است.
نویسنده، مارتین هاگان، با استفاده از زبان ساده و مثالهای واضح، خواننده را به دنیای پیچیدهی شبکههای عصبی هدایت میکند.
این کتاب به طور جامع به موضوعاتی مانند معماری شبکههای عصبی، الگوریتمهای آموزش، کاربردها در تشخیص الگو، پردازش تصویر، پردازش زبان
طبیعی و بسیاری موارد دیگر پرداخته است.
همچنین، نویسنده به بررسی مسائل مربوط به عملکرد و استفاده از شبکههای عصبی در صنایع و تحقیقات علمی نیز پرداخته است.
این کتاب مناسب برای دانشجویان، محققان و مهندسان است که علاقهمند به یادگیری عمیق و استفاده از شبکههای عصبی در کاربردهای مختلف
هستند.
با توجه به سبک نوشتاری روان و مثالهای عملی، این کتاب به خواننده امکان میدهد تا مفاهیم پیچیده را به راحتی درک کند و از آنها
بهرهمند شود.
جواب تمرین 10.3
با توجه به درنظر گرفتن ماتریس [.25 .75] میتوانیم خروجی برنامه را بدین صورت داشته باشیم.که مجموع خروجی ها با توجه به تابع فعالساز hardlims برابر باصفر شده است اما ارور شبکه به ازای توابع فعالساز دیگر متفاوت بوده است. کد برنامه در ادامه قرار گرفته است وتصویر خروجی برنامه نیز قرار گرفته است. به همین دلیل چون خروجی برنامه وتارگت دارای دوسطح -1و1 میباشد بهترین حالت برای تابع فعالساز را میتوان hardlim در نظر داشت
%TAMRIN 10.3
clc
clear all
close all
p1=[1 1]
t1=[1]
p2=[-1 -1]
t2=-1
P=[p1′ p2′]
T=[t1 t2]
W=[.25 .75]
b=rand(1,1)
napar=1
a=hardlims(W*P+b)
e=T-a
نمایش خروجی برنامه:
جواب تمرین 10.4:
برنامه دوم با توجه به استفاده از تابع فعالساز hardlims در حلقه دوم به تارگت واقعی رسید وبدین صورت مجموع مربعات خطای برنامه هم در حلقه دوم صفر گردید.
نمایش کد برنامه :
clear all
close all
clc
tic
p1=[1 1]
t1=[1]
p2=[-1 -1]
t2=-1
P=[p1′ p2′]
T=[t1 t2]
S=size(T,1)
R=size(P,1)
W=rand(S,R)
b=rand(S,1)
napar=1
iteration=0
while(napar)
for i=1:size(P,2)
a(:,i)=hardlims(W*P(:,i)+b)
e(:,i)=T(:,i)-a(:,i)
W=W+e(:,i)*transpose(P(:,i))
b=b+e(:,i)
end
iteration=iteration+1
if e==0
napar=0;
end
plot(e,’*’)
hold on
end
نمایش تصویر خروجی برنامه :
در ادامه از بردار صفر برای حدس اولیه برنامه استفاده کردیم. ونتیجه برنامه در حلقه سوم به ارور صفر رسید.جواب خروجیهای برنامه در انتها دقیقا مشابه تارگت واقعی برنامه به ازای ماتریس وزن گردید.
تمرین 10.6
براساس خواسته سوال شبکه ادلاین را برای ضریب یادگیری .1 ایجاد کردیم. کد مربوطه در قسمت ذیل قرار گرفته است.
clear all
close all
clc
tic
p1=[1 1]
t1=[0 -1]
p2=[-1 2]
t2=[-4 1]
P=[p1′ p2′]
T=[t1; t2]
S=size(T,1)
R=size(P,1)
W=rand(S,R)
b=rand(S,1)
napar=1
for i=1:1000
for i=1:size(P,2)
a(:,i)=purelin(W*P(:,i));
e(:,i)=T(:,i)-a(:,i)
W=W+e(:,i)*0.001*transpose(P(:,i));
end
end
سوال اپدیت lms را بدون استفاده از بایاس درخواست داشت به همین دلیل بایاس را از برنامه حذف کردیم.
خروجی برنامه را براساس تارگتی که بر روی چهار قسمت مختصات قرار گرفته بود را در تصویر ذیل نمایش دادیم. بدین صورت کاملا مشهود است است که برنامه دقت بسیار خوبی در تشخیص تارگت داشته است.
و مربع خطای برنامه زیر .1 بوده است.
تمرین 10.9
باطراحی شبکه و کدنویسی برنامه ادلاین میتوانیم به کد زیربرسیم.
clear all
close all
clc
tic
p1=[2 -4]
t1=[1]
p2=[-4 4]
t2=[-1]
p3=[4 2]
t3=1;
P=[p1′ p2′ p3′]
t3=1
T=[t1 t2 t3]
S=size(T,1)
R=size(P,1)
W=[0 0]
b=rand(S,1)
napar=1
iteration=0
while(napar)
for i=1:size(P,2)
a(:,i)=hardlims(W*P(:,i)+b)
e(:,i)=T(:,i)-a(:,i)
W=W+e(:,i)*transpose(P(:,i))
b=b+e(:,i)
end
iteration=iteration+1
if e==0
napar=0;
end
end
%%START W0=[2 0]
W=[2 0]
b=rand(S,1)
napar=1
iteration=0
while(napar)
for i=1:size(P,2)
a(:,i)=hardlims(W*P(:,i)+b)
e(:,i)=T(:,i)-a(:,i)
W=W+e(:,i)*transpose(P(:,i))
b=b+e(:,i)
end
iteration=iteration+1
if e==0
napar=0;
end
end
در این برنامه هم به ازای ورودی صفر و هم به ازای ورودی رندوم خروجی برنامه را بدست اوردیم. در این برنامه وزن های اولیه براساس خود صورت سوال برابر با [2 0 ]قرار داده شد. خروجی برنامه بدین صورت بوده است:
باتوجه به ماتریس اولیه [0 0 ] وتحت تابع فعالساز hardlims در حلقه دوم به جواب رسید. و ارور برنامه برابر با صفر شد. در ادامه با درنظر گرفتن ماتریس اولیه [2 0] برنامه با استفاده از تابع فعالساز hardlims در همان حلقه اولیه به جواب رسید.
تمرین 10.11
کدبرنامه :
clear all
close all
clc
tic
p1=[-1 2]
t1=[-1]
p2=[2 -1]
t2=[-1]
p3=[0 -1]
t3=1;
p4=[-1 0]
t4=1
P=[p1′ p2′ p3′ p4′]
T=[t1 t2 t3 t4]
S=size(T,1)
R=size(P,1)
W=[0 0]
b=rand(S,1)
napar=1
iteration=0
while(napar)
for i=1:size(P,2)
a(:,i)=hardlims(W*P(:,i)+b)
e(:,i)=T(:,i)-a(:,i)
W=W+e(:,i)*transpose(P(:,i))
b=b+e(:,i)
end
iteration=iteration+1
if e==0
napar=0;
end
end
%%START W0=[2 0]
W=[2 0]
b=rand(S,1)
napar=1
iteration=0
while(napar)
for i=1:size(P,2)
a(:,i)=hardlims(W*P(:,i)+b)
e(:,i)=T(:,i)-a(:,i)
W=W+e(:,i)*.1*transpose(P(:,i))
b=b+e(:,i)
end
iteration=iteration+1
if e==0
napar=0;
end
end
پاسخ به سوالات تمرین:
پس از طراحی شبکه برنامه را تحت تابع فعالساز hardlims کدنویسی میکنیم. در این برنامه ضریب یادگیری برابر با .1 خواهند بود. خروجی برنامه در نهایت در حلقه 7 به خطای صفر رسیده است.
تصویر بالا نمایش میدهد که تا زمانیکه خروجی برنامه برای تمام پترن ها به صفر نرسد برنامه در حال اجراست.
تمرین 10.13
دراینجا یک برنامه دولایه درحقیقت داریم. بردار ورودی شامل خروجی لحظه حال فرمول سینوسی وهمچنین لحظه قبل میباشد بدین صورت شبکه ادلاین را بدین نحو بر روی خروجی قرار داده ایم. کد برنامه به صورت زیر خواهد بود.
clear all
close all
clc
K=0:.1:10
Y=sin((K*pi)/5)
P=[K(1:end-1); K(2:end)]
T=Y
S=size(T,1)
R=size(P,1)
W=.001*rand(S,R)
W2=.003*rand(S,R)
napar=1
iteration=0
while(napar)
for i=1:size(P,2)
a1=tansig(W*P(:,i));
a2(:,i)=purelin(W2*a1);
e(:,i)=T(:,i)-a2(:,i);
W=W+e(:,i)*.01*transpose(P(:,i));
W2=W2+e(:,i)*.01*transpose(a1);
end
iteration=iteration+1;
norm(e)
if norm(e)<=1
napar=0;
end
end
در این برنامه از تابع فعالساز purline استفاده شده است.در این تابع فعالساز بدلیل داشتن خروجی های بیش از -1 و1 موثر تر بنظر میرسید .در اینجا خطای میانگین توسط دستور norm بدست امده است. خروجی لایه اول به عنوان ورودی لایه دوم در نظر گرفته شده است. این برنامه تطبیق خوبی جهت اپدیت و بهینه سازی نداشته است و روی خطال میانگین 9 ثابت مانده است.
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.