You are on page 1of 30

BÁO CÁO

1. Phân loại gạch men


1.1. Bài toán

Trong dây chuyền sản xuất gạch men người ta thu thập số liệu để phát hiện các
sản phẩm bị lỗi với bảng dữ liệu như sau:

1.2. Mục tiêu


- Sử dụng mạng perceptron với hàm tác động bán tuyến tính để huấn luyện.
- Huấn luyện mạng thành công với sai số nhỏ.
- Rút ra một số phân tích và nhận xét về kết quả sau quá trình huấn luyện.
1.3. Quá trình huấn luyện
clc
clear all
%B1: Chọn tốc độ học
eta = 1;
%B2: Khởi động
K = 10; Emax=0.0000001; E = 0;
x = [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;
0.958 1.043 1.907 0.78 0.579 0.003 0.001 0.014 0.007 0.004;
0.003 0.001 0.003 0.002 0.001 0.105 1.748 1.839 1.021 0.214];
d = [1 1 1 1 1 0 0 0 0 0];

w = zeros(3,K+1);
w(:,1) = rand(3,1);

maxepoch = 100000;
flag = 0; lamda = 1;
E = zeros(maxepoch, 1);

%B3: Bắt đầu quá trình huấn luyện


for i = 1: maxepoch
for k = 1:K
net = w(:,k)'*x(:,k);
y = 1/(1+exp(-lamda*net));

%learning signal
delta = (d(k)-y)*lamda*y*(1-y);

%B4: Cập nhật vecto trọng số


w(:,k+1) = w(:,k)+eta*delta*x(:,k);

%B5:Tính sai số tích lũy


E(i) = E(i)+0.5*(d(k)-y)^2;
end

%Kết thúc một chu kỳ huấn luyện (epoch)


if E(i) < Emax
flag = i;
break;
else
%bắt đầu 1 chu kỳ huấn luyện mới
w(:,1) = w(:,K+1);
end
end
figure;
plot(1:1:maxepoch, E);
title('Errors');
xlabel('epoch');
ylabel('error');
grid on

- Lần học thứ nhất: Chọn tốc độ học eta = 1, maxepoch = 10000 và random
giá trị trọng số ban đầu w:
Trọng số ban đầu:
w = [3.70678912967926; 13.3964800971174; -4.49193589240130];

Dựa vào kết quả như hình, ta thấy với Emax = 10^(-7) thì kết quả huấn luyện
vẫn chưa thành công (flag = 0).
Trọng số cuối cùng:
w = [3.70678912967926; 13.3964800971174; -4.49193589240130]
Tại epoch thứ 10000, sai số E = 3.202100643186678e-04
Errors
0.9

0.8

0.7

0.6

0.5
error

0.4

0.3

0.2

0.1

0
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
epoch

Đồ thị sai số E
→ Dựa vào độ thị, ta nhận thấy quá trình huấn luyện đang đi theo đúng hướng.
Sai số E khá nhỏ nhưng vẫn chưa đạt được như mong muốn là E = Emax =
10^(-7).
- Lần học thứ hai: Giữ nguyên tốc độ học eta = 1, maxepoch = 10000, lấy
trọng số ban đầu là trọng số cuối cùng của lần học thứ nhất:
Trọng số ban đầu:
w = [3.70678912967926; 13.3964800971174; -4.49193589240130]
Dựa vào kết quả, ta thấy với Emax = 10^(-7) thì kết quả huấn luyện vẫn chưa
thành công (flag = 0).
Trọng số cuối cùng:
w = [4.02381955956304; 14.5599870393751; -4.80565977300544]
Tại epoch thứ 10000, sai số E = 1.584453250579297e-04
10-4 Errors
3.5

3
error

2.5

1.5
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
epoch

Đồ thị sai số E
→ Quá trình huấn luyện vẫn đang theo đúng hướng, sai số E đang dần tiến về
phía Emax.
→ Kết quả huấn luyện lần học thứ hai tốt hơn so với lần đầu tiên, ta thấy việc
lựa chọn ma trận trọng số ban đầu rất quan trọng, ảnh hưởng đến kết quả huấn
luyện.
- Lần học thứ ba: Giữ nguyên tốc độ học eta = 1, tăng maxepoch = 100000,
lấy ma trận trọng số ban đầu là ma trận trọng số cuối cùng của lần học thứ
hai:
Trọng số ban đầu:
w = [4.02381955956304; 14.5599870393751; -4.80565977300544]
Dựa vào kết quả, ta thấy với Emax = 10^(-7) thì kết quả huấn luyện vẫn chưa
thành công (flag = 0).
Trọng số cuối cùng:
w = [4.20859970696047; 15.2373304981175; -4.98671172763254]
Tại epoch thứ 100000, sai số E = 1.051122732604029e-04
10-4 Errors
1.6

1.5

1.4
error

1.3

1.2

1.1

1
0 1 2 3 4 5 6 7 8 9 10
epoch 104

Đồ thị sai số E
→ Quá trình huấn luyện vẫn đang theo đúng hướng, sai số E vẫn đang dần tiến
về phía Emax.
- Lần học thứ tư: Chọn tốc độ học eta = 1, maxepoch = 100000
Giá trị ma trận trọng số ban đầu (sau nhiều lần học thu được):
w = [7.35866362314930; 26.7072923569441; -7.91299372490831]
Dựa vào kết quả, ta thấy với Emax = 10^(-7) thì kết quả huấn luyện đã thành
công (flag = 1).

10-7 Errors
1

0.9

0.8

0.7

0.6
error

0.5

0.4

0.3

0.2

0.1

0
0 1 2 3 4 5 6 7 8 9 10
epoch 104

Đồ thị sai số E
→ Từ đồ thị ta thấy E = Emax như mong muốn.
→ Ma trận trọng số ban đầu có ảnh hưởng đến kết quả huấn luyện.
1.4. Kiểm tra kết quả huấn luyện
function y = TEST_GACHMEN_PERCEPTRON_HALFLINEAR(x1,x2)

w = [7.35866362314930; 26.7072923569441; -7.91299372490831];


x=[-1;x1;x2];
lamda=1;

net=w'*x;
y = 1/(1+exp(-lamda*net));

end

Các kết quả từ bộ mẫu:


→ Kết quả đúng với kết quả của bộ mẫu và có sai số rất thấp dường như không
đáng kể so với bộ mẫu.
1.5. Kiểm tra lại sai số E
clc
clear all
x = [0.958 1.043 1.907 0.78 0.579 0.003 0.001 0.014 0.007 0.004;
0.003 0.001 0.003 0.002 0.001 0.105 1.748 1.839 1.021 0.214];
d = [1 1 1 1 1 0 0 0 0 0];
K=10; y=0; E=0;

for k=1:K
y = TEST_GACHMEN_PERCEPTRON_HALFLINEAR(x(1,k),x(2,k));
E = E + 0.5*(d(k)-y)^2
end
→ Ta thấy sai số E rất nhỏ, có thể bỏ qua.
1.6. Nhận xét
- Sau nhiều lần huấn luyện. ta đã tìm được giá trị ma trận trọng số ban đầu w
để có thể huấn luyện mạng thành công với sai số E tiến về Emax = 10^(-7)
như mong muốn.
- Trong suốt quá trình huấn luyện, ta nhận thấy tốc độ học, ma trận trọng số
ban đầu ảnh hưởng rất nhiều đến sai số và kết quả huấn luyện mạng.
→ Perceptron Half Linear chỉ hoạt động thực sự tốt khi dữ liệu phân tách tuyến
tính (linearly separable), tức có thể dùng đường thẳng, mặt phẳng, siêu phẳng
để làm biên giới, nếu dữ liệu không thỏa điều kiện này, không những
perceptron mà bất kì thuật toán phân loại tuyến tính nào cũng sẽ khó thành
công.
2. Phân loại hoa lan
2.1. Quá trình huấn luyện
A
clc
clear all
%Khởi động
eta = 0.1; lamda = 1;
E = 0; Emax = 0.001;

x = [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1;
5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1 5.4
5.1 4.6 5.1 4.8 5 5 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5 5.5 4.9 4.4 5.1 5 4.5 4.4 5
5.1 4.8 5.1 4.6 5.3 5 7 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5 5.9 6 6.1 5.6 6.7 5.6
5.8 6.2 5.6 5.9 6.1 6.3 6.1 6.4 6.6 6.8 6.7 6 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3
6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7;
3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3 3 4 4.4 3.9 3.5 3.8 3.8 3.4 3.7
3.6 3.3 3.4 3 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2 3.1 3.2 3.5 3.1 3 3.4 3.5 2.3 3.2 3.5
3.8 3 3.8 3.2 3.7 3.3 3.2 3.2 3.1 2.3 2.8 2.8 3.3 2.4 2.9 2.7 2 3 2.2 2.9 2.9 3.1 3
2.7 2.2 2.5 3.2 2.8 2.5 2.8 2.9 3 2.8 3 2.9 2.8 3.3 2.7 3 2.9 3 3 2.5 2.9 2.5 3.6
3.2 2.7 3 2.5 2.8 3.2 3 3.8 2.6;
1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 1.5 1.6 1.4 1.1 1.2 1.5 1.3 1.4 1.7 1.5
1.7 1.5 1 1.7 1.9 1.6 1.6 1.5 1.4 1.6 1.6 1.5 1.5 1.4 1.5 1.2 1.3 1.5 1.3 1.5 1.3
1.3 1.3 1.6 1.9 1.4 1.6 1.4 1.5 1.4 4.7 4.5 4.9 4 4.6 4.5 4.7 3.3 4.6 3.9 3.5 4.2 4
4.7 3.6 4.4 4.5 4.1 4.5 3.9 4.8 4 4.9 4.7 4.3 4.4 4.8 5 4.5 4.1 6 5.1 5.9 5.6 5.8
6.6 4.5 6.3 5.8 6.1 5.1 5.3 5.5 5 5.1 5.3 5.5 6.7 6.9;
0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 0.2 0.2 0.1 0.1 0.2 0.4 0.4 0.3 0.3 0.3
0.2 0.4 0.2 0.5 0.2 0.2 0.4 0.2 0.2 0.2 0.2 0.4 0.1 0.2 0.1 0.2 0.2 0.1 0.2 0.2 0.3
0.3 0.2 0.6 0.4 0.3 0.2 0.2 0.2 0.2 1.4 1.5 1.5 1.3 1.5 1.3 1.6 1 1.3 1.4 1 1.5 1
1.4 1.3 1.4 1.5 1 1.5 1.1 1.8 1.3 1.5 1.2 1.3 1.4 1.4 1.7 1.5 1.3 2.5 1.9 2.1 1.8
2.2 2.1 1.7 1.8 1.8 2.5 2 1.9 2.1 2 2.4 2.3 1.8 2.2 2.3];
d = [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];
K=length(x);
%trọng số ban đầu
w = zeros(5, K+1);
w(:,1) = rand(5,1);

v1 = zeros(5, K+1);
v2 = zeros(5, K+1);
v3 = zeros(5, K+1);
v4 = zeros(5, K+1);
v1(:,1) = rand(5,1);
v2(:,1) = rand(5,1);
v3(:,1) = rand(5,1);
v4(:,1) = rand(5,1);

maxepoch = 100000;
flag = 0;
E = zeros(maxepoch, 1);
%Bắt đầu quá trình huấn luyện
for i = 1: maxepoch
for k = 1: K
%Lan truyền thuận

%Lớp ẩn
netq1 = v1(:,k)'*x(:, k);
z1 = 1/(1 + exp(-lamda*netq1));
netq2 = v2(:,k)'*x(:, k);
z2 = 1/(1 + exp(-lamda*netq2));
netq3 = v3(:,k)'*x(:, k);
z3 = 1/(1 + exp(-lamda*netq3));
netq4 = v4(:,k)'*x(:, k);
z4 = 1/(1 + exp(-lamda*netq4));
%Lớp ra
z = [-1; z1; z2; z3; z4];
neti = w(:, k)'*z;
y = neti;
%Lan truyền ngược sai số
%Lớp ra
delta_o1 = d(k) - y;
w(:, k+1) = w(:, k) + eta*delta_o1*z;

%Lớp ẩn
delta_h1 = (delta_o1*w(2, k))*lamda*z1*(1-z1);
v1(:, k+1) = v1(:, k) + eta*delta_h1*x(:, k);

delta_h2 = (delta_o1*w(3, k))*lamda*z2*(1-z2);


v2(:, k+1) = v2(:, k) + eta*delta_h2*x(:, k);

delta_h3 = (delta_o1*w(4, k))*lamda*z3*(1-z3);


v3(:, k+1) = v3(:, k) + eta*delta_h3*x(:, k);

delta_h4 = (delta_o1*w(5, k))*lamda*z4*(1-z4);


v4(:, k+1) = v4(:, k) + eta*delta_h4*x(:, k);

%Sai số tích lũy


E(i) = E(i)+0.5*((d(k)-y)^2);
end

if E(i) < Emax


flag = i;
break;
else
%bắt đầu 1 chu kỳ huấn luyện mới
w(:,1) = w(:,K+1);
v1(:,1) = v1(:,K+1);
v2(:,1) = v2(:,K+1);
v3(:,1) = v3(:,K+1);
v4(:,1) = v4(:,K+1);
end
end
%Đồ thị E
figure;
plot(1:1:maxepoch, E);
title('Errors');
xlabel('epoch');
ylabel('error');
grid on

Lần học thứ nhất: Chọn tốc độ học eta = 1, maxepoch = 10000, Emax = 0.01,
random giá trị ma trận trọng số ban đầu:
Errors
300

250

200
error

150

100

50

0
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
epoch

Đồ thị sai số E
→ Quá trình huấn luyện không thành công (flag = 0).
→ Sai số E tăng cao lên tới 252 sau đó giảm xuống còn 0 do tốc độ học khá
cao.
Lần học thứ hai: Giảm tốc độ học eta = 0.1, maxepoch = 10000, Emax = 0.01,
random giá trị ma trận trọng số ban đầu:
→ Quá trình huấn luyện vẫn chưa thành công, flag = 0.

Errors
6

4
error

0 1000 2000 3000 4000 5000 6000 7000 8000 9000


epoch

Đồ thị sai số E
→ Dựa vào kết quả, ta thấy quá trình huấn luyện đang đi theo đúng hướng.
→ Ta thấy, tại epoch thứ 10000, E = 0.727957090525557, sai số E đang giảm
dần và tiến về phía Emax = 0.01.
Lần học thứ ba: Chọn tốc độ học eta = 0.1, tăng maxepoch = 100000, Emax =
0.01.
Giá trị ma trận trọng số ban đầu:
w = [3.67239224246024; 1.14664381058791; 1.55662795714228;
2.11872148639627; 2.55720126727612];
v1 = [4.15647787622659; 23.3853763451955; -7.98386479916448; -
17.7776699579060; -19.7116029508462];
v2 = [-45.3794317586718; -20.4729286188721; 60.7924929956459; -
5.58483564714580; -57.9449234427248];
v3 = [30.0443293008160; -8.53938231659503; -8.86869587091134;
11.4448635577124; 29.8805101169067];
v4 = [3.11967487560311; 4.21475536388363; -21.3823635343125;
3.31754466832756; 22.6160707928666];
Errors
0.048

0.046

0.044

0.042

0.04
error

0.038

0.036

0.034

0.032

0.03
0 1 2 3 4 5 6 7 8 9 10
epoch 104

→ Quá trình huấn luyện vẫn đang theo đúng hướng nhưng chưa thành công
(flag = 0).
→ Sai số E đã giảm đi đáng kể (E = 0.035990190951171), E đang giảm dần và
tiến về phái Emax = 0.01.
Lần học thứ tư: Chọn tốc độ học eta = 0.01, tăng maxepoch = 300000, Emax =
0.01
Giá trị ma trận trọng số ban đầu:
w = [3.64048055667403; 1.08957202557362; 1.56559382654910;
2.07772679543294; 2.56460405136000];
v1 = [3.19053754838647; 26.5400438557788; -8.70978892974719; -
19.9351852763160; -24.6827539701645];
v2 = [-50.8552189712903; -22.8760367539838; 69.8918499871949; -
7.31132599140268; -65.7549982890038];
v3 = [32.8945212199779; -9.50167133197749;-10.3044355398110;
12.7032135449231; 33.8424342710494];
v4 = [3.28807771893940; 5.10249540227170; -22.7485041345838;
2.81593852478400; 23.2687863281966];
Errors
0.015

0.01
error

0.005

0
0 0.5 1 1.5 2 2.5 3
epoch 5
10

→ Dựa vào kết quả, ta nhận thấy với Emax = 0.001 thì kết quả huấn luyện đã
thành công (flag = 244375).
Lần học thứ năm: Chọn tốc độ học eta = 0.1, tăng maxepoch = 500000, tăng
Emax = 0.0015
Giá trị ma trận trọng số ban đầu:
w = [3.59334354908030; 1.05079489671648; 1.53855866797837;
2.04959426881968; 2.54434289930211];
v1 = [0.401336428369001; 31.0508937337369; -10.3334775741227; -
23.4144898864225; -30.3332268438649];
v2 = [-60.0147685748641; -27.4124860333053; 85.4382245915543; -
9.43017448840452; -79.6942991424913];
v3 = [38.0827022399293; -11.3066162560625; -12.7503262880973;
14.9901016827064; 40.9653033769125];
v4 = [3.68930361064137; 6.30680630439473; -26.1889907375190;
2.71444910084081; 26.2042781225628];

10-3 Errors
2

1.8

1.6

1.4

1.2
error

0.8

0.6

0.4

0.2

0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
epoch 5
10

Đồ thị sai số E
→ Dựa vào kết quả, ta nhận thấy với Emax = 0.0015 thì kết quả huấn luyện đã
thành công (flag = 365706).
Giá trị ma trận trọng số cuối cùng:
w = [3.59237666147708; 1.05042597758022; 1.53803990316092;
2.04926017497824; 2.54369771586919];
v1 = [0.324405603445450; 31.1491922138041; -10.3793713408128; -
23.4952026366810; -30.4318671472851];
v2 = [-60.2131718477820; -27.5164746381601; 85.7896635782199; -
9.47124375346754; -80.0185870200435];
v3 = [38.2036620803459; -11.3494112556368; -12.8059154991202;
15.0430949177526; 41.1294348642890];
v4 = [3.69872983217509; 6.33163077190324; -26.2699143844420;
2.71711302682242; 26.2788462498564];
2.2. Kiểm tra kết quả huấn luyện
function y = Test_HoaLan(x1,x2,x3,x4)
x=[-1;x1;x2;x3;x4];
lamda=1;

%Emax = 0.0015
w = [3.59237666147708; 1.05042597758022; 1.53803990316092;
2.04926017497824; 2.54369771586919];
v1 = [0.324405603445450; 31.1491922138041; -10.3793713408128; -
23.4952026366810; -30.4318671472851];
v2 = [-60.2131718477820; -27.5164746381601; 85.7896635782199; -
9.47124375346754; -80.0185870200435];
v3 = [38.2036620803459; -11.3494112556368; -12.8059154991202;
15.0430949177526; 41.1294348642890];
v4 = [3.69872983217509; 6.33163077190324; -26.2699143844420;
2.71711302682242; 26.2788462498564];

netq1=v1'*x;
netq2=v2'*x;
netq3=v3'*x;
netq4=v4'*x;

z1 = 1/(1 + exp(-lamda*netq1));
z2 = 1/(1 + exp(-lamda*netq2));
z3 = 1/(1 + exp(-lamda*netq3));
z4 = 1/(1 + exp(-lamda*netq4));

z = [-1; z1; z2; z3; z4];

neti = w'*z;
y = neti;

end

Kết quả kiểm tra một vài mẫu sau khi học thành công :

2.3. Kiểm tra lại sai số E
clc
clear all
x = [5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1
5.4 5.1 4.6 5.1 4.8 5 5 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5 5.5 4.9 4.4 5.1 5 4.5 4.4
5 5.1 4.8 5.1 4.6 5.3 5 7 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5 5.9 6 6.1 5.6 6.7
5.6 5.8 6.2 5.6 5.9 6.1 6.3 6.1 6.4 6.6 6.8 6.7 6 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9
7.3 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7;
3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3 3 4 4.4 3.9 3.5 3.8 3.8 3.4 3.7
3.6 3.3 3.4 3 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2 3.1 3.2 3.5 3.1 3 3.4 3.5 2.3 3.2 3.5
3.8 3 3.8 3.2 3.7 3.3 3.2 3.2 3.1 2.3 2.8 2.8 3.3 2.4 2.9 2.7 2 3 2.2 2.9 2.9 3.1 3
2.7 2.2 2.5 3.2 2.8 2.5 2.8 2.9 3 2.8 3 2.9 2.8 3.3 2.7 3 2.9 3 3 2.5 2.9 2.5 3.6
3.2 2.7 3 2.5 2.8 3.2 3 3.8 2.6;
1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 1.5 1.6 1.4 1.1 1.2 1.5 1.3 1.4 1.7 1.5
1.7 1.5 1 1.7 1.9 1.6 1.6 1.5 1.4 1.6 1.6 1.5 1.5 1.4 1.5 1.2 1.3 1.5 1.3 1.5 1.3
1.3 1.3 1.6 1.9 1.4 1.6 1.4 1.5 1.4 4.7 4.5 4.9 4 4.6 4.5 4.7 3.3 4.6 3.9 3.5 4.2 4
4.7 3.6 4.4 4.5 4.1 4.5 3.9 4.8 4 4.9 4.7 4.3 4.4 4.8 5 4.5 4.1 6 5.1 5.9 5.6 5.8
6.6 4.5 6.3 5.8 6.1 5.1 5.3 5.5 5 5.1 5.3 5.5 6.7 6.9;
0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 0.2 0.2 0.1 0.1 0.2 0.4 0.4 0.3 0.3 0.3
0.2 0.4 0.2 0.5 0.2 0.2 0.4 0.2 0.2 0.2 0.2 0.4 0.1 0.2 0.1 0.2 0.2 0.1 0.2 0.2 0.3
0.3 0.2 0.6 0.4 0.3 0.2 0.2 0.2 0.2 1.4 1.5 1.5 1.3 1.5 1.3 1.6 1 1.3 1.4 1 1.5 1
1.4 1.3 1.4 1.5 1 1.5 1.1 1.8 1.3 1.5 1.2 1.3 1.4 1.4 1.7 1.5 1.3 2.5 1.9 2.1 1.8
2.2 2.1 1.7 1.8 1.8 2.5 2 1.9 2.1 2 2.4 2.3 1.8 2.2 2.3];
d = [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];
K=length(x); y=0; E=0;

for k=1:K
y = Test_HoaLan(x(1,k),x(2,k),x(3,k),x(4,k));
E = E + 0.5*(d(k)-y)^2
end
2.4. Nhận xét
- Sau nhiều lần huấn luyện. ta đã tìm được giá trị ma trận trọng số ban đầu w
để có thể huấn luyện mạng thành công với sai số E tiến về Emax = 0.01 như
mong muốn.
- Trong suốt quá trình huấn luyện, ta nhận thấy tốc độ học, ma trận trọng số
ban đầu ảnh hưởng rất nhiều đến sai số và kết quả huấn luyện mạng.
1. → Ưu điểm:
o Khả năng học tập phức tạp: Mạng nhiều lớp có khả năng học tập
các hàm phức tạp, giúp giải quyết các vấn đề phân loại, dự đoán và xử
lý dữ liệu không tuyến tính.
o Tính linh hoạt: Có thể tùy chỉnh kiến trúc mạng bằng cách thêm hoặc
bớt lớp ẩn, điều chỉnh số lượng nơ-ron, và sử dụng các hàm kích hoạt
khác nhau.
o Hiệu suất tốt: Với đủ dữ liệu huấn luyện và tinh chỉnh thích hợp,
mạng nhiều lớp có thể đạt hiệu suất tốt trên nhiều tác vụ.
2. Nhược điểm:
o Phức tạp trong huấn luyện: Huấn luyện mạng nhiều lớp đòi hỏi
nhiều thời gian và tài nguyên tính toán. Việc tối ưu hóa trọng số và
bias có thể khó khăn và dễ gặp vấn đề về overfitting.
o Khó hiểu và khó giải thích: Kiến trúc phức tạp của mạng nhiều lớp
làm cho việc hiểu và giải thích cách mạng hoạt động trở nên khó
khăn.

You might also like