Learning Matlab by Examples of Neural Network!

Thảo luận trong 'Matlab'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. chulinhtre

    chulinhtre myselfHungNN

    Tham gia ngày:
    12/3/13
    Bài viết:
    439
    Đã được thích:
    823
    Điểm thành tích:
    93
    Hôm nay, mình tạo thread này để cùng ACE học sử dụng matlab và mạng neural trong bài toán phân loại (classification)

    Note:
    1. Mình không có nhiêu thời gian, nên có thể không được liên tục, các bạn không được giục mình nhé!
    2. Nhiều thuật ngữ là tiếng Anh, mình không biết dịch ra tiếng Việt như thế nào cả vì lý do đơn giản là mình chưa hề đọc một cuốn sách nào về mạng nơ ron bằng tiếng Việt, nên mình không biết thuật ngữ tiếng Việt tương đương. Và mình để nguyên thuật ngữ tiếng Anh, điều này theo mình là có lợi, vì sau này, đọc sách tiếng Anh sẽ dễ dàng hơn
    3. Ở đây, không trình bày chi tiết thuật toán, mà chỉ quan tâm theo kiểu tìm hiểu để biết nó như thế nào, sử dụng ra làm sao (engineeging), ACE nhé, thế cho đỡ nặng đầu, không công thức toán. ACE cần tìm hiểu thêm thì cứ đọc textbook.

    Thân!

    Bắt đầu nào!
    Bài toán phân loại:
    - ví dụ1: như trong bài toán computer vision, hình ảnh từ camera, ta cần nhận ra đâu là vạch trắng, để robot có thể bám theo chẳng hạn.
    như vậy, hệ thống có 1 đầu ra (scalar), vạch trắng ('1') hay không phải là vạch trắng ('0').
    Đầu vào: 1 cái ảnh từ camera. (có nhiều pixel), tức là có nhiều dữ liệu hay mỗi pixel ta gọi là 1 dimension.
    Như vậy đầu vào: nhiều dimmension và đầu ra là 1.

    ví dụ 2: nhìn các chị em gái, và quyết định: em ấy xinh (dễ thương, đáng yêu, cute, cool,.v.v....) và không xinh
    Để oánh giá được thì ta nhìn mắt, mũi, dáng người, da, chân dài không, mái tóc, cách nói chuyện. ......

    Như vậy để có 1 quyết định kiểu on-off, thì cần một cơ số các tham số khác như ví dụ ở trên(dimension).

    Cơ bản bài toán classification là như thế!

    Tại sao neuron có thể làm được việc này?
    Ta tìm hiểu 1 neural là gì, mà mô hình hóa ra sao.
    Dễ hiểu thì neural là một mô hình toán, các dimension ở đầu vào được tổ hợp với nhau, với các trọng số khác nhau, sau đấy giá trị tổ hợp được đưa làm đầu vào của vào một hàm phi tuyến (gọi là activation function), hàm này có thể là: hardlim, tansig v.v...., và đầu ra của hàm này, chính là giá trị mà neural tính ra (hay quyết dịnh của neural, và phụ thuộc vào các dimmension ở đầu vào).
    Fig1.
    Như vậy, với cách thay đổi trọng số, và chọn hàm actication fucntion phù hợp từng bài toán, ta có thể dùng neural vào nhiều bài toán khác nhau.

    Neuron Network
    Dựa trên là cấu trúc của 1 neural, với các bài toán khác nhau, thì có thể ghép nhiều neural lại với nhau, và lúc này, ta gọi là neural network!
    Fig2.


    Một số chú ý
    (1) Để check chương trình thì các bạn chạy từng bước, bằng cách ấn nút như hình dưới nhé
    UserFig.

    (2) Một số qui ước trong Matlab:
    - Đầu vào là p: vecto cột (Rx1)​
    - Trọng số w: là vector hàn (1xR)​
    - bias b: là số vô hướng, scalar (1x1)​
    R= là số dimmension​
    P1_2.
    Mình đã attach file slice. các bạn có thể xem qua nhé!
     

    Các file đính kèm:

    caotai, TNgoca11, thanh_nhanbk4 others thích bài này.
  2. chulinhtre

    chulinhtre myselfHungNN

    Tham gia ngày:
    12/3/13
    Bài viết:
    439
    Đã được thích:
    823
    Điểm thành tích:
    93
    Bài toán 1: Tính toán đầu ra của 1 neuural
    fig3. Fig4.
    (1) Tham số cho neural:
    Mã:
    close all; clear all; clc;
    %%  trọng số
    w = [4 -2];
    %%  bias
    b = -3;
    %% activation function
    func = 'tansig'
    %  func = 'purelin';
    %  func = 'hardlin';
    %  func = 'logsin';
    
    (2) Đầu vào: input vector (là vector 2 chiều)
    Mã:
    p = [2 3]
    
    (3) Tính toán đầu ra của neuron

    3.1 đầu ra sau khi tổ hợp (trước khi đưa vào activation fucntion)
    Mã:
    activation_potential  = p*w'+b
    % activation_potential  = p.*w+b
    
    3.2 Đầu ra của neuron (đầu ra cảu hàm activation function)
    Mã:
    neuron_output = feval(func,activation_potential)
    

    (4) Vẽ giá trị đầu ra của neuron khi giá trị đầu vào thay đổi.

    Từ đây, ta thấy xuất hiện 2 miền đầu ra neuron khác nhau, hay noí cách khác: phân ra hai loại khác nhau!
    Mã:
    [p1,p2] = mehsgrid(-10:.25:10);
    z = feval(func, [p1(:) p(2)]*w'+b);
    z= reshape(z, length(p1),length(p2));
    plot3(p1,p2,z); grid on;
    xlable(' dimension 1'); ylabel('dimension 2'); zlable('Neuron output');
    
    Đây là kết quả đầu ra của neuron với activation fucntion là hàm tansig.
    P1_1.
    Các bạn chạy trên matlab để xem kết quả nhé!
    Hết!

    Full Code:
    PHP:
    Copyrightcodientu.org
    Problem1.Calculate neuron output
     
    close all
    clear allclc;
    %% 
    Define neuron Parameter
    %  Neuron weights
    = [-2]
    Neuron bias
    = -3
    activation function
    func 'tansig'
    %fucnc 'hardin'
    %fucnc 'purelin'
    %fucnc 'logsig'
     
    %% Define Input Vector
    = [2 3]
     
    %% 
    Caclculate neuron output
    %3.1
    activation_potential 
    p*w'+b
    %3.2
    neuron_output = feval(func,activation_potential)
     
    %% Plot neuron output over range of inputs
    %Range of input
    [p1,p2] = meshgrid(-10:0.25:10);
    z = feval(func,[p1(:) p2(:)]*w'
    +b);
    reshape(z,length(p1),length(p2));
    figureplot3(p1,p2,z); grid on;
    xlabel('Input(1) - Dimension 1');
    ylabel('Input(2) - Dimension 2');
    zlabel('Neural Output');
    title('Problem 1: Calculate neuron output')
     
    yurynguyen, caotai, TNgoca112 others thích bài này.
  3. thuongspkt

    thuongspkt Học sinh phổ thông

    Tham gia ngày:
    8/4/13
    Bài viết:
    6
    Đã được thích:
    8
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ sư Điện - Điện Tử
    Nơi ở:
    TP.HCM
    Tiếp đi bạn, nên nói thêm ứng dụng của nó chứ mình thấy sách nào cũng viết nhiều, làm thì cũng dễ mà nó để làm gì và như thế nào mới là quan trọng
     
  4. chulinhtre

    chulinhtre myselfHungNN

    Tham gia ngày:
    12/3/13
    Bài viết:
    439
    Đã được thích:
    823
    Điểm thành tích:
    93
    NN là một thuật toán - hiểu đơn giản là như thế!

    Về ứng dụng thì bạn có thể suy nghĩ thế này:

    Giả sử bạn đang có tiền (hoặc vàng), bạn cần sử dụng như thế nào là có lợi nhất. Tức là bạn cần ra 1 quyết định: mua hay bán.

    Để có lợi, thì bạn cần có nhiều thông tin thị trường rồi bạn mới ra quyết định (đấy là cái neuron trong đầu), tất nhiên, ra quyết định đúng, sai còn phụ thuộc vào tâm lý lúc đấy nữa. Vậy có thể làm một hệ thống hỗ trợ ra quyết định không, mà có thể học được từ quá khứ, và ra quyết định không, thì neuron có thể làm được điều này.

    Ví dụ khác, chẳng hạn như các hệ thống nhận dạng biển số xe trong các trạm giữ xe, hay các trạm thu phí, thì hình ảnh từ camera, thu về cần đưa ra là xe biển số là bao nhiêu để in vào cuống vé. Tức là cần phân loại xem hình ảnh camera thu được có các ký tự ('A' - 'Z' ) và số '0'-'9' không? Nếu không có và nếu có, thì là số, chữ số nào? (bài toán classification)

    Một ví dụ nữa là : giả sử qua thực nghiệm, ta tìm được một mối quan hệ giữa đầu vào và đầu ra, cần tìm mối quan hệ đấy là như thế nào, hay nói các khác, ta tìm hàm xấp xỉ giữa đầu vào và đầu ra. Nếu ta có đầu vào khác không hoàn toàn giống với các đầu vào đã có qua thực nghiêm, thì đâu ra lúc này là bao nhiêu (bài toán regression). Khi có hàm này, ta có thể rút ra được quy luật, ví dụ như ta đã học được là tăng giá xăng, thì ta biết các mặt hàng tiêu dùng khác sẽ tăng, nhưng nếu thêm thông itn nữa là không thu phí đường bộ, thì có thể giá vé xe khách vẫn giữ nguyên chứ không tăng. (đấy là quy luật mà con người có thể học được, ta muốn hệ thống NN cũng có tính năng gần gần như thế)

    Ứng dụng nó là vô vàn. Chi tiết hơn thì đọc thêm trong sách

    Ở đây, mình bản luận theo bài toán rõ ràng là bài toán phân loại - classification, chứ không phải bàn toán regression.
    Tức là với nhiều đầu vào, cần đưa ra 1 quyết định, trong một tập hợp hữu hạn các quyết định khác ( đây chính là :phân loại đấy).

     
    caotai, trimyka, thuongspkt2 others thích bài này.
  5. chulinhtre

    chulinhtre myselfHungNN

    Tham gia ngày:
    12/3/13
    Bài viết:
    439
    Đã được thích:
    823
    Điểm thành tích:
    93
    Bài toán 2: Các hàm activation thông dụng:
    Về bản chất, activation fucntion có thể là hàm bất kỳ, có thể định nghĩa bởi người dùng sao cho phù hợp với từng yêu cầu cụ thể...​

    Matlab đã xây dựng một số lượng lớn built-in fucntion mà có thể đóng vai trò là activation function:​

    (1) Hard-Limit Transfer Fucntion
    PHP:
    FunctionFcn 'hardlim';
    Fig5.

    (2) Log-Sigmod Transfer Fucntion
    PHP:
    FunctionFcn 'logsin';
    Fig6.

    (3) Radial Basis Function
    PHP:
    FunctionFcn 'radbas';
    Fig7.


    (4) Symmetric Hard-Limit Transfer Fucntion
    PHP:
    FunctionFcn 'hardlims';
    Fig8.

    (5) Tan-Sigmod Transfer Fucntion
    PHP:
    FunctionFcn 'tansig';
    Fig9.
    (6) Satlin Transfer Fucntion
    PHP:
    FunctionFcn 'satlin';
    Fig10.

    (7) Softmax Transfer Fucntion
    PHP:
    FunctionFcn 'softmax';
    Fig11.

    (8) Linear Transfer Fucntion
    PHP:
    FunctionFcn 'purelin';
    Fig12.

    (9) Satlins Transfer Fucntion
    PHP:
    FunctionFcn 'satlins';
    Fig13.
     
    hoanglocmdc, TNgoca11BuiBachTuanAnh thích bài này.
  6. chulinhtre

    chulinhtre myselfHungNN

    Tham gia ngày:
    12/3/13
    Bài viết:
    439
    Đã được thích:
    823
    Điểm thành tích:
    93
    Bài toán 2: câu lệnh matlab cấu hình nên mạng neuron bất kỳ
    Hệ thống cần xây dựng có: 6 đầu vào, 2 đầu ra:
    1. Đầu vào và đầu ra
    Mã:
    %% Define one sample: Inputs and Outputs
    close all; clear all; clc;
    inputs = [1:6]' % a input vector - (6 dimension pattern)
    outputs = [1 2]'; % coresponding target output vector
    2. Khởi tạo mạng neron có 2 lớp
    Mã:
    net = network( ...
            1,          ... % numInputs,    number of inputs,
            2,          ... % numLayers,    number of layers
            [1; 0],    ... % biasConnect,  numLayers-by-1 Boolean vector,
            [1; 0],    ... % inputConnect, numLayers-by-numInputs Boolean matrix,
            [0 0; 1 0], ... % layerConnect, numLayers-by-numLayers Boolean matrix
            [0 1]      ... % outputConnect, 1-by-numLayers Boolean vector
        );
    % View Network
    view(net)
    nn02_custom__nn01.

    3. Xác định tham số cho mạng neuron
    Mã:
    %% Define topology and Activation FuncTion
    % number of neurons in hiddenlayer 1
    net.layers{1}.size = 5;
    % Activation Fucntion of Neuron in HiddenLayer 1
    net.layer{1}.transferFcn = 'logsig';
    view(net)
    nn02_custom__nn01.

    4. Cấu hình mạng neuron đúng với đầu vào và đầu ra
    Mã:
    %% Configure Network
    net = configure(net, inputs, outputs);
    view(net)
    nn02_custom__nn03.

    5. Huấn luyện mạng và tính toán đầu ra của Neuron
    Mã:
    %% train net and Calculate neuron output
    initial_output = net(inputs);
    % netwrok training
    net.trainFcn = 'trainlm';
    net.PerformFcn = 'mse';
    net = train(net,inputs,outputs);
    % neuron output after training
    final_output = net(inputs);
    6. Kiểm tra kết quả đầu ra cảu neuron trước và sau khi huấn luyện
    Mã:
    %% Result
    initial_output
    final_output
    
    Fullcode:
    PHP:
    %filenamea02_nn02_custom_nn.m
    created by myselfHungNN
    copyright codientu.org/forum
    date18May2013
    Version 1.0
     
    %a02_nn02_custom_nn.m
    %% Define one sampleInputs and Outputs
    close all
    clear allclc;
    inputs = [1:6]'; % a input vector - (6 dimension pattern)
    outputs = [1 2]'
    ; % coresponding target output vector
     
    %% Define a custom network
    create network
    net 
    network( ...
            
    1,          ... % numInputs,    number of inputs,
            
    2,          ... % numLayers,    number of layers
            
    [10],    ... % biasConnect,  numLayers-by-1 Boolean vector,
            [
    10],    ... % inputConnectnumLayers-by-numInputs Boolean matrix,
            [
    0 01 0], ... % layerConnectnumLayers-by-numLayers Boolean matrix
            
    [0 1]      ... % outputConnect1-by-numLayers Boolean vector
        
    );
    View Network
    view
    (net)
     
    %% 
    Define topology and Activation FuncTion
    number of neurons in hiddenlayer 1
    net
    .layers{1}.size 5;
    Activation Fucntion of Neuron in HiddenLayer 1
    net
    .layers{1}.transferFcn 'logsig';
     
    view(net)
     
    %% 
    Configure Network
    net 
    configure(netinputsoutputs);
    view(net)
     
    %% 
    train net and Calculate neuron output
    initial_output 
    net(inputs);
    netwrok training
    net
    .trainFcn 'trainlm';
    net.performFcn 'mse';
    net train(net,inputs,outputs);
    neuron output after training
    final_output 
    net(inputs);
     
    %% 
    Result
    initial_output
    final_output
     

    Các file đính kèm:

    sgesvntrimyka thích bài này.
  7. trimyka

    trimyka VIP Staff Member

    Tham gia ngày:
    3/4/13
    Bài viết:
    525
    Đã được thích:
    990
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Bạn cho mình góp "vốn" thêm mấy cái hình để dễ hình dung
    hình 1 dạng mô hình toán
    newCerebrum_NN.
    Hơi dễ sợ......:)

    ..."mạng nơ ron trên không gian" (cái này Nasa mô hình hóa dùng để nghiên cứu phát triển cây xanh trên vũ trụ)...

    NasaNeuralNetwork.

    Cao quá... trên vũ trụ ...>:D<

    còn đây "mạng nơ ron dùng để cứu bạn" ... bác sĩ mô hình dùng nghiên cứu ung thư...


    TumorPerceptron.

    và đây rồi "mạng nơ ron ở trong nhà bạn" ......máy scan....:-)/\:-)

    OCRDiagram.

    Nói chung là mạng neuron ứng dụng rất rộng từ trên ngoài vũ trụ.. đến trong nhà bạn...và tóm lại "hạnh phúc ở quanh ta" nhờ có mạng nơ ron... Đừng sợ các bạn nhé...

    các bạn nhìn xung quanh xem...có thể góp "vốn" thêm không... nhất là trong lĩnh vực của bạn

    ...cám ơn bạn chulinhtre đã đề cập đến vấn đề này....

    Chúc các bạn vui
     
    thanh_nhanbk, chulinhtre, sgesvn2 others thích bài này.
  8. vanmanh1988

    vanmanh1988 Học sinh trung cấp

    Tham gia ngày:
    10/12/12
    Bài viết:
    40
    Đã được thích:
    18
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Hay lắm, tiếp tục đi nào.
     
  9. hoanganh234

    hoanganh234 Học sinh trung cấp

    Tham gia ngày:
    25/10/12
    Bài viết:
    41
    Đã được thích:
    4
    Điểm thành tích:
    8
    Giới tính:
    Nam
    em đang làm về nhận dạng ký tự có bác nào giúp e với
     
  10. Mr.blue

    Mr.blue Sinh viên đại học

    Tham gia ngày:
    6/8/15
    Bài viết:
    43
    Đã được thích:
    53
    Điểm thành tích:
    18
    Giới tính:
    Nam
    Nghề nghiệp:
    Instructor
    Nơi ở:
    Hanoi
     

Chia sẻ trang này