pooling backward 동작 확인 코드 - LOPES-HUFS/DeepLearningFromForR GitHub Wiki

우선 backward로 들어가는 doutPooling_dout이라고 놓고 형상을 맞춰 만듭니다. 그 다음 첫번째 줄을 실행합니다.

>>> import numpy as np 
>>> Pooling_dout =np.arange(432000).reshape(12, 12, 30, 100)
>>> pooling_backward_dout = Pooling_dout.transpose(0, 2, 3, 1)
>>> pooling_backward_dout
array([[[[     0,   3000,   6000, ...,  27000,  30000,  33000],
         [     1,   3001,   6001, ...,  27001,  30001,  33001],
         [     2,   3002,   6002, ...,  27002,  30002,  33002],
         ...,
         [    97,   3097,   6097, ...,  27097,  30097,  33097],
         [    98,   3098,   6098, ...,  27098,  30098,  33098],
         [    99,   3099,   6099, ...,  27099,  30099,  33099]],

        [[   100,   3100,   6100, ...,  27100,  30100,  33100],
         [   101,   3101,   6101, ...,  27101,  30101,  33101],
         [   102,   3102,   6102, ...,  27102,  30102,  33102],
         ...,
         [   197,   3197,   6197, ...,  27197,  30197,  33197],
         [   198,   3198,   6198, ...,  27198,  30198,  33198],
         [   199,   3199,   6199, ...,  27199,  30199,  33199]],

        [[   200,   3200,   6200, ...,  27200,  30200,  33200],
         [   201,   3201,   6201, ...,  27201,  30201,  33201],
         [   202,   3202,   6202, ...,  27202,  30202,  33202],
         ...,
         [   297,   3297,   6297, ...,  27297,  30297,  33297],
         [   298,   3298,   6298, ...,  27298,  30298,  33298],
         [   299,   3299,   6299, ...,  27299,  30299,  33299]],

        ...,

        [[  2700,   5700,   8700, ...,  29700,  32700,  35700],
         [  2701,   5701,   8701, ...,  29701,  32701,  35701],
         [  2702,   5702,   8702, ...,  29702,  32702,  35702],
         ...,
         [  2797,   5797,   8797, ...,  29797,  32797,  35797],
         [  2798,   5798,   8798, ...,  29798,  32798,  35798],
         [  2799,   5799,   8799, ...,  29799,  32799,  35799]],

        [[  2800,   5800,   8800, ...,  29800,  32800,  35800],
         [  2801,   5801,   8801, ...,  29801,  32801,  35801],
         [  2802,   5802,   8802, ...,  29802,  32802,  35802],
         ...,
         [  2897,   5897,   8897, ...,  29897,  32897,  35897],
         [  2898,   5898,   8898, ...,  29898,  32898,  35898],
         [  2899,   5899,   8899, ...,  29899,  32899,  35899]],

        [[  2900,   5900,   8900, ...,  29900,  32900,  35900],
         [  2901,   5901,   8901, ...,  29901,  32901,  35901],
         [  2902,   5902,   8902, ...,  29902,  32902,  35902],
         ...,
         [  2997,   5997,   8997, ...,  29997,  32997,  35997],
         [  2998,   5998,   8998, ...,  29998,  32998,  35998],
         [  2999,   5999,   8999, ...,  29999,  32999,  35999]]],


       [[[ 36000,  39000,  42000, ...,  63000,  66000,  69000],
         [ 36001,  39001,  42001, ...,  63001,  66001,  69001],
         [ 36002,  39002,  42002, ...,  63002,  66002,  69002],
         ...,
         [ 36097,  39097,  42097, ...,  63097,  66097,  69097],
         [ 36098,  39098,  42098, ...,  63098,  66098,  69098],
         [ 36099,  39099,  42099, ...,  63099,  66099,  69099]],

        [[ 36100,  39100,  42100, ...,  63100,  66100,  69100],
         [ 36101,  39101,  42101, ...,  63101,  66101,  69101],
         [ 36102,  39102,  42102, ...,  63102,  66102,  69102],
         ...,
         [ 36197,  39197,  42197, ...,  63197,  66197,  69197],
         [ 36198,  39198,  42198, ...,  63198,  66198,  69198],
         [ 36199,  39199,  42199, ...,  63199,  66199,  69199]],

        [[ 36200,  39200,  42200, ...,  63200,  66200,  69200],
         [ 36201,  39201,  42201, ...,  63201,  66201,  69201],
         [ 36202,  39202,  42202, ...,  63202,  66202,  69202],
         ...,
         [ 36297,  39297,  42297, ...,  63297,  66297,  69297],
         [ 36298,  39298,  42298, ...,  63298,  66298,  69298],
         [ 36299,  39299,  42299, ...,  63299,  66299,  69299]],

        ...,

        [[ 38700,  41700,  44700, ...,  65700,  68700,  71700],
         [ 38701,  41701,  44701, ...,  65701,  68701,  71701],
         [ 38702,  41702,  44702, ...,  65702,  68702,  71702],
         ...,
         [ 38797,  41797,  44797, ...,  65797,  68797,  71797],
         [ 38798,  41798,  44798, ...,  65798,  68798,  71798],
         [ 38799,  41799,  44799, ...,  65799,  68799,  71799]],

        [[ 38800,  41800,  44800, ...,  65800,  68800,  71800],
         [ 38801,  41801,  44801, ...,  65801,  68801,  71801],
         [ 38802,  41802,  44802, ...,  65802,  68802,  71802],
         ...,
         [ 38897,  41897,  44897, ...,  65897,  68897,  71897],
         [ 38898,  41898,  44898, ...,  65898,  68898,  71898],
         [ 38899,  41899,  44899, ...,  65899,  68899,  71899]],

        [[ 38900,  41900,  44900, ...,  65900,  68900,  71900],
         [ 38901,  41901,  44901, ...,  65901,  68901,  71901],
         [ 38902,  41902,  44902, ...,  65902,  68902,  71902],
         ...,
         [ 38997,  41997,  44997, ...,  65997,  68997,  71997],
         [ 38998,  41998,  44998, ...,  65998,  68998,  71998],
         [ 38999,  41999,  44999, ...,  65999,  68999,  71999]]],


       [[[ 72000,  75000,  78000, ...,  99000, 102000, 105000],
         [ 72001,  75001,  78001, ...,  99001, 102001, 105001],
         [ 72002,  75002,  78002, ...,  99002, 102002, 105002],
         ...,
         [ 72097,  75097,  78097, ...,  99097, 102097, 105097],
         [ 72098,  75098,  78098, ...,  99098, 102098, 105098],
         [ 72099,  75099,  78099, ...,  99099, 102099, 105099]],

        [[ 72100,  75100,  78100, ...,  99100, 102100, 105100],
         [ 72101,  75101,  78101, ...,  99101, 102101, 105101],
         [ 72102,  75102,  78102, ...,  99102, 102102, 105102],
         ...,
         [ 72197,  75197,  78197, ...,  99197, 102197, 105197],
         [ 72198,  75198,  78198, ...,  99198, 102198, 105198],
         [ 72199,  75199,  78199, ...,  99199, 102199, 105199]],

        [[ 72200,  75200,  78200, ...,  99200, 102200, 105200],
         [ 72201,  75201,  78201, ...,  99201, 102201, 105201],
         [ 72202,  75202,  78202, ...,  99202, 102202, 105202],
         ...,
         [ 72297,  75297,  78297, ...,  99297, 102297, 105297],
         [ 72298,  75298,  78298, ...,  99298, 102298, 105298],
         [ 72299,  75299,  78299, ...,  99299, 102299, 105299]],

        ...,

        [[ 74700,  77700,  80700, ..., 101700, 104700, 107700],
         [ 74701,  77701,  80701, ..., 101701, 104701, 107701],
         [ 74702,  77702,  80702, ..., 101702, 104702, 107702],
         ...,
         [ 74797,  77797,  80797, ..., 101797, 104797, 107797],
         [ 74798,  77798,  80798, ..., 101798, 104798, 107798],
         [ 74799,  77799,  80799, ..., 101799, 104799, 107799]],

        [[ 74800,  77800,  80800, ..., 101800, 104800, 107800],
         [ 74801,  77801,  80801, ..., 101801, 104801, 107801],
         [ 74802,  77802,  80802, ..., 101802, 104802, 107802],
         ...,
         [ 74897,  77897,  80897, ..., 101897, 104897, 107897],
         [ 74898,  77898,  80898, ..., 101898, 104898, 107898],
         [ 74899,  77899,  80899, ..., 101899, 104899, 107899]],

        [[ 74900,  77900,  80900, ..., 101900, 104900, 107900],
         [ 74901,  77901,  80901, ..., 101901, 104901, 107901],
         [ 74902,  77902,  80902, ..., 101902, 104902, 107902],
         ...,
         [ 74997,  77997,  80997, ..., 101997, 104997, 107997],
         [ 74998,  77998,  80998, ..., 101998, 104998, 107998],
         [ 74999,  77999,  80999, ..., 101999, 104999, 107999]]],


       ...,


       [[[324000, 327000, 330000, ..., 351000, 354000, 357000],
         [324001, 327001, 330001, ..., 351001, 354001, 357001],
         [324002, 327002, 330002, ..., 351002, 354002, 357002],
         ...,
         [324097, 327097, 330097, ..., 351097, 354097, 357097],
         [324098, 327098, 330098, ..., 351098, 354098, 357098],
         [324099, 327099, 330099, ..., 351099, 354099, 357099]],

        [[324100, 327100, 330100, ..., 351100, 354100, 357100],
         [324101, 327101, 330101, ..., 351101, 354101, 357101],
         [324102, 327102, 330102, ..., 351102, 354102, 357102],
         ...,
         [324197, 327197, 330197, ..., 351197, 354197, 357197],
         [324198, 327198, 330198, ..., 351198, 354198, 357198],
         [324199, 327199, 330199, ..., 351199, 354199, 357199]],

        [[324200, 327200, 330200, ..., 351200, 354200, 357200],
         [324201, 327201, 330201, ..., 351201, 354201, 357201],
         [324202, 327202, 330202, ..., 351202, 354202, 357202],
         ...,
         [324297, 327297, 330297, ..., 351297, 354297, 357297],
         [324298, 327298, 330298, ..., 351298, 354298, 357298],
         [324299, 327299, 330299, ..., 351299, 354299, 357299]],

        ...,

        [[326700, 329700, 332700, ..., 353700, 356700, 359700],
         [326701, 329701, 332701, ..., 353701, 356701, 359701],
         [326702, 329702, 332702, ..., 353702, 356702, 359702],
         ...,
         [326797, 329797, 332797, ..., 353797, 356797, 359797],
         [326798, 329798, 332798, ..., 353798, 356798, 359798],
         [326799, 329799, 332799, ..., 353799, 356799, 359799]],

        [[326800, 329800, 332800, ..., 353800, 356800, 359800],
         [326801, 329801, 332801, ..., 353801, 356801, 359801],
         [326802, 329802, 332802, ..., 353802, 356802, 359802],
         ...,
         [326897, 329897, 332897, ..., 353897, 356897, 359897],
         [326898, 329898, 332898, ..., 353898, 356898, 359898],
         [326899, 329899, 332899, ..., 353899, 356899, 359899]],

        [[326900, 329900, 332900, ..., 353900, 356900, 359900],
         [326901, 329901, 332901, ..., 353901, 356901, 359901],
         [326902, 329902, 332902, ..., 353902, 356902, 359902],
         ...,
         [326997, 329997, 332997, ..., 353997, 356997, 359997],
         [326998, 329998, 332998, ..., 353998, 356998, 359998],
         [326999, 329999, 332999, ..., 353999, 356999, 359999]]],


       [[[360000, 363000, 366000, ..., 387000, 390000, 393000],
         [360001, 363001, 366001, ..., 387001, 390001, 393001],
         [360002, 363002, 366002, ..., 387002, 390002, 393002],
         ...,
         [360097, 363097, 366097, ..., 387097, 390097, 393097],
         [360098, 363098, 366098, ..., 387098, 390098, 393098],
         [360099, 363099, 366099, ..., 387099, 390099, 393099]],

        [[360100, 363100, 366100, ..., 387100, 390100, 393100],
         [360101, 363101, 366101, ..., 387101, 390101, 393101],
         [360102, 363102, 366102, ..., 387102, 390102, 393102],
         ...,
         [360197, 363197, 366197, ..., 387197, 390197, 393197],
         [360198, 363198, 366198, ..., 387198, 390198, 393198],
         [360199, 363199, 366199, ..., 387199, 390199, 393199]],

        [[360200, 363200, 366200, ..., 387200, 390200, 393200],
         [360201, 363201, 366201, ..., 387201, 390201, 393201],
         [360202, 363202, 366202, ..., 387202, 390202, 393202],
         ...,
         [360297, 363297, 366297, ..., 387297, 390297, 393297],
         [360298, 363298, 366298, ..., 387298, 390298, 393298],
         [360299, 363299, 366299, ..., 387299, 390299, 393299]],

        ...,

        [[362700, 365700, 368700, ..., 389700, 392700, 395700],
         [362701, 365701, 368701, ..., 389701, 392701, 395701],
         [362702, 365702, 368702, ..., 389702, 392702, 395702],
         ...,
         [362797, 365797, 368797, ..., 389797, 392797, 395797],
         [362798, 365798, 368798, ..., 389798, 392798, 395798],
         [362799, 365799, 368799, ..., 389799, 392799, 395799]],

        [[362800, 365800, 368800, ..., 389800, 392800, 395800],
         [362801, 365801, 368801, ..., 389801, 392801, 395801],
         [362802, 365802, 368802, ..., 389802, 392802, 395802],
         ...,
         [362897, 365897, 368897, ..., 389897, 392897, 395897],
         [362898, 365898, 368898, ..., 389898, 392898, 395898],
         [362899, 365899, 368899, ..., 389899, 392899, 395899]],

        [[362900, 365900, 368900, ..., 389900, 392900, 395900],
         [362901, 365901, 368901, ..., 389901, 392901, 395901],
         [362902, 365902, 368902, ..., 389902, 392902, 395902],
         ...,
         [362997, 365997, 368997, ..., 389997, 392997, 395997],
         [362998, 365998, 368998, ..., 389998, 392998, 395998],
         [362999, 365999, 368999, ..., 389999, 392999, 395999]]],


       [[[396000, 399000, 402000, ..., 423000, 426000, 429000],
         [396001, 399001, 402001, ..., 423001, 426001, 429001],
         [396002, 399002, 402002, ..., 423002, 426002, 429002],
         ...,
         [396097, 399097, 402097, ..., 423097, 426097, 429097],
         [396098, 399098, 402098, ..., 423098, 426098, 429098],
         [396099, 399099, 402099, ..., 423099, 426099, 429099]],

        [[396100, 399100, 402100, ..., 423100, 426100, 429100],
         [396101, 399101, 402101, ..., 423101, 426101, 429101],
         [396102, 399102, 402102, ..., 423102, 426102, 429102],
         ...,
         [396197, 399197, 402197, ..., 423197, 426197, 429197],
         [396198, 399198, 402198, ..., 423198, 426198, 429198],
         [396199, 399199, 402199, ..., 423199, 426199, 429199]],

        [[396200, 399200, 402200, ..., 423200, 426200, 429200],
         [396201, 399201, 402201, ..., 423201, 426201, 429201],
         [396202, 399202, 402202, ..., 423202, 426202, 429202],
         ...,
         [396297, 399297, 402297, ..., 423297, 426297, 429297],
         [396298, 399298, 402298, ..., 423298, 426298, 429298],
         [396299, 399299, 402299, ..., 423299, 426299, 429299]],

        ...,

        [[398700, 401700, 404700, ..., 425700, 428700, 431700],
         [398701, 401701, 404701, ..., 425701, 428701, 431701],
         [398702, 401702, 404702, ..., 425702, 428702, 431702],
         ...,
         [398797, 401797, 404797, ..., 425797, 428797, 431797],
         [398798, 401798, 404798, ..., 425798, 428798, 431798],
         [398799, 401799, 404799, ..., 425799, 428799, 431799]],

        [[398800, 401800, 404800, ..., 425800, 428800, 431800],
         [398801, 401801, 404801, ..., 425801, 428801, 431801],
         [398802, 401802, 404802, ..., 425802, 428802, 431802],
         ...,
         [398897, 401897, 404897, ..., 425897, 428897, 431897],
         [398898, 401898, 404898, ..., 425898, 428898, 431898],
         [398899, 401899, 404899, ..., 425899, 428899, 431899]],

        [[398900, 401900, 404900, ..., 425900, 428900, 431900],
         [398901, 401901, 404901, ..., 425901, 428901, 431901],
         [398902, 401902, 404902, ..., 425902, 428902, 431902],
         ...,
         [398997, 401997, 404997, ..., 425997, 428997, 431997],
         [398998, 401998, 404998, ..., 425998, 428998, 431998],
         [398999, 401999, 404999, ..., 425999, 428999, 431999]]]])
>>> pool_size = 4
>>> dmax = np.zeros((pooling_backward_dout.size, pool_size))
>>> dmax.shape
(432000, 4)
>>> pooling_backward_dout.flatten()
array([     0,   3000,   6000, ..., 425999, 428999, 431999])
>>>