% MNIST % weights, activations % Ha már van egy betanított hálózatunk (convnet), % a hálózat rétegeiről a köv utasítással kaphatunk infót: convnet.Layers % a 2. réteg (ez az 1. konv réteg) súlyait tegyük a w mátrixba % a w egy 5x5x1x20-as tömb lesz (5x5-ös filterek, grayscale képek, % 20 db filter): w=convnet.Layers(2).Weights; % Transzformáljuk az értékeket a [0,1] intervallumba, hogy képként % tudjuk megjeleniteni w = mat2gray(w); % Kicsik a képek, nagyítsuk fel (ez az 5x5-öt növeli 100x100-ra) w = imresize(w, [100 100]); % Montázsoljuk össze 1 képpé őket: % itt elméletileg 5x5-ös, mozaiklapokból álló képeket kellene látni, % de a felnagyításnál a Matlab símítja a képet, így elmosódnak a határok. figure;montage(gather(w(:,:,1,:))) title('conv1 súlyok') % Nézzük meg az egy konkrét kép által keltett aktivációkat: % Kiválasztunk egy tanítóképet: im=X(:,:,:,52988); % Felnagyítva megnézzük figure;imshow(imresize(im,[100,100])); % Az act1-be teszem a kép által keltett aktivációkat, azaz azokat % a képeket, amiket akkor kapunk, ha a képen végigfutnak az első % konvolúciós rétegben megadott kis ablakok az optimalizált súlyokkal. % Így 20 db 24x24-es képet kapunk. % A "conv_1" az első konv réteg neve, ld. convnet.Layers. act1 = activations(convnet,im,'conv_1','OutputAs','channels'); % Átrakjuk egy 4D-s tömbbe, hogy a montage ábrázolni tudja. A montage % olyan tömböt vár, ahol az első 2 dim a kép magassága, szélessége, % a 3. a csatornák, a 4., hogy melyik képről van szó sz = size(act1); act1 = reshape(act1,[sz(1) sz(2) 1 sz(3)]); figure;montage(imresize(mat2gray(act1),[100,100]),'Size',[4 5]) title('conv1 aktivációs térképek') % Ugyanez a 2. konv réteggel: act2 = activations(convnet,im,'conv_2','OutputAs','channels'); sz = size(act2); act2 = reshape(act2,[sz(1) sz(2) 1 sz(3)]); figure;montage(imresize(mat2gray(act2),[100,100]),'Size',[4 5]) title('conv2 aktivációs térképek')