提交 cac8567b authored 作者: João Victor Risso's avatar João Victor Risso

Remove unused variable theta from GpuDnnTransformerGradI

上级 ff6ac985
...@@ -55,7 +55,6 @@ if ( APPLY_SPECIFIC(dydesc) != NULL ) ...@@ -55,7 +55,6 @@ if ( APPLY_SPECIFIC(dydesc) != NULL )
int int
APPLY_SPECIFIC(dnn_sptf_gi)(PyGpuArrayObject * input, APPLY_SPECIFIC(dnn_sptf_gi)(PyGpuArrayObject * input,
PyGpuArrayObject * theta,
PyGpuArrayObject * grid, PyGpuArrayObject * grid,
PyGpuArrayObject * dy, PyGpuArrayObject * dy,
cudnnSpatialTransformerDescriptor_t desc, cudnnSpatialTransformerDescriptor_t desc,
...@@ -93,15 +92,6 @@ APPLY_SPECIFIC(dnn_sptf_gi)(PyGpuArrayObject * input, ...@@ -93,15 +92,6 @@ APPLY_SPECIFIC(dnn_sptf_gi)(PyGpuArrayObject * input,
return -1; return -1;
} }
if ( theta->ga.typecode != GA_FLOAT &&
theta->ga.typecode != GA_DOUBLE &&
theta->ga.typecode != GA_HALF )
{
PyErr_SetString( PyExc_TypeError,
"GpuDnnTransformerGradI: unsupported data type for theta in spatial transformer gradients." );
return -1;
}
if ( grid->ga.typecode != GA_FLOAT && if ( grid->ga.typecode != GA_FLOAT &&
grid->ga.typecode != GA_DOUBLE && grid->ga.typecode != GA_DOUBLE &&
grid->ga.typecode != GA_HALF ) grid->ga.typecode != GA_HALF )
...@@ -138,7 +128,6 @@ APPLY_SPECIFIC(dnn_sptf_gi)(PyGpuArrayObject * input, ...@@ -138,7 +128,6 @@ APPLY_SPECIFIC(dnn_sptf_gi)(PyGpuArrayObject * input,
cuda_enter( gpu_ctx->ctx ); cuda_enter( gpu_ctx->ctx );
cuda_wait( input->ga.data, GPUARRAY_CUDA_WAIT_READ ); cuda_wait( input->ga.data, GPUARRAY_CUDA_WAIT_READ );
cuda_wait( theta->ga.data, GPUARRAY_CUDA_WAIT_READ );
cuda_wait( grid->ga.data, GPUARRAY_CUDA_WAIT_READ ); cuda_wait( grid->ga.data, GPUARRAY_CUDA_WAIT_READ );
cuda_wait( dy->ga.data, GPUARRAY_CUDA_WAIT_READ ); cuda_wait( dy->ga.data, GPUARRAY_CUDA_WAIT_READ );
cuda_wait( (*input_grad)->ga.data, GPUARRAY_CUDA_WAIT_WRITE ); cuda_wait( (*input_grad)->ga.data, GPUARRAY_CUDA_WAIT_WRITE );
...@@ -151,7 +140,6 @@ APPLY_SPECIFIC(dnn_sptf_gi)(PyGpuArrayObject * input, ...@@ -151,7 +140,6 @@ APPLY_SPECIFIC(dnn_sptf_gi)(PyGpuArrayObject * input,
PyGpuArray_DEV_DATA( *grid_grad ) ); PyGpuArray_DEV_DATA( *grid_grad ) );
cuda_record( input->ga.data, GPUARRAY_CUDA_WAIT_READ ); cuda_record( input->ga.data, GPUARRAY_CUDA_WAIT_READ );
cuda_record( theta->ga.data, GPUARRAY_CUDA_WAIT_READ );
cuda_record( grid->ga.data, GPUARRAY_CUDA_WAIT_READ ); cuda_record( grid->ga.data, GPUARRAY_CUDA_WAIT_READ );
cuda_record( dy->ga.data, GPUARRAY_CUDA_WAIT_READ ); cuda_record( dy->ga.data, GPUARRAY_CUDA_WAIT_READ );
cuda_record( (*input_grad)->ga.data, GPUARRAY_CUDA_WAIT_WRITE ); cuda_record( (*input_grad)->ga.data, GPUARRAY_CUDA_WAIT_WRITE );
......
...@@ -2936,11 +2936,11 @@ class GpuDnnTransformer(DnnBase): ...@@ -2936,11 +2936,11 @@ class GpuDnnTransformer(DnnBase):
return Apply(self, inputs, outputs) return Apply(self, inputs, outputs)
def L_op(self, inputs, outputs, grads): def L_op(self, inputs, outputs, grads):
img, theta, grid_dims, desc = inputs img, _, grid_dims, desc = inputs
_, grid = outputs _, grid = outputs
dy = grads[0] dy = grads[0]
dimg, dgrid = GpuDnnTransformerGradI()(img, theta, grid, dy, desc) dimg, dgrid = GpuDnnTransformerGradI()(img, grid, dy, desc)
dtheta = GpuDnnTransformerGradT()(dgrid, desc) dtheta = GpuDnnTransformerGradT()(dgrid, desc)
dgrid_dims = grad_not_implemented(self, grid_dims, 2) dgrid_dims = grad_not_implemented(self, grid_dims, 2)
...@@ -2956,15 +2956,15 @@ class GpuDnnTransformerGradI(DnnBase): ...@@ -2956,15 +2956,15 @@ class GpuDnnTransformerGradI(DnnBase):
Gradients of inputs of the spatial transformer Gradients of inputs of the spatial transformer
""" """
__props__ = () __props__ = ()
_cop_num_inputs = 5 _cop_num_inputs = 4
_cop_num_outputs = 2 _cop_num_outputs = 2
_f16_ok = True _f16_ok = True
def __init__(self, dtype=theano.config.floatX): def __init__(self, dtype=theano.config.floatX):
DnnBase.__init__(self, ["c_code/dnn_sptf_gi.c"], "APPLY_SPECIFIC(dnn_sptf_gi)") DnnBase.__init__(self, ["c_code/dnn_sptf_gi.c"], "APPLY_SPECIFIC(dnn_sptf_gi)")
def make_node(self, img, theta, grid, dy, desc): def make_node(self, img, grid, dy, desc):
context_name = infer_context_name(img, theta, grid, dy, desc) context_name = infer_context_name(img, grid, dy, desc)
if (not isinstance(desc.type, CDataType) or if (not isinstance(desc.type, CDataType) or
desc.type.ctype != 'cudnnSpatialTransformerDescriptor_t'): desc.type.ctype != 'cudnnSpatialTransformerDescriptor_t'):
...@@ -2974,10 +2974,6 @@ class GpuDnnTransformerGradI(DnnBase): ...@@ -2974,10 +2974,6 @@ class GpuDnnTransformerGradI(DnnBase):
if img.ndim != 4: if img.ndim != 4:
raise TypeError('img must have 4 dimensions.') raise TypeError('img must have 4 dimensions.')
theta = as_gpuarray_variable(gpu_contiguous(theta), context_name)
if theta.ndim != 3:
raise TypeError('theta must have 3 dimensions')
grid = as_gpuarray_variable(gpu_contiguous(grid), context_name) grid = as_gpuarray_variable(gpu_contiguous(grid), context_name)
if img.ndim != grid.ndim: if img.ndim != grid.ndim:
raise TypeError('grid should have the same number of dimensions as img') raise TypeError('grid should have the same number of dimensions as img')
...@@ -2989,25 +2985,24 @@ class GpuDnnTransformerGradI(DnnBase): ...@@ -2989,25 +2985,24 @@ class GpuDnnTransformerGradI(DnnBase):
dimg = img.type() dimg = img.type()
dgrid = grid.type() dgrid = grid.type()
inputs = [img, theta, grid, dy, desc] inputs = [img, grid, dy, desc]
outputs = [dimg, dgrid] outputs = [dimg, dgrid]
return Apply(self, inputs, outputs) return Apply(self, inputs, outputs)
def L_op(self, inputs, outputs, grads): def L_op(self, inputs, outputs, grads):
img, theta, grid, dy, desc = inputs img, grid, dy, desc = inputs
dimg_out, dgrid = outputs dimg_out, dgrid = outputs
grad_cost = grads[0] grad_cost = grads[0]
dimg = dimg_out * grad_cost dimg = dimg_out * grad_cost
dtheta = GpuDnnTransformerGradT()(dgrid, desc) d_dy = grad_not_implemented(self, dy, 2)
d_dy = grad_not_implemented(self, dy, 3)
return [dimg, dtheta, dgrid, d_dy, DisconnectedType()()] return [dimg, dgrid, d_dy, DisconnectedType()()]
def connection_pattern(self, node): def connection_pattern(self, node):
# not connected to desc # not connected to desc
return [[1, 1], [1, 1], [1, 1], [1, 1], [0, 0]] return [[1, 1], [1, 1], [1, 1], [0, 0]]
class GpuDnnTransformerGradT(DnnBase): class GpuDnnTransformerGradT(DnnBase):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论