def run_gradinput(self, inputs_shape, filters_shape, subsample=(1, 1, 1)): inputs_val = numpy.random.random(inputs_shape).astype('float32') filters_val = numpy.random.random(filters_shape).astype('float32') inputs = shared(inputs_val) filters = shared(filters_val) bottom_height = (inputs_shape[1] - 1) * subsample[0] + filters_shape[1] bottom_width = (inputs_shape[2] - 1) * subsample[1] + filters_shape[2] bottom_depth = (inputs_shape[3] - 1) * subsample[2] + filters_shape[3] bottom_shape = theano.shared( numpy.array([bottom_height, bottom_width, bottom_depth])) weight = gpu_contiguous(filters.dimshuffle(0, 4, 1, 2, 3)) top = gpu_contiguous(inputs.dimshuffle(0, 4, 1, 2, 3)) if (subsample == (1, 1, 1)): conv_ref = Corr3dMM_gradInputs(subsample=subsample)(kern=weight, topgrad=top) conv_gemm = GpuCorr3dMM_gradInputs(subsample=subsample)( kern=weight, topgrad=top) else: conv_ref = Corr3dMM_gradInputs(subsample=subsample)( kern=weight, topgrad=top, shape=bottom_shape) conv_gemm = GpuCorr3dMM_gradInputs(subsample=subsample)( kern=weight, topgrad=top, shape=bottom_shape) f_ref = theano.function([], conv_ref) f = theano.function([], conv_gemm, mode=mode_with_gpu) res_ref = f_ref() res = f() utt.assert_allclose(res_ref, res)
def run_gradinput(self, inputs_shape, filters_shape, subsample=(1, 1, 1)): inputs_val = numpy.random.random(inputs_shape).astype('float32') filters_val = numpy.random.random(filters_shape).astype('float32') inputs = shared(inputs_val) filters = shared(filters_val) bias = shared(numpy.zeros(filters_shape[4]).astype('float32')) conv = theano.tensor.nnet.convTransp3D(W=filters, b=bias, d=subsample, H=inputs) f_ref = theano.function([], conv) res_ref = f_ref() # Get bottom shape using convTransp3D bottom_shape = res_ref.shape bottom_val = numpy.random.random(bottom_shape).astype('float32') bottom = shared(bottom_val) weight = gpu_contiguous(filters.dimshuffle(0, 4, 1, 2, 3)) top = gpu_contiguous(inputs.dimshuffle(0, 4, 1, 2, 3)) if (subsample == (1, 1, 1)): conv_gemm = GpuCorr3dMM_gradInputs(subsample=subsample)( kern=weight, topgrad=top) else: conv_gemm = GpuCorr3dMM_gradInputs(subsample=subsample)( kern=weight, topgrad=top, shape=bottom.shape[1:4]) conv_gemm = conv_gemm.dimshuffle(0, 2, 3, 4, 1) f = theano.function([], conv_gemm, mode=mode_with_gpu) res = f() utt.assert_allclose(res_ref, res)