Xõy dựng mụ hỡnh ANN tối ưu xỏc định đồng thời 5 ion kim loại

Một phần của tài liệu Ứng dụng phần mềm MATLAB trong nghiên cứu và giảng dạy hoá phân tích ở Việt Nam (Trang 45 - 51)

Cỏc số liệu và lựa chọn ban đầu * Bộ số liệu học:

- Lớp nhập Alearn[nxm]: là ma trận độ hấp thụ quang của 80 mẫu chuẩn trờn toàn dải phổ (từ λ = 450 -600nm) trong đú n=80 là số mẫu học, m =151 là số bước súng tiến hành ghi phổ.

- Lớp xuất Clearn[nxp]: là ma trận nồng độ dung dịch mẫu chuẩn, với n= 80 và p =5 cột là nồng độ của 5 cấu tử cần phõn tớch.

* Bộ số liệu kiểm tra:

- Lớp nhập Atest[qxm]: là ma trận độ hấp thụ quang của mẫu kiểm tra trờn toàn dải phổ với q = 20 là số mẫu kiểm tra và m= 151 bước súng.

- Lớp xuất Ctest[qxp]: là ma trận nồng độ dung dịch kiểm tra ( q=20 và p=151) .

Như vậy ta cú mạng nơron với 151 nỳt đầu vào và 5 nỳt đầu ra.

* Hàm truyền của nơron lớp ẩn: là hàm chuẩn hoỏ ‘logsig’ ‘purelin’ ‘logsig’ * Hàm truyền của nơron đầu ra: là tuyến tớnh ‘purelin’

- Số bước học là 100.00 thỡ sẽ đủ để mụ hỡnh luyện mạng cho sai số tương đối bỡnh phương trung bỡnh (MSE) nhỏ. Giả sử đặt trước MSE là 10-3 %, tức là anpha định trước (α) = 10-5

Theo như lý thuyết về mạng MLP, để tỡm được số nơron cho mạng nơron tối ưu, ta thực hiện bước học và tăng dần giỏ trị của số lớp ẩn sau đú lưu kết quả sai số của quỏ trỡnh học Elearn và sai số quỏ trỡnh kiểm tra Etest. Cỏc tham số tớnh toỏn này sau khi đó được chọn thỡ tiến hành chọn cỏc cỏc hàm neural network toolbox cú sẵn trong thư viện của Matlab.

Trong quỏ trỡnh thực hiện bài toỏn ta sử dụng cỏc hàm như sau:

- Tạo hàm, thiết lập một mạng nơron mới và luyện tập cho mạng cú cấu trỳc như sau:

net = newff(PR, [S1 S2 …Sn1], {TF1 TF2…TFn1}, BTF, BTF, PF)

PR = [min(x); max(x) ]

[S1 S2 …Sn1] là số nơron lớp ẩn và lớp xuất, ứng với bài toỏn này ta

cú: [nhidden 2]

{TF1 TF2 …TFn1} là cỏc hàm học của mỗi lớp mạng, chỳng ta cú thể

tham khảo thờm trong toolbox của Matlab.

Sim(net, x, d, ntimes): hàm mụ phỏng đầu ra theo cỏc giỏ trị đầu vào. Train(net, x ,d, ntimes): hàm học của bài toỏn.

Epochs = 10000 : số bước học.

Cỏc hàm này đều là hàm chuẩn, ta cú thể dựng ngay và lấy dễ dàng từ toolbox của Matlab. Để cú mụ hỡnh ANN tối ưu, cú thể khảo sỏt cỏc yếu tố sau: Số lớp ẩn, Số nỳt trong lớp ẩn, Giỏ trị sai số tương đối bỡnh phương trung bỡnh (MSE), Số bước học.

Tuy nhiờn, do sự khỏc nhau khụng nhiều về cỏc điều kiện đú, và kết quả tớnh toỏn đó cho sai số rất nhỏ so với yờu cầu, nờn chỳng tụi chỉ tiến hành khảo sỏt số lớp ẩn cú trong mụ hỡnh.

Chương trỡnh lập trỡnh trong Matlab cho mạng MLP để tỡm mụ hỡnh mạng tối ưu

% Yeu cau : co hai bo so lieu (xlearn,dlearn) va (xtest,dtest).

% Hay tim duong dac tinh phu thuoc Ekt va Ehoc vao so noron

lop an trong mang noron truy n th ng MLP mot lop an, tu doề ẳ

xac dinh cau truc mang toi uu (Ekt=min).Tinh sai so cho mang toi uu.

%--- --

% LAY DU LIEU

load ANN.mat;

%Chuyen vi cac ma tran so lieu dau vao

[N,S]=size(Clearn); % o day ta co N= 5; S=151

[K,R]=size(Alearn); % o day ta co K=77; S= 151

% Xac dinh mang MLP bang phuong phap Fletcher-Reeves conjugate gradient

Ehoc= rand(120,1); Ekt= rand(120,1);

% cho so noron lop an thay doi tu 1 den 120 de tim cau truc mang toi uu

for nTimes = 1:1:10

% thuc hien tinh 10 lan cho moi lop an de tim gia tri co diem xuat phat tot nhat

Elearn = 0; Etest=0;

Ehoc_try = rand(1,10); Ekt_try = rand(1,10);

net = newff(minmax(Alearn),[nhidden 100 100 5],{'logsig'

'purelin' ‘logsig’ ‘purelin’},'traincgf');

% Thiet lap cac thong so cho qua trinh hoc cua mang

net.trainParam.goal=0.001;

net.trainParam.epochs = 100000; net = train(net,Alearn,Clearn); ylearn = sim(net,Alearn);

% gia tri dau ra cua lop mang ung voi E_learn

ytest = sim(net,Atest) ;

% Gia tri dau ra cua lop mang ung voi E_test

e_hoc = Clearn-ylearn;

%sai so cua qua trinh hoc

e_test = Ctest-ytest;

%sai so cua qua trinh kiem tra % Tinh toan sai so

Elearn = sum(sum(e_hoc.*e_hoc)); Etest = sum(sum(e_test.*e_test));

% Tinh sai so Elearn cho mang duoc cat vao mot matran co 5 hang

Ehoc_try(nTimes) = Elearn;

%luu giu gia tri nay lai

% Tinh sai so Etest cho mang duoc cat vao ma tran co 5 hang

Ekt_try(nTimes) = Etest;

%luu giu gia tri nay lai

end

if Elearn > net.trainParam.goal

% Neu sai so Elearn > goal thi tiep tuc

continue

% con nguoc lai thi dung qua trinh hoc lai

break

Ehoc(nhidden,1)= min(Ehoc_try); Ekt(nhidden,1) = min(Ekt_try);

end

% khoi hien thi su phu thuoc cua sai so va so lop an

for i=1:1:800;

plot(i,Ehoc(i,1),'*b-',i,Ekt(i,1),'+r:');

title('Sai so hoc va kiem tra cua mang MLP theo so luong Noron

lop an');

xlabel('So Noron lop an');

ylabel('Sai so');

legend({'Sai so hoc Elearn','Sai so kiem tra Etest'});

grid on;

hold on;

end

% ket thuc chuong trinh

Hỡnh 13: Mụ hỡnh mạng nơron nhõn tạo mạng truyền thẳng MLP với 4 lớp ẩn

Từ mụ hỡnh mạng nơron truyền thẳng ở trờn, ta thấy thời gian luyện mạng rất lớn (55 phỳt) đú là do kớch thước của tập số liệu là rất lớn (80x151) và (80x5), số nỳt đầu vào lờn tới 151 nỳt, cần phải cú nhiều thời gian để lan truyền sai số giữa cỏc giỏ trị của nỳt ẩn sao cho sai số thu được ở đầu ra là nhỏ nhất. Nếu giảm kớch thước của tập số liệu đầu vào từ 151 xuống giỏ trị nhỏ hơn 10 thỡ thời gian phõn tớch sẽ giảm hơn rất nhiều. Vỡ vậy chỳng tụi tiếp tục Vỡ vậy cần xử lý số liệu bằng cỏch giảm kớch thước tập số liệu trước khi nhập số liệu vào mạng nơron nhõn tạo.

Hỡnh 14: Đồ thị biểu diễn sự phụ thuộc của sai số MSE theo số bước học

Hỡnh 15: Đồ thị biểu diễn sự phụ thuộc của sai số học và sai số kiểm tra vào số nơron lớp ẩn.

Mụ hỡnh ANN tối ưu dựa trờn nguyờn tắc lựa chọn số nỳt trong lớp ẩn đầu tiờn sao cho giỏ trị sai số của mẫu học và mẫu kiểm tra là thấp nhất. Đồ thị trờn hỡnh 15 cho thấy, nếu số nơron lớp ẩn là 100 thỡ giỏ trị sai số học và sai số kiểm tra sẽ nhỏ gần bằng nhau. Do đú, chỳng tụi chọn số nơron lớp ẩn là 100 để tiến hành luyện mạng và kiểm tra mạng theo chương trỡnh dưới đõy:

net = newff(minmax(Alearn),[100 100 100 100 5],{'logsig''logsig''purelin''logsig' 'purelin'},'traincgf'); net.trainParam.goal=0.0001; net.trainParam.epochs = 10000; net = train(net,Alearn,Clearn); ylearn = sim(net,Alearn); ytest = sim(net,Atest); saiso1 = 100*(ytest-Ctest)./Ctest;

Một phần của tài liệu Ứng dụng phần mềm MATLAB trong nghiên cứu và giảng dạy hoá phân tích ở Việt Nam (Trang 45 - 51)

Tải bản đầy đủ (DOC)

(76 trang)
w