def test_maxpool(self): # generate flatted images maxpoolshps = ((2, 2), (3, 3), (4, 4), (5, 5), (6, 6)) imval = numpy.random.rand(4, 5, 10, 10) images = tensor.dmatrix() for maxpoolshp in maxpoolshps: # symbolic stuff output, outshp = sp.max_pool(images, imval.shape[1:], maxpoolshp) f = function([images], [output]) output_val = f(imval.reshape(imval.shape[0], -1)) # numeric verification my_output_val = numpy.zeros( (imval.shape[0], imval.shape[1], imval.shape[2] / maxpoolshp[0], imval.shape[3] / maxpoolshp[1]) ) assert numpy.prod(my_output_val.shape[1:]) == numpy.prod(numpy.r_[imval.shape[1], outshp]) for n in range(imval.shape[0]): for k in range(imval.shape[1]): for i in range(imval.shape[2] / maxpoolshp[0]): for j in range(imval.shape[3] / maxpoolshp[1]): ii, jj = i * maxpoolshp[0], j * maxpoolshp[1] patch = imval[n, k, ii : ii + maxpoolshp[0], jj : jj + maxpoolshp[1]] my_output_val[n, k, i, j] = numpy.max(patch) my_output_val = my_output_val.reshape(imval.shape[0], -1) assert numpy.all(output_val == my_output_val) def mp(input): output, outshp = sp.max_pool(input, imval.shape[1:], maxpoolshp) return output utt.verify_grad(mp, [imval.reshape(imval.shape[0], -1)])
def test_maxpool(self): # generate flatted images maxpoolshps = ((2, 2), (3, 3), (4, 4), (5, 5), (6, 6)) imval = numpy.random.rand(4, 5, 10, 10) images = tensor.dmatrix() for maxpoolshp in maxpoolshps: # symbolic stuff output, outshp = sp.max_pool(images, imval.shape[1:], maxpoolshp) f = function([images, ], [output, ]) output_val = f(imval.reshape(imval.shape[0], -1)) # numeric verification my_output_val = numpy.zeros((imval.shape[0], imval.shape[1], imval.shape[2] // maxpoolshp[0], imval.shape[3] // maxpoolshp[1])) assert numpy.prod(my_output_val.shape[1:]) == numpy.prod(numpy.r_[imval.shape[1], outshp]) for n in range(imval.shape[0]): for k in range(imval.shape[1]): for i in range(imval.shape[2] // maxpoolshp[0]): for j in range(imval.shape[3] // maxpoolshp[1]): ii, jj = i*maxpoolshp[0], j*maxpoolshp[1] patch = imval[n, k, ii:ii+maxpoolshp[0], jj:jj+maxpoolshp[1]] my_output_val[n, k, i, j] = numpy.max(patch) my_output_val = my_output_val.reshape(imval.shape[0], -1) assert numpy.all(output_val == my_output_val) def mp(input): output, outshp = sp.max_pool(input, imval.shape[1:], maxpoolshp) return output utt.verify_grad(mp, [imval.reshape(imval.shape[0], -1)])
def mp(input): output, outshp = sp.max_pool(input, imval.shape[1:], maxpoolshp) return output