Tải bản đầy đủ (.doc) (23 trang)

TIỂU LUẬN MÔN HỌC MÔ HÌNH HÓA HỆ THỐNG ĐO LƯỜNG VÀ ĐIỀU KHIỂN Tự chọn loại mạng neuron với chức năng nhận dạng một hàm phi tuyến bất kỳ và tiến hành mô phỏng trên matlab

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (403.4 KB, 23 trang )

Tiểu luận môn học: MẠNG NEURON
TIỂU LUẬN MÔN HỌC
MÔ HÌNH HÓA HỆ THỐNG ĐO LƯỜNG VÀ ĐIỀU KHIỂN
Đề bài:
Tự chọn loại mạng neuron với chức năng nhận dạng một hàm phi tuyến bất
kỳ và tiến hành mô phỏng trên matlab
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 1
Tiểu luận môn học: MẠNG NEURON
1. Cấu trúc của mạng nơ ron
1.1. Mô hình một neuron nhân tạo
Nghiên cứu mạng neuron nhân tạo được xuất phát ý tưởng từ các neuron
sinh học của bộ não người. Mạng neuron nhân tạo là dùng kỹ thuật tái tạo lại
một vài chức năng tương tự như bộ não con người. Mạng neuron nhân tạo không
thể phức tạp như bộ não con người. Tuy vậy vẫn có 2 điểm tương tự giữa mạng
neuron nhân tạo và mạng neuron sinh học. Thứ nhất các khối của hai mạng đều
là các thiết bị tính toán được liên kết cao với các khối khác. Thứ hai là các liên
kết giữa các neuron xác định chức năng của một mạng. Mạng neuron nhân tạo
có những nhiều lợi điểm tiềm năng như sau cho điều khiển thông minh: chúng
học tập từ kinh nghiệm hơn là lập trình, có khả năng tạo ra dữ liệu không nhìn
thấy từ dữ liệu rèn luyện đã cho, nhanh và có thể được thực hiện trong thời gian
thực. Việc nghiên cứu ứng dụng mạng neuron mở ra một hướng mới trong việc
giải quyết các bài toán kỹ thuật và kinh tế. Trong bài toán kỹ thuật, mạng neuron
có thể dùng để nhận dạng, điều khiển, nhận mẫu, giải quyết các bài toán tối ưu
rất có hiệu quả.
- Mô hình một neuron có một đầu vào được mô tả như sau:

Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 2
p
w
n
f


Σ
a
b
1
Inputs
General neuron
Mạng neuron một đầu vào
Tiểu luận môn học: MẠNG NEURON
- Đầu vào vô hướng p được nhân trị số với đại lượng vô hướng w (trọng số)
để tạo ra tích wp là một đại lượng vô hướng. Lượng wp được chuyển cho bộ
tổng. Đầu vào khác là 1 được nhân với độ dốc b rồi chuyển cho bộ tổng. Đầu ra
của bộ tổng là n được gọi là đầu vào của mạng và là đối số của hàm truyền f.
Đầu ra vô hướng của neuron là: a = f(wp + b)
- Mô hình neuron có vectơ đầu vào: Một neuron có thể có nhiều đầu vào và
tạo nên một vector đầu vào. Một neuron với R đầu vào và chỉ có một đầu ra
được mô tả như sau:
- Quan hệ giữa đầu ra và các đầu vào của neuron: a = f(Wp+b)
- Trong đó: p: vectơ biến đầu vào
f: hàm chuyển đổi
a: biến đầu ra của neuron
- Hàm tổng hợp: Một số dạng hàm tổng hợp f(p) được dùng phổ biến:
- Hàm tổng hợp tuyến tính (purelin):

nnfa == )(
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 3
a
1
n
-1
0

Hàm truyền tuyến tính
p
1
w
1,1
n
a
b
1
Inputs
General Neuron

p
2
p
R
w
1,R
Mạng neuron nhiều đầu vào
Tiểu luận môn học: MẠNG NEURON
- Hàm ngưỡng (hardlim):



<

==
00
01
)lim(

nneu
nneu
nharda
- Hàm truyền dạng log-sigmoid:
n
e1
1
logsig(n)

+
=
1.2. Mô hình mạng neuron nhân tạo
- Mô hình mạng nơ ron được hình thành từ việc liên kết các neuron với
nhau theo một nguyên tắc nào đó. Có rất nhiều loại mạng và việc phân loại
mạng cũng có nhiều cách:
- Theo số lớp: mạng neuron 1 lớp, mạng nơ ron nhiều lớp.
- Theo cấu trúc liên kết giữa các đầu vào và đầu ra: mạng neuron truyền
thẳng, mạng neuron hồi qui.
- Theo tính chất làm việc: mạng tĩnh và mạng động.
- Phần tử gây trễ: Là phần tử có tín hiệu ra của nó bị trễ một khoảng thời
gian so với tín hiệu vào, có hai tham số trễ là thời gian trễ và bậc trễ. Phần tử
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 4
0
1
a
n
-1
Hàm truyền log-sigmoid
n
1

-1
0
Hàm truyền ngưỡng
Tiểu luận môn học: MẠNG NEURON
này được sử dụng để lấy tín hiệu quá khứ và nó là yếu tố để tạo ra các đơn vị
neuron động lực học và mạng động lực học trong hệ thống rời rạc.
Quan hệ vào-ra như sau:
)(.)(
τ
itpwtq −=
với w là trọng số của TDL , i là bậc trễ, i=1,2,…,n. τ là thời gian trễ bậc một.
- Mạng nhiều lớp truyền thẳng : Gồm nhiều lớp (N lớp) ghép liên tiếp nhau,
đầu ra của lớp này nối với đầu vào của lớp ngay sau đó.
Lớp đầu tiên là lớp vào (input layer), có R đầu vào và S1 đầu ra.
Lớp cuối cùng là lớp ra (output layer) có SN-1 đầu vào và SN (gọi tắt là S)
đầu ra
Giữa chúng cũng có thể có một số lớp cũng nối liên tiếp nhau gọi là các lớp
ẩn, chúng đóng vai trò trung gian trong mạng, không tiếp xúc trực tiếp với bên
ngoài. Mỗi lớp ẩn có Sk-1 đầu vào, Sk đầu ra.
Các neuron trong một lớp được nối theo cấu trúc ghép nối hoàn toàn,
nghĩa là mỗi neuron sẽ được nối với tất cả các tín hiệu vào của lớp đó và các
neuron trong cùng lớp có cấu trúc liên kết hoàn toàn giống nhau.
- Mạng nơ ron hồi quy (mạng phản hồi): là loại mạng mà tín hiệu ra của
neuron được phản hồi ngược về làm tín hiệu vào cho các neuron lớp trước đó
hoặc cùng lớp đó tạo thành một vòng kín. Tín hiệu phản hồi có thể có phần tử
gây trễ (TDL)
1.3. Các luật học
Việc học của mạng neuron là để tìm chính xác ma trận trọng số liên kết W
của các neuron và xác định được cấu trúc cụ thể của mạng để giải quyết được
bài toán cụ thể.

Có hai kiểu học là học cấu trúc và học thông số:
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 5
Tiểu luận môn học: MẠNG NEURON
- Học cấu trúc: xác định cấu trúc của mạng bao gồm số lượng nút (neuron)
trong mỗi lớp và giá trị của các ma trận trọng số W của mạng.
- Học thông số: tìm được được chính xác các giá trị của ma trận trọng số W
ứng với cấu trúc (cố định) của mạng neuron đã cho.
- Có ba phương pháp học:
+ Học có giám sát: tín hiệu giám sát là những thông tin mong muốn được
cung cấp từ bên ngoài mà đầu ra y của mạng nơ ron cần phải đạt được.
+ Học củng cố: Thông tin cung cấp từ bên ngoài d (tín hiệu củng cố) mang
tính chất định hướng cho quá trình học (cho biết tín hiệu ra của mạng đúng /sai).
+ Học không giám sát: Quá trình học không có bất kỳ tín hiệu nào từ bên
ngoài để giám sát,đó là quá trình tự cấu trúc của mạng. Mạng phải tự xác định
các cặp dữ liệu mẫu (dữ liệu vào ra), các tính chất, các mối quan hệ để tạo được
ma trận trọng số W mong muốn.
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 6
Mạng noron
W
Khối phát tín
hiệu nhận xét
de
x
Mạng nơron
W
Khối phát tín
hiệu nhận xét
de
x
y

Tiểu luận môn học: MẠNG NEURON
- Dạng chung của luật học thông số là xác định giá trị cần điều chỉnh ΔWi
cho vector trọng số Wi.
- Với mạng rời rạc:
)( )( txrtW
i
η
=∆
Trong đó : η là số dương xác định tốc độ học
r là tín hiệu học r=fr(Wi,x,di)
Lúc đó giá trị của vector trọng số tại thời điểm (t+1) là:
)().),(,(.)()1( txdtxWftWtW
iirii
η
+=+
Với mạng liên tục:
)(
)(
txr
dt
tdW
i
η
=
Có nhiều thuật toán để xác định ΔWi(t) được đưa ra. Một trong những thuật
toán có giám sát cho mạng nơ ron được Widrow-hoff đề nghị là thuật toán
"giảm Gradient" (gradient descent), sử dụng các tiểu sai lệch trung bình bình
phương bằng việc thêm vào các trọng số liên kết mạng một giá trị theo hướng
ngược với hướng tức thời của Gradient. Thuật toán sử dụng phương pháp sai
lệch trung bình bình phương nhỏ nhất (LMS: Least Mean Squares) hoặc gọi là

phương pháp delta.
Hàm chi phí chuẩn sử dụng trong mạng nơ ron, sai lệch trung bình bình
phương, của thuật toán này là định nghĩa một hàm đạt cực tiểu E như sau:

=
→−=
1
1
2
min))()((
2
1
N
n
L
nn
kykdE
.
Ở đây:
)(kd
n
là đầu ra mong muốn thứ n tại thời điểm t và L số lớp.
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 7
Mạng nơron
W
Tiểu luận môn học: MẠNG NEURON
Ngoài ra còn sử dụng một số thuật toán như thuật toán Levenberg-
Marquardt: là một biến đổi của phương pháp Newton được thiết kế để cực tiểu
hoá các hàm là tổng bình phương của hàm phi tuyến khác nhau.
2. Nhận dạng hàm phi tuyến bằng mạng neuron:

2.1. Nhận dạng bằng mạng neuron truyền thẳng nhiều lớp (multive-layer
feedforward neural networks)

Trong nội dung tiểu luận ta dùng mạng neuron có hai lớp, lớp 1 (lớp ẩn) có
lớn hơn hoặc bằng một neuron, lớp 2 (lớp ra) có một neuron.
Để thuận tiện trong quá trình khảo sát cấu hình và kết quả nhận dạng của
các mạng neron (2 lớp) tiêu biểu, ta xây dựng chương trình viết bằng GUI trong
Matlab (Graphical User Interface) để có thể nhận dạng hàm f(x) bất kỳ, cũng
như điều chỉnh các thông số mạng một cách linh hoạt.
Ta chọn hàm phi tuyến để nhận dạng là:
( ) ( )
xxxxf 2cos53
32
++=
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 8
Inputs
Σ
1
b
2
a
2
n
2
w
2
1,1
p
n
1

1
Σ
1
b
1
1
a
1
1
n
1
2
Σ
a
1
2
w
2
1,2
1
b
1
2
Log-Sigmoid Layer
Linear Layer
w
1
1,1
w
1

2,1
Một ví dụ về mạng 2 lớp
Tiểu luận môn học: MẠNG NEURON
Chọn hàm truyền lớp 1 là log-sigmoid (logsig), hàm truyền lớp 2 là tuyến tính
purelin để nhận dạng trong khoảng [-2.5 ÷ 2.5] với bước (step) của biến x là
0.05, tương ứng với 100 điểm lấy mẫu. Thuật toán huấn luyện là Levenberg-
Marquardt.
Nhận dạng hàm với số neuron ở lớp 1 bằng 3, lớp 2 bằng 1
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 9
Tiểu luận môn học: MẠNG NEURON
Nhận dạng hàm với số neuron ở lớp 1 bằng 7, lớp 2 bằng 1
2.2. Nhận dạng bằng mạng neuron hồi quy nhiều lớp (multive-layer recurrent
neural networks)
Xét mạng có R tín hiệu vào, S tín hiệu ra và có nhiều lớp ẩn. Lớp vào có R
tín hiệu vào vectơ x. Và có n lớp ẩn, lớp ẩn thứ i (i = 1, … n-1) có Si neuron hồi
quy và có lấy tín hiệu quá khứ qua khối trễ TDL. Lớp ra có S
n
neuron và truyền
thẳng tín hiệu cho S đầu ra.
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 10
IW
1,1
IW
1,R
LW
1,1
IW
S1,R
LW
S2,S1

y
1
y
2



y
S
x
1
x
2


x
R
IW
S1,1
líp vµo c¸c líp Èn líp ra
CÊu tróc m¹ng n¬ ron.
TDL
TDL
TDL
Tiểu luận môn học: MẠNG NEURON
Hàm chuyển đổi cho các lớp có thể giống nhau hoặc khác nhau, tuy nhiên
nếu hai lớp liền kề nhau có hàm chuyển đổi tuyến tính thì không cần thiết do có
thể thay bằng một lớp tuyến tính để giảm bớt độ phức tạp của mạng khi thiết kế.
Tương tự ta cũng dùng mạng neuron có hai lớp, hàm truyền lớp 1 là tansig,
hàm truyền lớp 2 là tuyến tính purelin để nhận dạng hàm phi tuyến:

( ) ( )
xxxxf 2cos53
32
++=
trong khoảng [-2.5 ÷ 2.5] với bước (step) của biến x là
0.05, tương ứng với 100 điểm lấy mẫu. Thuật toán huấn luyện vẫn là Levenberg-
Marquardt.
Nhận dạng hàm với số neuron ở lớp 1 bằng 3, lớp 2 bằng 1
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 11
Tiểu luận môn học: MẠNG NEURON
Nhận dạng hàm với số neuron ở lớp 1 bằng 7, lớp 2 bằng 1
2.3. Kết luận
Như vậy để nhận dạng hàm phi tuyến ta có thể dùng mạng truyền thẳng hay
mạng hồi quy. Khả năng nhận dạng hàm phụ thuộc vào số lớp, số neuron trong
mỗi lớp, số điểm lấy mẫu, số bước lặp và bình phương sai số. Số lớp và số
neuron càng lớn thì khả năng nhận dạng càng tốt nhưng khối lượng tính toán
tăng lên nên với những đối tượng phức tạp thì phải tối ưu các tham số trên là
một nhân tố quan trọng. So với mạng truyền thẳng thì mạng nơ ron hồi quy cục
bộ làm đơn giản các thuật toán dạy, số lớp neuron sẽ ít hơn. Mặt khác, khả năng
mô hình hóa đầy đủ của mỗi neuron cho phép kích thước toàn bộ của mạng là
nhỏ nhất. Như vậy, mạng hồi quy có ưu thế rộng hơn, nó đủ sức nhận dạng hệ
thống và điều khiển các hệ thống phi tuyến.
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 12
Tiểu luận môn học: MẠNG NEURON
Chương trình nhận dạng hàm phi tuyến ( được viết trên GUI, m-file)
function varargout = hung(varargin)
% hung M-file for hung.fig
% Begin initialization code
gui_Singleton = 0;
gui_State = struct('gui_Name', mfilename,

'gui_Singleton', gui_Singleton,
'gui_OpeningFcn', @hung_OpeningFcn,
'gui_OutputFcn', @hung_OutputFcn,
'gui_LayoutFcn', [] ,
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code
% Executes just before hung is made visible.
function hung_OpeningFcn(hObject, eventdata, handles, varargin)
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to hung (see VARARGIN)

% Choose default command line output for hung
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% Outputs from this function are returned to the command line.
function varargout = hung_OutputFcn(hObject, eventdata, handles)

% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% Executes on button press in Nhan_dang.
function Nhan_dang_Callback(hObject, eventdata, handles)
% hObject handle to Nhan_dang (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
t1 = get(handles.FF_net,'Value');
t2 = get(handles.RC_net,'Value');
if t1==1
% Chon thuat toan cho lop an
get_alg_1 = findobj(gcbf,'Tag','Lop_an');
alg_1 = get(get_alg_1,'Value');
if alg_1 ==1
str_alg_1 ='logsig';
elseif alg_1 ==2
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 13
Tiểu luận môn học: MẠNG NEURON
str_alg_1 ='purelin';
else
str_alg_1 ='tansig';
end;

% Chon thuat toan cho lop ra

get_alg_2 = findobj(gcbf,'Tag','Lop_ra');
alg_2 = get(get_alg_2,'Value');
if alg_2 ==1
str_alg_2 ='logsig';
elseif alg_2 ==2
str_alg_2 ='purelin';
else
str_alg_2 ='tansig';
end;

% Chon so neuron trong lop an
get_nnum1 = findobj(gcbf,'Tag','Neuron_num_Slider');
nnum1 = get(get_nnum1,'Value');

% Chon nguong duoi cua bien
get_varLim1 = findobj(gcbf,'Tag','Ng_duoi_Slider');
varLim1 = get(get_varLim1,'Value');

% Chon nguong tren cua bien
get_varLim2 = findobj(gcbf,'Tag','Ng_tren_Slider');
varLim2 = get(get_varLim2,'Value');

% Dai cua bien
x = varLim1:0.05:varLim2;

% Lay Ham so tu GUI
get_ham = findobj(gcbf,'Tag','Ham_so');
ham = get(get_ham,'String');
t = eval(ham);


% Xay dung mang
net = newff([varLim1 varLim2],[nnum1,1],{str_alg_1,str_alg_2}, 'trainlm');
% Cac thong so huan luyen mang net
% 1. Dat chi so Goal
int_G = '1E-';
get_Goal = findobj(gcbf,'Tag','Goal_Edit');
Str_G = get(get_Goal,'String');
Goal_str = [int_G, Str_G];
Goal_num = eval(Goal_str);
net.trainParam.goal = Goal_num;
% 2. Dat chi so Epochs
get_Epochs = findobj(gcbf,'Tag','Epochs_Slider');
Epochs_num = get(get_Epochs,'Value');
net.trainParam.epochs = Epochs_num;
[net,tr] = train(net,x,t);
% Qua trinh hoc
axes(handles.Trainning1_axes)
len = length(tr.perf);
x1 = 1:1:len;
y1 =tr.perf;
scalex = round(len/8); % (8 la so khoang chia tren truc x)
j = 1;
y1(:,1);
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 14
Tiểu luận môn học: MẠNG NEURON
scaley_set(:,1) = Goal_num/10;
while scaley_set(:,j)< y1(:,1)
scaley_set(:,j+1) = scaley_set(:,j)*10;
j=j+1;
end

y1 = log10(y1);
y1_Lim = scaley_set(:,j);
set(gca,'xtick',0:scalex:scalex*8);
set(gca,'xticklabel',0:scalex:scalex*8);
plot(x1,y1,'-k','LineWidth',1.0);
plot(x1,y1,x1,log10(Goal_num),'+r','LineWidth',1.0);
hold off
set(handles.Trainning1_axes,'XMinorTick','on')
grid on
% Phan trang tri
per = num2str(tr.perf(:,len));
Gnum =num2str(Goal_num);
titl = ['Levenberg-Marrquardt-Performance:' per '; Goal: ' Gnum];
title(titl,'FontSize',13);
ylabel('\bf{Performance - x10^y}');
E_num = num2str(length(tr.epoch)-1);
Xlab = [E_num ' Epochs' ];
xlabel(Xlab);
grid on

% Dap ung ra cua mang sau khi huan luyen doi voi dau vao x
y = sim(net,x);
% Tao cua so nen de ve do thi
% Ve cac do thi toa do ra theo dau vao
axes(handles.Result_axes) % Select the proper axes
plot(x,t,x,y,'*r','LineWidth',1)
set(handles.Result_axes,'XMinorTick','on')
grid on
xlabel('\bf{Truc x}','FontSize',12);
ylabel('\bf{Truc y}','FontSize',12);

ham = ['Nhan dang ham so: ' ham];
title(ham,'FontSize',13);
legend('\bf{ Duong cong chuan}','\bf{ Duong cong nhan dang bang
neuron}',2);
hold off
%=========================
elseif t2==1
% Chon thuat toan cho lop an
get_alg_1 = findobj(gcbf,'Tag','Lop_an');
alg_1 = get(get_alg_1,'Value');
if alg_1 ==1
str_alg_1 ='logsig';
elseif alg_1 ==2
str_alg_1 ='purelin';
else
str_alg_1 ='tansig';
end;

% Chon thuat toan cho lop ra
get_alg_2 = findobj(gcbf,'Tag','Lop_ra');
alg_2 = get(get_alg_2,'Value');
if alg_2 ==1
str_alg_2 ='logsig';
elseif alg_2 ==2
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 15
Tiểu luận môn học: MẠNG NEURON
str_alg_2 ='purelin';
else
str_alg_2 ='tansig';
end;


% Chon so neuron trong lop an
get_nnum1 = findobj(gcbf,'Tag','Neuron_num_Slider');
nnum1 = get(get_nnum1,'Value');

% Chon nguong duoi cua bien
get_varLim1 = findobj(gcbf,'Tag','Ng_duoi_Slider');
varLim1 = get(get_varLim1,'Value');

% Chon nguong tren cua bien
get_varLim2 = findobj(gcbf,'Tag','Ng_tren_Slider');
varLim2 = get(get_varLim2,'Value');

% Dai cua bien
x = varLim1:0.05:varLim2;

% Lay Ham so tu GUI
get_ham = findobj(gcbf,'Tag','Ham_so');
ham = get(get_ham,'String');
t = eval(ham);

% Xay dung mang
net = newlrn([varLim1 varLim2],[nnum1,1],{str_alg_1,str_alg_2}, 'trainlm');
% Cac thong so huan luyen mang net
% 1. Dat chi so Goal
int_G = '1E-';
get_Goal = findobj(gcbf,'Tag','Goal_Edit');
Str_G = get(get_Goal,'String');
Goal_str = [int_G, Str_G];
Goal_num = eval(Goal_str);

net.trainParam.goal = Goal_num;
% 2. Dat chi so Epochs
get_Epochs = findobj(gcbf,'Tag','Epochs_Slider');
Epochs_num = get(get_Epochs,'Value');
net.trainParam.epochs = Epochs_num;
[net,tr] = train(net,x,t);
% Qua trinh hoc
axes(handles.Trainning1_axes)
len = length(tr.perf);
x1 = 1:1:len;
y1 =tr.perf;
scalex = round(len/8); % (8 la so khoang chia tren truc x)
j = 1;
y1(:,1);
scaley_set(:,1) = Goal_num/10;
while scaley_set(:,j)< y1(:,1)
scaley_set(:,j+1) = scaley_set(:,j)*10;
j=j+1;
end
y1 = log10(y1);
y1_Lim = scaley_set(:,j);

set(gca,'xtick',0:scalex:scalex*8);
set(gca,'xticklabel',0:scalex:scalex*8);
plot(x1,y1,'-k','LineWidth',1.0);
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 16
Tiểu luận môn học: MẠNG NEURON
%hold on
%plot(x1,log10(Goal_num),'-b','LineWidth',1.0);
%hold on

plot(x1,y1,x1,log10(Goal_num),'+r','LineWidth',1.0);
hold off
set(handles.Trainning1_axes,'XMinorTick','on')
grid on
% Phan trang tri
per = num2str(tr.perf(:,len));
Gnum =num2str(Goal_num);
titl = ['Levenberg-Marrquardt-Performance:' per '; Goal: ' Gnum];
title(titl,'FontSize',13);
ylabel('\bf{Performance - x10^y}');
E_num = num2str(length(tr.epoch)-1);
Xlab = [E_num ' Epochs' ];
xlabel(Xlab);
grid on

% Dap ung ra cua mang sau khi huan luyen doi voi dau vao x
y = sim(net,x);
% Tao cua so nen de ve do thi
% Ve cac do thi toa do ra theo dau vao
axes(handles.Result_axes) % Select the proper axes
plot(x,t,x,y,'*r','LineWidth',1)
set(handles.Result_axes,'XMinorTick','on')
grid on
xlabel('\bf{Truc x}','FontSize',12);
ylabel('\bf{Truc y}','FontSize',12);
ham = ['Nhan dang ham so: ' ham];
title(ham,'FontSize',13);
legend('\bf{ Duong cong chuan}','\bf{ Duong cong nhan dang bang
neuron}',2);
hold off

else
set(handles.alert,'String','Chu y: Phai chon mang !');
end

% ====================================================

% Executes on key press with focus on Nhan_dang and no controls
selected.
function Nhan_dang_KeyPressFcn(hObject, eventdata, handles)

% Executes when figure1 is resized.
function figure1_ResizeFcn(hObject, eventdata, handles)

% Executes
% function mutual_exclude(off)
% set(off,'Value',0);

% Executes on button press in FF_net.
function FF_net_Callback(hObject, eventdata, handles)
% hObject handle to FF_net (see GCBO)
t1 = get(handles.FF_net,'Value');
if t1==1
set(handles.Lop_an,'Value',1);
set(handles.RC_net,'Value',0); % Thay cho function mutual_exclude(off)
else
set(handles.RC_net,'Value',1); % Thay cho function mutual_exclude(off)
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 17
Tiểu luận môn học: MẠNG NEURON
set(handles.Lop_an,'Value',3); % Thay cho function mutual_exclude(off)
end

%off = [handles.RC_net];
%mutual_exclude(off);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Executes on button press in RC_net.
function RC_net_Callback(hObject, eventdata, handles)
% hObject handle to RC_net (see GCBO)
t2 = get(handles.RC_net,'Value');
if t2==1
set(handles.Lop_an,'Value',3);
set(handles.FF_net,'Value',0); % Thay cho function mutual_exclude(off)
else
set(handles.FF_net,'Value',1); % Thay cho function mutual_exclude(off)
set(handles.Lop_an,'Value',1); % Thay cho function mutual_exclude(off)
end
%off = [handles.FF_net];
%mutual_exclude(off);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function alert_Callback(hObject, eventdata, handles)

% Executes during object creation, after setting all properties.
function alert_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes on slider movement.
function Ng_tren_Slider_Callback(hObject, eventdata, handles)

Ng_tren_set = (round(get(handles.Ng_tren_Slider,'Value')/0.05))*0.05;
% 0.05 la step cua bien !!!
set(handles.Ng_tren_Slider,'Value',Ng_tren_set);
set(handles.Ng_tren_Edit,'String',
num2str(get(handles.Ng_tren_Slider,'Value')));
alert1 = get(handles.Ng_tren_Slider,'Value');
alert2 = get(handles.Ng_duoi_Slider,'Value');
if alert1 <= alert2
set(handles.alert,'String','Chu y: Phai > nguong duoi !');
else
set(handles.alert,'String',' ');
end
% Executes during object creation, after setting all properties.
function Ng_tren_Slider_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

% Executes
function Ng_tren_Edit_Callback(hObject, eventdata, handles)
val1 = str2double(get(handles.Ng_tren_Edit,'String'));
if isnumeric(val1) && length(val1)==1 &&
val1 >= get(handles.Ng_tren_Slider,'Min') &&
val1 <= get(handles.Ng_tren_Slider,'Max')
if val1 <= get(handles.Ng_duoi_Slider,'Value')
set(handles.alert,'String','Chu y: Phai > nguong duoi !');
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 18
Tiểu luận môn học: MẠNG NEURON
else

set(handles.alert,'String',' ');
end
set_val1 = (round(val1*100))/100;
else
set(handles.alert,'String','!!!: So vuot nguong - fixed.');
pause(2);
set(handles.alert,'String',' ');
set_val1 = get(handles.Ng_tren_Slider,'Value');
% set_val1 = get(handles.Ng_tren_Slider,'Max');
end
set(handles.Ng_tren_Slider,'Value',set_val1);
set(handles.Ng_tren_Edit,'String',' ');
set(handles.Ng_tren_Edit,'String',
num2str(get(handles.Ng_tren_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Ng_tren_Edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes on slider movement.
function Ng_duoi_Slider_Callback(hObject, eventdata, handles)
Ng_duoi_set = (round(get(handles.Ng_duoi_Slider,'Value')/0.05))*0.05;
% 0.05 la step cua bien !!!
set(handles.Ng_duoi_Slider,'Value',Ng_duoi_set);
set(handles.Ng_duoi_Edit,'String',
num2str(get(handles.Ng_duoi_Slider,'Value')));
alert1 = get(handles.Ng_tren_Slider,'Value');

alert2 = get(handles.Ng_duoi_Slider,'Value');
if alert2 >= alert1
set(handles.alert,'String','Chu y: Phai < nguong tren !');
else
set(handles.alert,'String',' ');
end

% Executes during object creation, after setting all properties.
function Ng_duoi_Slider_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

% Executes
function Ng_duoi_Edit_Callback(hObject, eventdata, handles)
val2 = str2double(get(handles.Ng_duoi_Edit,'String'));
% Determine whether val is a number between 0 and 1
if isnumeric(val2) & length(val2)==1 &
val2 >= get(handles.Ng_duoi_Slider,'Min') &
val2 <= get(handles.Ng_duoi_Slider,'Max')
if val2 >= get(handles.Ng_tren_Slider,'Value')
set(handles.alert,'String','Chu y: Phai < nguong tren !');
else
set(handles.alert,'String',' ');
end
set_val2 = (round(val2*100))/100;
else
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 19
Tiểu luận môn học: MẠNG NEURON

set(handles.alert,'String','!!!: So vuot nguong - fixed.');
pause(2);
set(handles.alert,'String',' ');
set_val2 = get(handles.Ng_duoi_Slider,'Value');
%set_val2 = get(handles.Ng_duoi_Slider,'Min');
end
set(handles.Ng_duoi_Slider,'Value',set_val2);
set(handles.Ng_duoi_Edit,'String',' ');
set(handles.Ng_duoi_Edit,'String',
num2str(get(handles.Ng_duoi_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Ng_duoi_Edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes on selection change in Lop_an.
function Lop_an_Callback(hObject, eventdata, handles)

% Executes during object creation, after setting all properties.
function Lop_an_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes on selection change in Lop_ra.
function Lop_ra_Callback(hObject, eventdata, handles)


% Executes during object creation, after setting all properties.
function Lop_ra_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes during object creation, after setting all properties.
function Ham_so_Callback(hObject, eventdata, handles)

% Executes during object creation, after setting all properties.
function Ham_so_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes during object creation, after setting all properties.
function Neuron_num_Edit_Callback(hObject, eventdata, handles)
val3 = str2double(get(handles.Neuron_num_Edit,'String'));
if isnumeric(val3) & length(val3)<=2 &
val3 >= (get(handles.Neuron_num_Slider,'Min')+1) &
val3 <= get(handles.Neuron_num_Slider,'Max')
set_val3 = round(val3);
else
set(handles.alert,'String','!!!: Vuot nguong (1-20): fixed');
pause(2);
set(handles.alert,'String',' ');
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 20

Tiểu luận môn học: MẠNG NEURON
set_val3 = get(handles.Neuron_num_Slider,'Value');
end
set(handles.Neuron_num_Slider,'Value',set_val3);
set(handles.Neuron_num_Edit,'String',' ');
set(handles.Neuron_num_Edit,'String',
num2str(get(handles.Neuron_num_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Neuron_num_Edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes on slider movement.
function Neuron_num_Slider_Callback(hObject, eventdata, handles)
if get(handles.Neuron_num_Slider,'Value') == 0
set(handles.Neuron_num_Slider,'Value',1);
else
nnum_set = round(get(handles.Neuron_num_Slider,'Value'));
set(handles.Neuron_num_Slider,'Value',nnum_set);
end
set(handles.Neuron_num_Edit,'String',
num2str(get(handles.Neuron_num_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Neuron_num_Slider_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]);
end

% Executes during object creation, af
function Goal_Edit_Callback(hObject, eventdata, handles)
val4 = str2double(get(handles.Goal_Edit,'String'));
if isnumeric(val4) & length(val4)<=2 &
val4 >= get(handles.Goal_Slider,'Min') &
val4 <= get(handles.Goal_Slider,'Max')
set_val4 = round(val4);
else
set(handles.alert,'String','!!!: Vuot nguong (1-10): fixed');
pause(2);
set(handles.alert,'String',' ');
set_val4 = get(handles.Goal_Slider,'Value');
end
set(handles.Goal_Slider,'Value',set_val4);
set(handles.Goal_Edit,'String',' ');
set(handles.Goal_Edit,'String',
num2str(get(handles.Goal_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Goal_Edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes on slider movement.
function Goal_Slider_Callback(hObject, eventdata, handles)

Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 21
Tiểu luận môn học: MẠNG NEURON
Goal_set = round(get(handles.Goal_Slider,'Value'));
set(handles.Goal_Slider,'Value',Goal_set);
set(handles.Goal_Edit,'String',
num2str(get(handles.Goal_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Goal_Slider_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

% Executes during object creation, after setting all properties.
function text10_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes
function Epochs_Edit_Callback(hObject, eventdata, handles)
val5 = str2double(get(handles.Epochs_Edit,'String'));
if isnumeric(val5) & length(val5)<=4 &
val5 >= get(handles.Epochs_Slider,'Min') &
val5 <= get(handles.Epochs_Slider,'Max')
set_val5 = (round(val5/50))*50;
else
set(handles.alert,'String','!!!: Vuot nguong (1-10): fixed');

pause(2);
set(handles.alert,'String',' ');
set_val5 = get(handles.Epochs_Slider,'Value');
end
set(handles.Epochs_Slider,'Value',set_val5);
set(handles.Epochs_Edit,'String',' ');
set(handles.Epochs_Edit,'String',
num2str(get(handles.Epochs_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Epochs_Edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes on slider movement.
function Epochs_Slider_Callback(hObject, eventdata, handles)
Epochs_set = (round(get(handles.Epochs_Slider,'Value')/50))*50;
set(handles.Epochs_Slider,'Value',Epochs_set);
set(handles.Epochs_Edit,'String',
num2str(get(handles.Epochs_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Epochs_Slider_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end


function Result_axes_CreateFcn(hObject, eventdata, handles)
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 22
Tiểu luận môn học: MẠNG NEURON
% hObject handle to axesStep (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axesStep
set(hObject,'Visible','on');


% If Enable == 'on', executes on mouse press in 5 pixel border.
% Otherwise, executes on mouse press in 5 pixel border or over text5.
function text5_ButtonDownFcn(hObject, eventdata, handles)
% hObject handle to text5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% Executes during object creation, after setting all properties.
function text5_CreateFcn(hObject, eventdata, handles)
% hObject handle to text5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called


% Executes during object deletion, before destroying properties.
function text5_DeleteFcn(hObject, eventdata, handles)
% hObject handle to text5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)


Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 23

×