#!/usr/bin/env python # encoding: utf-8 from __future__ import print_function from functions import conv2d_forward, conv2d_backward, avgpool2d_forward, avgpool2d_backward import numpy as np def get_fake_data(): inp = np.array([[[[1, 8, 2, 8, 6, 0], [4, 1, 3, 1, 1, 1], [3, 2, 0, 5, 4, 7], [7, 6, 7, 2, 4, 4], [3, 8, 6, 4, 7, 9], [9, 2, 8, 4, 3, 4]], [[8, 5, 3, 4, 0, 6], [2, 9, 6, 0, 9, 9], [4, 5, 0, 1, 7, 3], [8, 5, 7, 1, 8, 6], [9, 6, 2, 7, 7, 5], [1, 3, 5, 5, 7, 3]], [[1, 3, 3, 5, 0, 8], [1, 7, 9, 0, 9, 9], [7, 5, 2, 3, 5, 3], [8, 1, 8, 8, 0, 2], [9, 4, 2, 7, 7, 3], [3, 3, 4, 9, 1, 7]]], [[[1, 7, 4, 4, 3, 2], [5, 5, 1, 2, 6, 1], [3, 8, 4, 2, 0, 6], [7, 3, 4, 8, 1, 9], [6, 6, 9, 1, 9, 7], [6, 7, 3, 9, 2, 3]], [[9, 6, 8, 0, 2, 8], [9, 7, 5, 4, 1, 4], [6, 6, 8, 4, 5, 7], [6, 9, 2, 5, 4, 9], [7, 6, 0, 4, 9, 4], [1, 4, 1, 0, 4, 2]], [[1, 9, 3, 3, 5, 6], [8, 0, 5, 9, 5, 7], [8, 2, 5, 2, 1, 1], [5, 3, 6, 3, 2, 8], [4, 7, 0, 7, 1, 9], [7, 4, 5, 4, 2, 6]]], [[[3, 7, 6, 1, 9, 8], [9, 3, 7, 1, 4, 6], [4, 4, 0, 0, 6, 3], [5, 7, 2, 3, 0, 3], [8, 4, 3, 8, 5, 3], [8, 5, 7, 7, 2, 2]], [[5, 9, 5, 2, 3, 7], [3, 1, 9, 6, 4, 2], [1, 9, 7, 9, 6, 2], [3, 9, 9, 8, 7, 8], [4, 0, 8, 1, 6, 7], [2, 2, 8, 9, 4, 7]], [[0, 1, 6, 9, 5, 2], [5, 4, 7, 9, 8, 9], [0, 5, 6, 8, 5, 8], [4, 0, 0, 3, 6, 8], [8, 7, 3, 2, 8, 6], [7, 3, 0, 0, 5, 2]]], [[[9, 7, 5, 8, 8, 9], [0, 2, 0, 2, 2, 5], [6, 2, 3, 6, 0, 3], [6, 4, 4, 7, 6, 4], [8, 6, 5, 1, 4, 4], [0, 0, 9, 1, 8, 8]], [[8, 5, 9, 4, 0, 5], [2, 0, 6, 6, 9, 5], [9, 6, 0, 7, 4, 0], [5, 6, 5, 4, 3, 7], [2, 2, 4, 0, 6, 4], [1, 9, 1, 1, 7, 9]], [[4, 2, 0, 3, 3, 9], [8, 4, 8, 4, 7, 2], [8, 3, 4, 6, 3, 1], [7, 1, 0, 2, 4, 6], [1, 1, 3, 9, 9, 1], [8, 2, 6, 3, 5, 4]]]]) w = np.array([[[[7, 4], [0, 9]], [[4, 6], [6, 6]], [[3, 5], [9, 1]]], [[[2, 7], [7, 5]], [[3, 7], [9, 3]], [[2, 2], [1, 3]]], [[[6, 3], [7, 5]], [[7, 2], [2, 2]], [[6, 3], [5, 2]]], [[[0, 7], [3, 3]], [[1, 4], [2, 3]], [[0, 8], [9, 1]]]]) b = np.array([9, 5, 5, 6]) grad_out = np.array([[[[9, 6, 3, 2, 0, 0, 4], [3, 1, 0, 2, 2, 5, 6], [8, 1, 5, 7, 6, 7, 5], [0, 9, 5, 1, 4, 8, 1], [7, 3, 9, 7, 0, 7, 3], [0, 0, 0, 3, 7, 8, 1], [7, 1, 4, 9, 6, 8, 6]], [[8, 8, 7, 0, 7, 6, 7], [4, 2, 2, 3, 5, 2, 1], [3, 9, 3, 3, 9, 4, 5], [6, 8, 3, 7, 3, 8, 2], [9, 3, 8, 6, 4, 3, 4], [6, 8, 5, 1, 0, 3, 1], [4, 2, 8, 5, 4, 5, 4]], [[2, 6, 6, 1, 1, 6, 6], [0, 2, 6, 5, 4, 0, 4], [4, 1, 4, 4, 1, 7, 6], [8, 4, 4, 4, 7, 6, 5], [0, 1, 4, 1, 6, 5, 6], [9, 4, 6, 5, 7, 8, 2], [9, 1, 9, 5, 0, 8, 3]], [[5, 7, 7, 2, 6, 7, 0], [2, 9, 4, 0, 5, 7, 4], [4, 9, 9, 9, 6, 3, 5], [8, 4, 2, 0, 6, 3, 6], [5, 7, 0, 3, 1, 7, 3], [9, 7, 5, 1, 7, 9, 0], [9, 6, 9, 3, 4, 4, 8]]], [[[6, 8, 3, 3, 8, 8, 1], [2, 9, 1, 0, 1, 8, 9], [7, 2, 2, 3, 5, 5, 7], [4, 6, 4, 2, 4, 5, 0], [1, 5, 6, 8, 6, 5, 8], [6, 1, 7, 4, 6, 4, 4], [1, 2, 6, 8, 2, 8, 7]], [[1, 6, 7, 4, 4, 3, 0], [0, 2, 4, 4, 5, 5, 3], [0, 7, 3, 1, 7, 0, 9], [5, 2, 3, 1, 6, 2, 9], [5, 0, 2, 4, 3, 0, 7], [3, 7, 7, 2, 4, 3, 2], [4, 8, 0, 2, 6, 1, 3]], [[4, 3, 0, 2, 9, 9, 1], [7, 7, 2, 9, 7, 2, 1], [1, 3, 4, 4, 1, 4, 6], [0, 5, 0, 9, 3, 7, 8], [7, 1, 7, 8, 1, 6, 4], [5, 3, 4, 5, 3, 7, 4], [5, 4, 8, 7, 3, 3, 3]], [[6, 3, 5, 0, 2, 4, 5], [9, 4, 0, 5, 9, 3, 4], [8, 5, 3, 5, 8, 1, 9], [0, 0, 2, 1, 4, 9, 3], [2, 8, 0, 7, 0, 8, 2], [4, 9, 9, 1, 0, 9, 7], [2, 0, 3, 9, 2, 1, 4]]], [[[5, 3, 1, 7, 9, 5, 5], [0, 3, 4, 2, 9, 3, 5], [2, 2, 4, 5, 5, 6, 5], [0, 9, 6, 3, 2, 3, 5], [6, 6, 9, 3, 8, 5, 1], [7, 4, 0, 6, 8, 5, 2], [7, 3, 8, 8, 2, 6, 8]], [[7, 2, 6, 0, 6, 1, 1], [4, 6, 6, 1, 3, 4, 1], [9, 2, 1, 9, 9, 5, 6], [4, 5, 3, 2, 3, 0, 4], [1, 2, 4, 9, 8, 9, 5], [0, 2, 6, 2, 3, 1, 8], [9, 6, 5, 0, 8, 8, 7]], [[7, 8, 6, 8, 0, 0, 2], [6, 0, 3, 6, 3, 7, 7], [4, 3, 4, 6, 4, 3, 4], [3, 4, 2, 8, 4, 4, 4], [7, 0, 5, 3, 9, 6, 3], [5, 3, 4, 5, 6, 1, 1], [3, 7, 2, 2, 5, 2, 9]], [[3, 4, 1, 2, 3, 3, 9], [1, 9, 2, 0, 2, 2, 2], [8, 4, 9, 8, 9, 5, 0], [8, 2, 8, 1, 7, 0, 2], [6, 3, 7, 4, 6, 4, 2], [9, 6, 7, 8, 0, 5, 7], [6, 1, 6, 3, 4, 7, 7]]], [[[2, 1, 9, 1, 1, 4, 3], [2, 5, 9, 2, 5, 2, 2], [5, 5, 3, 7, 0, 8, 5], [7, 7, 5, 9, 7, 2, 9], [3, 6, 8, 3, 0, 4, 0], [0, 3, 4, 9, 9, 7, 1], [1, 1, 2, 9, 6, 9, 0]], [[8, 2, 9, 8, 4, 1, 8], [2, 2, 5, 6, 7, 0, 9], [7, 4, 3, 8, 7, 4, 2], [6, 5, 6, 1, 6, 2, 6], [2, 9, 4, 6, 1, 4, 0], [7, 2, 6, 3, 9, 6, 6], [9, 7, 0, 7, 6, 7, 1]], [[0, 4, 6, 8, 1, 3, 5], [8, 5, 9, 9, 2, 2, 6], [4, 6, 3, 5, 0, 9, 2], [1, 8, 5, 9, 3, 4, 4], [6, 0, 7, 8, 6, 7, 5], [0, 1, 0, 7, 3, 5, 2], [9, 2, 8, 3, 1, 0, 4]], [[9, 5, 8, 5, 6, 8, 4], [8, 4, 4, 0, 4, 4, 1], [0, 7, 2, 5, 7, 6, 9], [5, 4, 2, 7, 3, 8, 8], [7, 4, 5, 7, 7, 5, 5], [6, 3, 9, 3, 8, 1, 4], [3, 6, 0, 5, 9, 4, 6]]]]) return inp, w, b, grad_out def get_conv_answer(): out = np.array([[[[ 67., 171., 105., 155., 132., 53., 117.], [ 115., 219., 324., 251., 192., 334., 192.], [ 100., 281., 243., 157., 235., 353., 124.], [ 199., 335., 220., 202., 302., 263., 133.], [ 215., 420., 324., 279., 332., 350., 124.], [ 210., 253., 298., 299., 372., 300., 182.], [ 66., 126., 126., 188., 143., 130., 70.]], [[ 37., 149., 137., 116., 132., 89., 67.], [ 99., 230., 238., 207., 151., 231., 136.], [ 97., 209., 199., 93., 198., 289., 131.], [ 151., 273., 206., 214., 186., 264., 118.], [ 195., 319., 304., 217., 287., 299., 146.], [ 164., 265., 218., 285., 281., 293., 106.], [ 81., 73., 123., 125., 118., 97., 36.]], [[ 28., 89., 108., 98., 124., 75., 57.], [ 53., 190., 232., 186., 177., 188., 165.], [ 61., 185., 217., 165., 155., 290., 198.], [ 110., 271., 210., 174., 193., 224., 136.], [ 117., 326., 267., 280., 240., 274., 171.], [ 112., 290., 240., 248., 290., 264., 181.], [ 43., 105., 102., 161., 144., 117., 92.]], [[ 34., 76., 85., 86., 101., 50., 90.], [ 72., 176., 181., 226., 94., 235., 114.], [ 78., 213., 195., 58., 203., 234., 69.], [ 152., 227., 114., 193., 219., 158., 51.], [ 196., 238., 250., 175., 205., 225., 76.], [ 168., 201., 160., 226., 280., 180., 92.], [ 97., 57., 117., 131., 68., 109., 9.]]], [[[ 73., 180., 213., 123., 80., 138., 111.], [ 179., 377., 274., 235., 265., 230., 160.], [ 194., 384., 274., 265., 194., 269., 104.], [ 201., 321., 319., 297., 172., 288., 208.], [ 198., 353., 313., 180., 355., 327., 237.], [ 162., 346., 230., 271., 228., 295., 167.], [ 74., 148., 129., 105., 126., 99., 56.]], [[ 40., 174., 170., 137., 72., 101., 97.], [ 153., 315., 278., 183., 171., 203., 95.], [ 176., 289., 259., 225., 168., 179., 139.], [ 152., 306., 286., 209., 189., 256., 192.], [ 169., 315., 246., 229., 206., 384., 160.], [ 158., 261., 234., 164., 256., 238., 94.], [ 68., 119., 77., 95., 77., 72., 29.]], [[ 30., 100., 153., 90., 77., 93., 65.], [ 88., 272., 254., 202., 184., 203., 159.], [ 105., 304., 236., 208., 178., 171., 142.], [ 107., 280., 240., 253., 168., 185., 217.], [ 105., 287., 272., 212., 238., 267., 272.], [ 95., 295., 256., 192., 234., 247., 184.], [ 46., 131., 125., 99., 103., 88., 73.]], [[ 37., 84., 159., 76., 65., 100., 82.], [ 107., 301., 148., 151., 196., 189., 88.], [ 176., 215., 175., 206., 144., 145., 51.], [ 159., 225., 190., 172., 116., 180., 130.], [ 162., 204., 219., 157., 179., 269., 125.], [ 136., 255., 157., 172., 200., 205., 77.], [ 108., 104., 75., 102., 52., 87., 8.]]], [[[ 66., 157., 162., 123., 206., 188., 69.], [ 155., 237., 347., 321., 315., 354., 192.], [ 130., 238., 310., 358., 368., 286., 170.], [ 98., 307., 286., 281., 277., 333., 182.], [ 171., 289., 297., 289., 256., 338., 182.], [ 196., 291., 283., 284., 272., 307., 136.], [ 88., 141., 137., 172., 151., 114., 57.]], [[ 35., 136., 199., 136., 108., 167., 126.], [ 130., 265., 254., 270., 251., 286., 115.], [ 122., 177., 301., 247., 267., 261., 88.], [ 86., 245., 278., 260., 277., 228., 134.], [ 145., 285., 206., 264., 236., 282., 141.], [ 172., 212., 225., 291., 288., 223., 123.], [ 89., 96., 132., 155., 98., 98., 34.]], [[ 30., 91., 129., 114., 122., 157., 85.], [ 85., 219., 272., 283., 235., 282., 205.], [ 75., 211., 211., 272., 261., 268., 174.], [ 58., 195., 249., 201., 239., 241., 162.], [ 102., 257., 234., 212., 250., 267., 192.], [ 119., 292., 210., 247., 218., 241., 146.], [ 54., 137., 104., 142., 139., 101., 78.]], [[ 30., 74., 93., 106., 135., 131., 62.], [ 88., 198., 227., 230., 251., 234., 116.], [ 136., 124., 250., 221., 251., 230., 93.], [ 66., 216., 163., 173., 200., 214., 105.], [ 129., 217., 176., 173., 175., 265., 91.], [ 179., 209., 174., 175., 192., 197., 51.], [ 126., 75., 89., 99., 85., 68., 13.]]], [[[ 142., 188., 156., 162., 135., 156., 120.], [ 133., 290., 238., 317., 288., 379., 167.], [ 177., 252., 205., 259., 279., 219., 79.], [ 218., 336., 199., 257., 254., 189., 129.], [ 183., 237., 203., 188., 304., 341., 116.], [ 72., 251., 286., 196., 292., 350., 146.], [ 55., 101., 123., 119., 128., 214., 113.]], [[ 86., 200., 153., 182., 149., 151., 122.], [ 162., 191., 196., 234., 231., 291., 138.], [ 116., 217., 173., 197., 258., 181., 56.], [ 192., 257., 180., 248., 222., 178., 110.], [ 145., 232., 203., 215., 187., 249., 111.], [ 104., 137., 243., 153., 208., 310., 168.], [ 28., 91., 118., 58., 131., 179., 56.]], [[ 74., 153., 117., 112., 130., 149., 123.], [ 80., 238., 189., 221., 220., 241., 203.], [ 97., 213., 141., 222., 228., 193., 108.], [ 119., 300., 173., 182., 254., 177., 101.], [ 100., 246., 189., 180., 225., 245., 155.], [ 54., 162., 180., 219., 204., 309., 157.], [ 31., 84., 127., 116., 89., 186., 140.]], [[ 61., 123., 97., 78., 92., 108., 124.], [ 147., 185., 150., 223., 184., 280., 54.], [ 131., 189., 152., 172., 219., 131., 29.], [ 188., 199., 125., 181., 131., 138., 86.], [ 155., 133., 121., 154., 219., 243., 42.], [ 89., 169., 155., 181., 212., 202., 88.], [ 74., 59., 130., 42., 131., 137., 15.]]]]) grad_inp = np.array([[[[ 342., 384., 236., 195., 292., 323.], [ 232., 322., 303., 326., 344., 302.], [ 441., 359., 295., 354., 416., 387.], [ 349., 396., 334., 290., 349., 396.], [ 344., 315., 340., 312., 338., 364.], [ 370., 334., 380., 287., 417., 362.]], [[ 318., 312., 184., 196., 229., 281.], [ 222., 254., 248., 277., 329., 296.], [ 366., 338., 289., 360., 365., 353.], [ 360., 324., 304., 265., 326., 309.], [ 300., 338., 308., 244., 310., 296.], [ 304., 278., 304., 255., 373., 299.]], [[ 255., 303., 180., 143., 219., 239.], [ 236., 231., 234., 276., 310., 278.], [ 300., 338., 298., 246., 341., 296.], [ 301., 278., 172., 276., 261., 302.], [ 288., 260., 251., 176., 369., 280.], [ 291., 261., 296., 298., 376., 212.]]], [[[ 370., 316., 219., 303., 440., 335.], [ 288., 325., 254., 312., 341., 298.], [ 304., 228., 233., 254., 316., 384.], [ 225., 283., 301., 333., 302., 433.], [ 233., 349., 418., 301., 277., 359.], [ 318., 356., 368., 297., 335., 304.]], [[ 336., 300., 230., 283., 340., 260.], [ 278., 267., 187., 237., 327., 315.], [ 283., 194., 211., 255., 289., 374.], [ 201., 250., 251., 288., 269., 337.], [ 227., 307., 363., 271., 258., 341.], [ 272., 350., 312., 282., 262., 265.]], [[ 319., 239., 151., 288., 350., 217.], [ 319., 165., 198., 269., 298., 275.], [ 184., 169., 219., 237., 244., 385.], [ 173., 235., 223., 275., 285., 279.], [ 272., 265., 384., 196., 271., 301.], [ 231., 312., 265., 267., 270., 261.]]], [[[ 292., 351., 267., 280., 287., 261.], [ 297., 266., 323., 335., 428., 324.], [ 344., 274., 397., 363., 343., 270.], [ 268., 351., 361., 388., 348., 273.], [ 291., 274., 422., 443., 406., 295.], [ 385., 330., 327., 295., 323., 413.]], [[ 217., 279., 234., 277., 290., 245.], [ 271., 255., 259., 339., 349., 270.], [ 262., 255., 369., 334., 298., 252.], [ 267., 318., 311., 332., 315., 267.], [ 268., 286., 361., 388., 355., 247.], [ 354., 275., 287., 298., 283., 397.]], [[ 203., 224., 254., 220., 238., 267.], [ 271., 198., 254., 316., 283., 270.], [ 258., 275., 347., 294., 285., 177.], [ 273., 296., 274., 298., 273., 222.], [ 268., 305., 257., 398., 263., 193.], [ 306., 213., 326., 257., 244., 309.]]], [[[ 313., 387., 513., 295., 233., 293.], [ 313., 362., 419., 316., 344., 328.], [ 406., 356., 379., 411., 307., 399.], [ 369., 444., 394., 389., 335., 296.], [ 285., 293., 493., 386., 403., 279.], [ 231., 283., 299., 437., 454., 328.]], [[ 244., 386., 433., 248., 218., 275.], [ 292., 325., 328., 309., 281., 302.], [ 360., 314., 372., 345., 308., 322.], [ 315., 396., 362., 360., 258., 308.], [ 283., 272., 390., 301., 357., 223.], [ 227., 278., 281., 430., 396., 301.]], [[ 262., 379., 344., 208., 240., 225.], [ 250., 332., 228., 256., 254., 230.], [ 345., 257., 312., 297., 317., 335.], [ 305., 290., 403., 293., 284., 322.], [ 208., 263., 354., 297., 341., 202.], [ 191., 264., 270., 356., 311., 214.]]]]) grad_w = np.array([[[[ 2885., 3012.], [ 2873., 2852.]], [[ 3303., 3335.], [ 2992., 3215.]], [[ 3111., 3070.], [ 2846., 2771.]]], [[[ 2635., 2698.], [ 2862., 2756.]], [[ 3032., 3084.], [ 2990., 2990.]], [[ 2916., 2794.], [ 2710., 2650.]]], [[[ 2703., 2921.], [ 2794., 2798.]], [[ 3271., 2913.], [ 3044., 3044.]], [[ 2748., 2933.], [ 2769., 2881.]]], [[[ 2728., 3257.], [ 2907., 3043.]], [[ 3260., 3458.], [ 3125., 3379.]], [[ 2980., 3065.], [ 2763., 3173.]]]]) grad_b = np.array([876, 857, 852, 922]) return out, grad_inp, grad_w, grad_b def get_pool_data_answer(): pool_inp = np.array([[[[1, 8, 2, 8, 6, 0], [4, 1, 3, 1, 1, 1], [3, 2, 0, 5, 4, 7], [7, 6, 7, 2, 4, 4], [3, 8, 6, 4, 7, 9], [9, 2, 8, 4, 3, 4]], [[8, 5, 3, 4, 0, 6], [2, 9, 6, 0, 9, 9], [4, 5, 0, 1, 7, 3], [8, 5, 7, 1, 8, 6], [9, 6, 2, 7, 7, 5], [1, 3, 5, 5, 7, 3]], [[1, 3, 3, 5, 0, 8], [1, 7, 9, 0, 9, 9], [7, 5, 2, 3, 5, 3], [8, 1, 8, 8, 0, 2], [9, 4, 2, 7, 7, 3], [3, 3, 4, 9, 1, 7]]], [[[1, 7, 4, 4, 3, 2], [5, 5, 1, 2, 6, 1], [3, 8, 4, 2, 0, 6], [7, 3, 4, 8, 1, 9], [6, 6, 9, 1, 9, 7], [6, 7, 3, 9, 2, 3]], [[9, 6, 8, 0, 2, 8], [9, 7, 5, 4, 1, 4], [6, 6, 8, 4, 5, 7], [6, 9, 2, 5, 4, 9], [7, 6, 0, 4, 9, 4], [1, 4, 1, 0, 4, 2]], [[1, 9, 3, 3, 5, 6], [8, 0, 5, 9, 5, 7], [8, 2, 5, 2, 1, 1], [5, 3, 6, 3, 2, 8], [4, 7, 0, 7, 1, 9], [7, 4, 5, 4, 2, 6]]], [[[3, 7, 6, 1, 9, 8], [9, 3, 7, 1, 4, 6], [4, 4, 0, 0, 6, 3], [5, 7, 2, 3, 0, 3], [8, 4, 3, 8, 5, 3], [8, 5, 7, 7, 2, 2]], [[5, 9, 5, 2, 3, 7], [3, 1, 9, 6, 4, 2], [1, 9, 7, 9, 6, 2], [3, 9, 9, 8, 7, 8], [4, 0, 8, 1, 6, 7], [2, 2, 8, 9, 4, 7]], [[0, 1, 6, 9, 5, 2], [5, 4, 7, 9, 8, 9], [0, 5, 6, 8, 5, 8], [4, 0, 0, 3, 6, 8], [8, 7, 3, 2, 8, 6], [7, 3, 0, 0, 5, 2]]], [[[9, 7, 5, 8, 8, 9], [0, 2, 0, 2, 2, 5], [6, 2, 3, 6, 0, 3], [6, 4, 4, 7, 6, 4], [8, 6, 5, 1, 4, 4], [0, 0, 9, 1, 8, 8]], [[8, 5, 9, 4, 0, 5], [2, 0, 6, 6, 9, 5], [9, 6, 0, 7, 4, 0], [5, 6, 5, 4, 3, 7], [2, 2, 4, 0, 6, 4], [1, 9, 1, 1, 7, 9]], [[4, 2, 0, 3, 3, 9], [8, 4, 8, 4, 7, 2], [8, 3, 4, 6, 3, 1], [7, 1, 0, 2, 4, 6], [1, 1, 3, 9, 9, 1], [8, 2, 6, 3, 5, 4]]]]) pool_out = np.array([[[[ 0.25, 2.5 , 3.5 , 0. ], [ 1.75, 1.5 , 2.75, 2. ], [ 2.5 , 6.75, 4.25, 3.25], [ 2.25, 2.5 , 1.75, 1. ]], [[ 2. , 2. , 1. , 1.5 ], [ 1.5 , 5. , 4.25, 3. ], [ 4.25, 5. , 5.75, 2.75], [ 0.25, 2. , 3. , 0.75]], [[ 0.25, 1.5 , 1.25, 2. ], [ 2. , 5.75, 4.25, 3. ], [ 4.25, 3.75, 5.5 , 1.25], [ 0.75, 1.75, 2.5 , 1.75]]], [[[ 0.25, 2.75, 1.75, 0.5 ], [ 2. , 4.5 , 2.5 , 1.75], [ 3.25, 5.5 , 4.75, 4. ], [ 1.5 , 2.5 , 2.75, 0.75]], [[ 2.25, 3.5 , 0.5 , 2. ], [ 3.75, 6.5 , 3.5 , 2.75], [ 3.25, 4.25, 5.5 , 3.25], [ 0.25, 1.25, 1. , 0.5 ]], [[ 0.25, 3. , 2. , 1.5 ], [ 4. , 3. , 4.25, 2. ], [ 2.25, 4. , 3.25, 4.25], [ 1.75, 2.25, 1.5 , 1.5 ]]], [[[ 0.75, 3.25, 2.5 , 2. ], [ 3.25, 3.5 , 2.75, 2.25], [ 3.25, 4. , 4. , 1.5 ], [ 2. , 3. , 2.25, 0.5 ]], [[ 1.25, 3.5 , 1.25, 1.75], [ 1. , 6.5 , 6.25, 1. ], [ 1.75, 6.5 , 5.5 , 3.75], [ 0.5 , 2.5 , 3.25, 1.75]], [[ 0. , 1.75, 3.5 , 0.5 ], [ 1.25, 5.5 , 7.5 , 4.25], [ 3. , 2.5 , 4.75, 3.5 ], [ 1.75, 0.75, 1.25, 0.5 ]]], [[[ 2.25, 3. , 4. , 2.25], [ 1.5 , 1.75, 2.5 , 2. ], [ 3.5 , 4.75, 4.5 , 2. ], [ 0. , 2.25, 2.25, 2. ]], [[ 2. , 3.5 , 1. , 1.25], [ 2.75, 3. , 6.5 , 1.25], [ 1.75, 4.25, 3.25, 2.75], [ 0.25, 2.5 , 2. , 2.25]], [[ 1. , 0.5 , 1.5 , 2.25], [ 4. , 4.75, 5. , 0.75], [ 2. , 1.25, 6. , 1.75], [ 2. , 2. , 2. , 1. ]]]]) grad_pool_out = np.array([[[[1, 5, 0, 1], [2, 4, 8, 8], [6, 8, 1, 4], [7, 4, 2, 3]], [[6, 1, 1, 6], [7, 8, 8, 0], [4, 3, 7, 6], [2, 6, 2, 2]], [[5, 3, 3, 9], [4, 4, 6, 0], [4, 5, 1, 4], [7, 4, 9, 2]]], [[[1, 3, 0, 3], [1, 8, 1, 7], [9, 3, 4, 5], [0, 1, 5, 3]], [[7, 6, 8, 8], [4, 8, 3, 9], [4, 0, 7, 8], [1, 9, 8, 6]], [[5, 2, 1, 6], [4, 4, 9, 6], [8, 7, 4, 3], [4, 1, 4, 6]]], [[[4, 5, 3, 9], [0, 7, 4, 8], [0, 5, 7, 7], [5, 9, 8, 6]], [[1, 8, 7, 1], [6, 6, 4, 7], [6, 1, 9, 5], [3, 6, 5, 4]], [[8, 3, 8, 7], [0, 6, 8, 8], [5, 4, 8, 0], [5, 7, 5, 6]]], [[[6, 9, 2, 8], [6, 7, 3, 8], [3, 0, 5, 1], [0, 9, 3, 1]], [[8, 8, 2, 6], [0, 6, 5, 2], [6, 0, 2, 8], [4, 4, 5, 3]], [[6, 2, 0, 8], [5, 1, 4, 9], [4, 7, 0, 7], [9, 5, 3, 0]]]]) grad_pool_inp = np.array([[[[ 0.25, 1.25, 1.25, 0. , 0. , 0.25], [ 0.5 , 1. , 1. , 2. , 2. , 2. ], [ 0.5 , 1. , 1. , 2. , 2. , 2. ], [ 1.5 , 2. , 2. , 0.25, 0.25, 1. ], [ 1.5 , 2. , 2. , 0.25, 0.25, 1. ], [ 1.75, 1. , 1. , 0.5 , 0.5 , 0.75]], [[ 1.5 , 0.25, 0.25, 0.25, 0.25, 1.5 ], [ 1.75, 2. , 2. , 2. , 2. , 0. ], [ 1.75, 2. , 2. , 2. , 2. , 0. ], [ 1. , 0.75, 0.75, 1.75, 1.75, 1.5 ], [ 1. , 0.75, 0.75, 1.75, 1.75, 1.5 ], [ 0.5 , 1.5 , 1.5 , 0.5 , 0.5 , 0.5 ]], [[ 1.25, 0.75, 0.75, 0.75, 0.75, 2.25], [ 1. , 1. , 1. , 1.5 , 1.5 , 0. ], [ 1. , 1. , 1. , 1.5 , 1.5 , 0. ], [ 1. , 1.25, 1.25, 0.25, 0.25, 1. ], [ 1. , 1.25, 1.25, 0.25, 0.25, 1. ], [ 1.75, 1. , 1. , 2.25, 2.25, 0.5 ]]], [[[ 0.25, 0.75, 0.75, 0. , 0. , 0.75], [ 0.25, 2. , 2. , 0.25, 0.25, 1.75], [ 0.25, 2. , 2. , 0.25, 0.25, 1.75], [ 2.25, 0.75, 0.75, 1. , 1. , 1.25], [ 2.25, 0.75, 0.75, 1. , 1. , 1.25], [ 0. , 0.25, 0.25, 1.25, 1.25, 0.75]], [[ 1.75, 1.5 , 1.5 , 2. , 2. , 2. ], [ 1. , 2. , 2. , 0.75, 0.75, 2.25], [ 1. , 2. , 2. , 0.75, 0.75, 2.25], [ 1. , 0. , 0. , 1.75, 1.75, 2. ], [ 1. , 0. , 0. , 1.75, 1.75, 2. ], [ 0.25, 2.25, 2.25, 2. , 2. , 1.5 ]], [[ 1.25, 0.5 , 0.5 , 0.25, 0.25, 1.5 ], [ 1. , 1. , 1. , 2.25, 2.25, 1.5 ], [ 1. , 1. , 1. , 2.25, 2.25, 1.5 ], [ 2. , 1.75, 1.75, 1. , 1. , 0.75], [ 2. , 1.75, 1.75, 1. , 1. , 0.75], [ 1. , 0.25, 0.25, 1. , 1. , 1.5 ]]], [[[ 1. , 1.25, 1.25, 0.75, 0.75, 2.25], [ 0. , 1.75, 1.75, 1. , 1. , 2. ], [ 0. , 1.75, 1.75, 1. , 1. , 2. ], [ 0. , 1.25, 1.25, 1.75, 1.75, 1.75], [ 0. , 1.25, 1.25, 1.75, 1.75, 1.75], [ 1.25, 2.25, 2.25, 2. , 2. , 1.5 ]], [[ 0.25, 2. , 2. , 1.75, 1.75, 0.25], [ 1.5 , 1.5 , 1.5 , 1. , 1. , 1.75], [ 1.5 , 1.5 , 1.5 , 1. , 1. , 1.75], [ 1.5 , 0.25, 0.25, 2.25, 2.25, 1.25], [ 1.5 , 0.25, 0.25, 2.25, 2.25, 1.25], [ 0.75, 1.5 , 1.5 , 1.25, 1.25, 1. ]], [[ 2. , 0.75, 0.75, 2. , 2. , 1.75], [ 0. , 1.5 , 1.5 , 2. , 2. , 2. ], [ 0. , 1.5 , 1.5 , 2. , 2. , 2. ], [ 1.25, 1. , 1. , 2. , 2. , 0. ], [ 1.25, 1. , 1. , 2. , 2. , 0. ], [ 1.25, 1.75, 1.75, 1.25, 1.25, 1.5 ]]], [[[ 1.5 , 2.25, 2.25, 0.5 , 0.5 , 2. ], [ 1.5 , 1.75, 1.75, 0.75, 0.75, 2. ], [ 1.5 , 1.75, 1.75, 0.75, 0.75, 2. ], [ 0.75, 0. , 0. , 1.25, 1.25, 0.25], [ 0.75, 0. , 0. , 1.25, 1.25, 0.25], [ 0. , 2.25, 2.25, 0.75, 0.75, 0.25]], [[ 2. , 2. , 2. , 0.5 , 0.5 , 1.5 ], [ 0. , 1.5 , 1.5 , 1.25, 1.25, 0.5 ], [ 0. , 1.5 , 1.5 , 1.25, 1.25, 0.5 ], [ 1.5 , 0. , 0. , 0.5 , 0.5 , 2. ], [ 1.5 , 0. , 0. , 0.5 , 0.5 , 2. ], [ 1. , 1. , 1. , 1.25, 1.25, 0.75]], [[ 1.5 , 0.5 , 0.5 , 0. , 0. , 2. ], [ 1.25, 0.25, 0.25, 1. , 1. , 2.25], [ 1.25, 0.25, 0.25, 1. , 1. , 2.25], [ 1. , 1.75, 1.75, 0. , 0. , 1.75], [ 1. , 1.75, 1.75, 0. , 0. , 1.75], [ 2.25, 1.25, 1.25, 0.75, 0.75, 0. ]]]]) return pool_inp, pool_out, grad_pool_out, grad_pool_inp inp, w, b, grad_out = get_fake_data() out, grad_inp, grad_w, grad_b = get_conv_answer() pool_inp, pool_out, grad_pool_out, grad_pool_inp = get_pool_data_answer() try: test_conv_out = conv2d_forward(inp, w, b, 2, 1) except: print('[FAILED] conv2d_forward: bug in codes, can not run for inp.shape = (4, 3, 6, 6), w.shape = (4, 3, 2, 2), ker_size = 2, pad = 1') else: if test_conv_out.shape != out.shape: print('[ERROR] conv2d_forward: output shape is not correct') else: diff = test_conv_out - out if abs(diff).max() > 1e-5: print('[ERROR] conv2d_forward: output value is not correct') else: print('[PASS] conv2d_forward: all correct') flag = 1 try: test_grad_inp, test_grad_w, test_grad_b = conv2d_backward(inp, grad_out, w, b, 2, 1) except: print('[FAILED] conv2d_backward: bug in codes, can not run for inp.shape = (4, 3, 6, 6), grad.shape = (4, 4, 7, 7), w.shape = (4, 3, 2, 2), ker_size = 2, pad = 1') flag = 0 else: if test_grad_inp.shape != grad_inp.shape: print('[ERROR] conv2d_backward: grad_input shape is not correct') flag = 0 else: diff = test_grad_inp - grad_inp if abs(diff).max() > 1e-5: print('[ERROR] conv2d_backward: grad_input value is not correct') flag = 0 if test_grad_w.shape != grad_w.shape: print('[ERROR] conv2d_backward: grad_w shape is not correct') flag = 0 else: diff = test_grad_w - grad_w if abs(diff).max() > 1e-5: print('[ERROR] conv2d_backward: grad_w value is not correct') flag = 0 if test_grad_b.shape != grad_b.shape: print('[ERROR] conv2d_backward: grad_b shape is not correct') flag = 0 else: diff = test_grad_b - grad_b if abs(diff).max() > 1e-5: print('[ERROR] conv2d_backward: grad_b value is not correct') flag = 0 finally: if flag: print('[PASS] conv2d_backward: all correct') try: test_pool_out = avgpool2d_forward(pool_inp, 2, 1) except: print('[FAILED] avgpool2d_forward: bug in codes, can not run for inp.shape = (4, 3, 6, 6), ker_size = 2, pad = 1') else: if test_pool_out.shape != pool_out.shape: print('[ERROR] avgpool2d_forward: output shape is not correct') else: diff = test_pool_out - pool_out if abs(diff).max() > 1e-5: print('[ERROR] avgpool2d_forward: output value is not correct') else: print('[PASS] avgpool2d_forward: all correct') try: test_grad_pool_inp = avgpool2d_backward(pool_inp, grad_pool_out, 2, 1) except: print('[FAILED] avgpool2d_backward: bug in codes, can not run for inp.shape = (4, 3, 6, 6), grad.shape = (4, 3, 4, 4), ker_size = 2, pad = 1') else: if test_grad_pool_inp.shape != grad_pool_inp.shape: print('[ERROR] avgpool2d_backward: grad input shape is not correct') else: diff = test_grad_pool_inp - grad_pool_inp if abs(diff).max() > 1e-5: print('[ERROR] avgpool2d_backward: grad input value is not correct') else: print('[PASS] avgpool2d_backward: all correct')