提交 0ace4aec authored 作者: Frederic's avatar Frederic

Don't enable the GPU version of conv3d ops, as they aren't tested and bugged and VERY slow!

上级 015b42a4
...@@ -7,7 +7,7 @@ from theano.sandbox.cuda.basic_ops import (as_cuda_ndarray_variable, ...@@ -7,7 +7,7 @@ from theano.sandbox.cuda.basic_ops import (as_cuda_ndarray_variable,
host_from_gpu, HostFromGpu) host_from_gpu, HostFromGpu)
from theano.misc import strutil from theano.misc import strutil
from theano.tensor.nnet.Conv3D import Conv3D from theano.tensor.nnet.Conv3D import Conv3D
from theano.sandbox.cuda.opt import register_opt from theano.sandbox.cuda.opt import gpu_optimizer
from theano.sandbox.cuda import CudaNdarrayType, GpuOp from theano.sandbox.cuda import CudaNdarrayType, GpuOp
...@@ -288,7 +288,6 @@ conv_rows_stack( float* img, float* kern, float* bias, float* out, ...@@ -288,7 +288,6 @@ conv_rows_stack( float* img, float* kern, float* bias, float* out,
gpu_convd = GpuConv3D() gpu_convd = GpuConv3D()
@register_opt()
@local_optimizer([Conv3D]) @local_optimizer([Conv3D])
def local_gpu_conv3d(node): def local_gpu_conv3d(node):
if isinstance(node.op, Conv3D): if isinstance(node.op, Conv3D):
...@@ -300,3 +299,5 @@ def local_gpu_conv3d(node): ...@@ -300,3 +299,5 @@ def local_gpu_conv3d(node):
as_cuda_ndarray_variable(W), as_cuda_ndarray_variable(W),
as_cuda_ndarray_variable(b), as_cuda_ndarray_variable(b),
d))] d))]
# Not enabled by default as we don't want people to use it.
gpu_optimizer.register("local_gpu_conv3d", local_gpu_conv3d)
...@@ -7,7 +7,7 @@ from theano.sandbox.cuda.basic_ops import as_cuda_ndarray_variable ...@@ -7,7 +7,7 @@ from theano.sandbox.cuda.basic_ops import as_cuda_ndarray_variable
from theano.misc import strutil from theano.misc import strutil
from theano.tensor.nnet.ConvGrad3D import ConvGrad3D from theano.tensor.nnet.ConvGrad3D import ConvGrad3D
from theano.sandbox.cuda.opt import register_opt from theano.sandbox.cuda.opt import gpu_optimizer
from theano.sandbox.cuda import (CudaNdarrayType, HostFromGpu, from theano.sandbox.cuda import (CudaNdarrayType, HostFromGpu,
host_from_gpu, GpuOp) host_from_gpu, GpuOp)
...@@ -341,9 +341,8 @@ convgrad_rows_stack( float* img, float* dCdH, float* dCdW, ...@@ -341,9 +341,8 @@ convgrad_rows_stack( float* img, float* dCdH, float* dCdW,
gpu_conv_grad3d = GpuConvGrad3D() gpu_conv_grad3d = GpuConvGrad3D()
@register_opt()
@local_optimizer([ConvGrad3D]) @local_optimizer([ConvGrad3D])
def local_gpu_conv_gradd(node): def local_gpu_conv_grad3d(node):
if isinstance(node.op, ConvGrad3D): if isinstance(node.op, ConvGrad3D):
if numpy.any([i.owner and isinstance(i.owner.op, HostFromGpu) if numpy.any([i.owner and isinstance(i.owner.op, HostFromGpu)
for i in node.inputs]): for i in node.inputs]):
...@@ -354,3 +353,5 @@ def local_gpu_conv_gradd(node): ...@@ -354,3 +353,5 @@ def local_gpu_conv_gradd(node):
d, d,
WShape, WShape,
as_cuda_ndarray_variable(dCdH)))] as_cuda_ndarray_variable(dCdH)))]
# Not enabled by default as we don't want people to use it.
gpu_optimizer.register("local_gpu_conv_grad3d", local_gpu_conv_grad3d)
...@@ -8,7 +8,7 @@ from theano.tensor.nnet.ConvTransp3D import ConvTransp3D ...@@ -8,7 +8,7 @@ from theano.tensor.nnet.ConvTransp3D import ConvTransp3D
from theano.gof import local_optimizer from theano.gof import local_optimizer
from theano.sandbox.cuda.basic_ops import as_cuda_ndarray_variable from theano.sandbox.cuda.basic_ops import as_cuda_ndarray_variable
from theano.sandbox.cuda.opt import register_opt from theano.sandbox.cuda.opt import gpu_optimizer
from theano.sandbox.cuda import (CudaNdarrayType, HostFromGpu, from theano.sandbox.cuda import (CudaNdarrayType, HostFromGpu,
host_from_gpu, GpuOp) host_from_gpu, GpuOp)
...@@ -347,15 +347,16 @@ conv_transp_rows_stack( float* H, float* kern, float* bias, float* R, ...@@ -347,15 +347,16 @@ conv_transp_rows_stack( float* H, float* kern, float* bias, float* R,
gpu_conv_transpd = GpuConvTransp3D() gpu_conv_transpd = GpuConvTransp3D()
@register_opt()
@local_optimizer([ConvTransp3D]) @local_optimizer([ConvTransp3D])
def local_gpu_conv_transpd(node): def local_gpu_conv_transp3d(node):
if isinstance(node.op, ConvTransp3D): if isinstance(node.op, ConvTransp3D):
if numpy.any([i.owner and isinstance(i.owner.op, HostFromGpu) if numpy.any([i.owner and isinstance(i.owner.op, HostFromGpu)
for i in node.inputs]): for i in node.inputs]):
if numpy.all([o.type.dtype == 'float32' for o in node.outputs]): if numpy.all([o.type.dtype == 'float32' for o in node.outputs]):
W, b, d, H, RShape = node.inputs W, b, d, H, RShape = node.inputs
return [host_from_gpu(gpu_conv_transpd(W, b, d, H, RShape))] return [host_from_gpu(gpu_conv_transpd(W, b, d, H, RShape))]
# Not enabled by default as we don't want people to use it.
gpu_optimizer.register("local_gpu_conv_transp3d", local_gpu_conv_transp3d)
#If the input size wasn't a multiple of D we may need to cause some automatic padding to get the right size of reconstruction #If the input size wasn't a multiple of D we may need to cause some automatic padding to get the right size of reconstruction
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论