MATLAB Neural Network Toolbox uczenie sieci (dogłębnie) WYKŁAD Piotr Ciskowski
Neural Network Toolbox:
NEURAL NETWORK TOOLBOX NOTACJA
Neural Network Toolbox - notacja: pojedynczy neuron: z jednym wejściem
Neural Network Toolbox - notacja: funkcje aktywacji: hard-limit: pure lin: log sig:
Neural Network Toolbox - notacja: pojedynczy neuron: z wieloma wejściami
Neural Network Toolbox - notacja: warstwa neuronów:
Neural Network Toolbox - notacja: sieci wielowarstwowe: macierze wag: IW oraz LW indeksy przy macierzach wag: skąd-dokąd
Neural Network Toolbox - notacja: sieci wielowarstwowe:
NEURAL NETWORK TOOLBOX POJEDYNCZY NEURON LINIOWY - DZIAŁANIE
przykład 1. działanie neuronu liniowego - dane równoległe dane wejściowe: równoległe wszystkie wejścia pojawiają się w tym samym czasie, mają różne (niezależne) znaczenie net = newlin ( [ 1 3 ; 1 3 ], 1 ) net.b{1} = 0 ; net.iw{1,1} = [ 1 2 ] ; P = [ 1 2 2 3 ; 2 1 3 1 ] P = 1 2 2 3 2 1 3 1 Y = sim ( net, P ) Y = 5 4 8 5
przykład 1. działanie neuronu liniowego - dane sekwencyjne dane wejściowe: sekwencyjne na jednym wejściu pojawia się sygnał będący sekwencją w czasie net = newlin ( [ -1 1 ], 1, [ 0 1 ] ) net.biasconnect = 0 ; net.iw{1,1} = [ 1 2 ] ; P = { 1 2 3 4 } P = [1] [2] [3] [4] Y = sim ( net, P ) Y = [1] [4] [7] [10]
NEURAL NETWORK TOOLBOX POJEDYNCZY NEURON LINIOWY - UCZENIE PRZYROSTOWE
przykład 2. uczenie neuronu liniowego - przyrostowe uczenie: przyrostowe wagi i biasy są uaktualniane po prezentacji incremental każdego kolejnego przykładu [ net, Y, E, Pf, Af, tr ] = adapt ( net, P, T, Pi,Ai ) % wejścia: net - Network. P - Network inputs. T - Network targets, default = zeros. Pi - Initial input delay conditions, default = zeros. Ai - Initial layer delay conditions, default = zeros. % wyjścia: net - Updated network. Y - Network outputs. E - Network errors. Pf - Final input delay conditions. Af - Final layer delay conditions. TR - Training record (epoch and perf).
przykład 2. uczenie neuronu liniowego - przyrostowe uczenie: przyrostowe wagi i biasy są uaktualniane po prezentacji incremental każdego kolejnego przykładu Pmacierz = [ 1 2 2 3 ; % t = 2 p 1 + p 2 2 1 3 1 ] ; % P i T jako zwykłe macierze Tmacierz = [ 4 5 7 7 ] ; % dla uczenia wsadowego Pcell = { [1;2] [2;1] [2;3] [3;1] } ; Tcell = { 4 5 7 7 } ; % P i T jako cell array % dla uczenia przyrostowego net = newlin ( [ -1 1 ; -1 1 ], 1, 0, 0 ) ; net.iw{1,1} = [ 0 0 ] ; net.b{1} = 0 ; net.inputweights{1,1}.learnparam.lr = 0.1 ; net.biases{1,1}.learnparam.lr = 0.1 ; [ net, y, e, pf ] = adapt ( net, Pcell, Tcell ) ;
NEURAL NETWORK TOOLBOX POJEDYNCZY NEURON LINIOWY - UCZENIE WSADOWE
przykład 2. uczenie neuronu liniowego - wsadowe uczenie: wsadowe wagi i biasy są uaktualniane po prezentacji batch całego zbioru uczącego [ net, tr,y, E, Pf, Af ] = train ( net, P, T, Pi,Ai, VV,TV) % wejścia: net - Network. P - Network inputs. T - Network targets, default = zeros. Pi - Initial input delay conditions, default = zeros. Ai - Initial layer delay conditions, default = zeros. VV - Structure of validation vectors, default = []. TV - Structure of test vectors, default = []. % wyjścia: net - New network. TR - Training record (epoch and perf). Y - Network outputs. E - Network errors. Pf - Final input delay conditions. Af - Final layer delay conditions.
przykład 2. uczenie neuronu liniowego - wsadowe uczenie: wsadowe wagi i biasy są uaktualniane po prezentacji batch całego zbioru uczącego Pmacierz = [ 1 2 2 3 ; % t = 2 p 1 + p 2 2 1 3 1 ] ; % P i T jako zwykłe macierze Tmacierz = [ 4 5 7 7 ] ; % dla uczenia wsadowego net = newlin ( [ -1 1 ; -1 1 ], 1, 0, 0 ) ; net.iw{1,1} = [ 0 0 ] ; net.b{1} = 0 ; net.inputweights{1,1}.learnparam.lr = 0.1 ; net.biases{1}.learnparam.lr = 0.1 ; net.trainparam.epochs = 1 ; [ net, tr, y, e ] = train ( net, Pmacierz, Tmacierz ) ;
NEURAL NETWORK TOOLBOX PERCEPTRON
Neural Networks Toolbox perceptron
Neural Networks Toolbox perceptron
Neural Networks Toolbox perceptron net = newp ( PR, S ) ; % utworzenie perceptronu: % PR macierz wartości min i max poszczególnych wejść % macierz R x 2 % S - liczba neuronów net = newp ( [ 0 2 ], 1 ) ; inputweights = net.inputweights{1,1} biases = net.biases{1}
NEURAL NETWORK TOOLBOX POJEDYNCZY PERCEPTRON - GRANICE DECYZYJNE
przykład 3. perceptron granice decyzyjne net = newp ( [ -2 +2 ; -2 +2 ], 1 ) ; % utworzenie sieci net.iw{1,1} = [ -1 1 ] ; % ustawienie wag net.b{1} = [ 1 ] ; % i biasu (bez uczenia) p1 = [ 1 ; 1 ] ; y1 = sim ( net, p1 ) ; % test pojedynczych punktów p2 = [ 1 ; -1 ] ; y2 = sim ( net, p2 ) ; % punktów y = [ y1 y2 ] y = [ 1 0 ] p = { [ 1 ; 1 ], [ 1 ; -1 ] } ; % test obu punktów od razu y = sim ( net, p ) % (sekwencyjnie) y = [ 1 ] [ 0 ]
NEURAL NETWORK TOOLBOX POJEDYNCZY PERCEPTRON - UCZENIE KROK PO KROKU
przykład 4. perceptron - inicjalizacja net = newp ( [ -2 +2 ; -2 +2 ], 1 ) ; % utworzenie sieci net.iw{1,1} = [ -1 1 ] ; % ustawienie wag net.b{1} = [ 1 ] ; % i biasu (bez uczenia) net.inputweights{1,1}.initfcn = 'rands' ; % losowa inicjalizacja net.biases{1}.initfcn = 'rands' ; % wag i biasów net = init ( net ) ; weights = net.iw{1,1} weights = 0.2309 0.5839 biases = net.b{1} biases = -0.1106
przykład 4. perceptron uczenie krok po kroku... p = [ 1 ; 2 ] ; % uczenie na pojedynczych przykładach t = [ 1 ] ; y = sim ( net, p ) ; d = t y ; dw = learnp( weights, p, [],[],[],[], d, [],[],[] ) % poprawki wag dw = 1 2 weights = weights + dw weights = 2.0000 1.2000 net.iw{1,1} = weights ; db = learnp( biases, p, [],[],[],[], d, [],[],[] ) % poprawki biasów db = 1 2 biases = biases + db biases = 2.0000 1.2000 net.b{1} = biases ;
NEURAL NETWORK TOOLBOX POJEDYNCZY PERCEPTRON - UCZENIE OD RAZU
przykład 5. perceptron uczenie od razu net = newp ( [ -2 +2 ; -2 +2 ], 1 ) ; % utworzenie sieci net.iw{1,1} = [ -1 1 ] ; % ustawienie wag net.b{1} = [ 1 ] ; % i biasu (bez uczenia) p = { [2;2] [1;-2] [-2;2] [-1;1] } ; % ciąg uczący t = { 0 1 0 1 } ; % dla uczenia wsadowego net.trainparam.epochs = 4; net = train ( net, p, t ) ; TRAINC, Epoch 0/4 TRAINC, Epoch 2/4 TRAINC, Performance goal met. % uczenie % przez kilka epok y = sim ( net, p ) y = 0 1 0 1
NEURAL NETWORK TOOLBOX PERCEPTRONY WIELOWARSTWOWE
Neural Network Toolbox perceptrony wielowarstwowe neurony wykorzystują ciągłe funkcje aktywacji:
Neural Network Toolbox perceptrony wielowarstwowe warstwa sieci:
Neural Network Toolbox perceptrony wielowarstwowe sieć dwuwarstwowa:
przykład 6. perceptron dwuwarstwowy - tworzenie (kiedyś) p = [ -1-1 2 2 ;... % ciąg uczący 0 5 0 5 ] ; t = [ -1-1 1 1 ] ; % utworzenie sieci: net = newff ( minmax(p),... % 2 wejścia o zakresach: od 1 do 2 % od 0 do 5 [3,1],... % neuronów: 3 1 {'tansig','purelin'},... % funkcje aktywacji w warstwach: % 1. tangensoidalna % 2. liniowa 'traingd' ) ; % funkcja uczenia: traingd % (gradient descent)
przykład 6. perceptron dwuwarstwowy - tworzenie (teraz) p = [ -1-1 2 2 ;... 0 5 0 5 ] ; t = [ -1-1 1 1 ] ; net = newff ( p, t, 3 ) ; % ciąg uczący % utworzenie sieci
przykład 6. perceptron dwuwarstwowy uczenie gd (kiedyś) net.trainparam.show = 50; net.trainparam.lr = 0.05; net.trainparam.epochs = 300; net.trainparam.goal = 1e-5; % parametry uczenia [ net, tr ] = train ( net, p, t ) ; % uczenie sieci TRAINGD, Epoch 0/300, MSE 1.59423/1e-05, Gradient 2.76799/1e-10 TRAINGD, Epoch 50/300, MSE 0.00236382/1e-05, Gradient 0.0495292/1e-10 TRAINGD, Epoch 100/300, MSE 0.000435947/1e-05, Gradient 0.0161202/1e-10 TRAINGD, Epoch 150/300, MSE 8.68462e-05/1e-05, Gradient 0.00769588/1e-10 TRAINGD, Epoch 200/300, MSE 1.45042e-05/1e-05, Gradient 0.00325667/1e-10 TRAINGD, Epoch 211/300, MSE 9.64816e-06/1e-05, Gradient 0.00266775/1e-10 TRAINGD, Performance goal met.
przykład 6. perceptron dwuwarstwowy uczenie gd (kiedyś) net.trainparam.show = 50; net.trainparam.lr = 0.05; net.trainparam.epochs = 300; net.trainparam.goal = 1e-5; % parametry uczenia [ net, tr ] = train ( net, p, t ) ; % uczenie sieci TRAINGD, Epoch 0/300, MSE 1.59423/1e-05, Gradient 2.76799/1e-10 TRAINGD, Epoch 50/300, MSE 0.00236382/1e-05, Gradient 0.0495292/1e-10 TRAINGD, Epoch 100/300, MSE 0.000435947/1e-05, Gradient 0.0161202/1e-10 TRAINGD, Epoch 150/300, MSE 8.68462e-05/1e-05, Gradient 0.00769588/1e-10 TRAINGD, Epoch 200/300, MSE 1.45042e-05/1e-05, Gradient 0.00325667/1e-10 TRAINGD, Epoch 211/300, MSE 9.64816e-06/1e-05, Gradient 0.00266775/1e-10 TRAINGD, Performance goal met. y = sim ( net, p ) % sprawdzenie sieci y = -1.0010-0.9989 1.0018 0.9985 % t = [ -1-1 1 1 ] ;
przykład 6. perceptron dwuwarstwowy uczenie L-M (teraz) [ net, tr ] = train ( net, p, t ) ; % uczenie sieci TRAINLM-calcjx, Epoch 0/300, MSE 3.75044/1e-005, Gradient 5.00962/1e-010 TRAINLM-calcjx, Epoch 3/300, MSE 2.94384e-006/1e-005, Gradient 0.00366823/1e-010 TRAINLM, Performance goal met. y = sim ( net, p ) % sprawdzenie sieci y = -1.0000-0.9966 1.0000 1.0000 % t = [ -1-1 1 1 ] ;