提交 27ca63bf authored 作者: notoraptor's avatar notoraptor

Fix some failing tests.

上级 e63cea9b
...@@ -2302,6 +2302,9 @@ class TestDnnConv2DRuntimeAlgorithms(object): ...@@ -2302,6 +2302,9 @@ class TestDnnConv2DRuntimeAlgorithms(object):
] ]
def __init__(self): def __init__(self):
if not dnn.dnn_available(test_ctx_name):
raise SkipTest(dnn.dnn_available.msg)
utt.seed_rng()
self.runtime_algorithms = ('time_once', 'guess_once', 'time_on_shape_change', 'guess_on_shape_change') self.runtime_algorithms = ('time_once', 'guess_once', 'time_on_shape_change', 'guess_on_shape_change')
def test_fwd_runtime_algorithms(self): def test_fwd_runtime_algorithms(self):
...@@ -2312,16 +2315,18 @@ class TestDnnConv2DRuntimeAlgorithms(object): ...@@ -2312,16 +2315,18 @@ class TestDnnConv2DRuntimeAlgorithms(object):
def run_fwd_runtime_algorithm(algo): def run_fwd_runtime_algorithm(algo):
inputs = theano.tensor.TensorType(dtype, _broadcastable)() inputs = theano.tensor.TensorType(dtype, _broadcastable)()
filters = theano.tensor.TensorType(dtype, _broadcastable)() filters = theano.tensor.TensorType(dtype, _broadcastable)()
inputs /= 10 # Scale down the input values to prevent very large absolute errors
filters /= 10 # due to float rounding
conv = dnn.dnn_conv(img=inputs, kerns=filters, algo=algo, precision=dtype, lower_inputs = inputs / 10
lower_filters = filters / 10
conv = dnn.dnn_conv(img=lower_inputs, kerns=lower_filters, algo=algo, precision=dtype,
subsample=unit_shape, dilation=unit_shape) subsample=unit_shape, dilation=unit_shape)
f = theano.function([inputs, filters], conv, mode=mode_with_gpu) f = theano.function([inputs, filters], conv, mode=mode_with_gpu)
if self.ndim == 3: if self.ndim == 3:
flipped_filters = filters[:, :, ::-1, ::-1, ::-1] flipped_filters = lower_filters[:, :, ::-1, ::-1, ::-1]
else: else:
flipped_filters = filters[:, :, ::-1, ::-1] flipped_filters = lower_filters[:, :, ::-1, ::-1]
conv_ref = self.cpu_conv_class(subsample=unit_shape)(ref_cast(inputs), flipped_filters) conv_ref = self.cpu_conv_class(subsample=unit_shape)(ref_cast(lower_inputs), flipped_filters)
f_ref = theano.function([inputs, filters], conv_ref, mode='FAST_RUN') f_ref = theano.function([inputs, filters], conv_ref, mode='FAST_RUN')
runtime_shapes = self.runtime_shapes runtime_shapes = self.runtime_shapes
if algo in ('time_once', 'guess_once'): if algo in ('time_once', 'guess_once'):
...@@ -2333,7 +2338,7 @@ class TestDnnConv2DRuntimeAlgorithms(object): ...@@ -2333,7 +2338,7 @@ class TestDnnConv2DRuntimeAlgorithms(object):
filters_val = np.random.random(filters_shape).astype(dtype) filters_val = np.random.random(filters_shape).astype(dtype)
gpu_res = f(inputs_val, filters_val) gpu_res = f(inputs_val, filters_val)
cpu_res = f_ref(inputs_val, filters_val) cpu_res = f_ref(inputs_val, filters_val)
utt.assert_allclose(cpu_res, gpu_res) utt.assert_allclose(cpu_res, np.asarray(gpu_res))
for algo in self.runtime_algorithms: for algo in self.runtime_algorithms:
yield (run_fwd_runtime_algorithm, algo) yield (run_fwd_runtime_algorithm, algo)
...@@ -2347,8 +2352,6 @@ class TestDnnConv2DRuntimeAlgorithms(object): ...@@ -2347,8 +2352,6 @@ class TestDnnConv2DRuntimeAlgorithms(object):
theano.config.dnn.conv.algo_bwd_data = algo theano.config.dnn.conv.algo_bwd_data = algo
inputs = theano.tensor.TensorType(dtype, _broadcastable)() inputs = theano.tensor.TensorType(dtype, _broadcastable)()
filters = theano.tensor.TensorType(dtype, _broadcastable)() filters = theano.tensor.TensorType(dtype, _broadcastable)()
inputs /= 10
filters /= 10
conv = dnn.dnn_conv(img=inputs, kerns=filters, algo=algo, precision=dtype, conv = dnn.dnn_conv(img=inputs, kerns=filters, algo=algo, precision=dtype,
subsample=unit_shape, dilation=unit_shape) subsample=unit_shape, dilation=unit_shape)
grad_i = theano.tensor.grad(conv.sum(), [inputs]) grad_i = theano.tensor.grad(conv.sum(), [inputs])
...@@ -2373,7 +2376,7 @@ class TestDnnConv2DRuntimeAlgorithms(object): ...@@ -2373,7 +2376,7 @@ class TestDnnConv2DRuntimeAlgorithms(object):
filters_val = np.random.random(filters_shape).astype(dtype) filters_val = np.random.random(filters_shape).astype(dtype)
gpu_res = f(inputs_val, filters_val) gpu_res = f(inputs_val, filters_val)
cpu_res = f_ref(inputs_val, filters_val) cpu_res = f_ref(inputs_val, filters_val)
utt.assert_allclose(cpu_res, gpu_res) utt.assert_allclose(cpu_res, np.asarray(gpu_res))
for algo in self.runtime_algorithms: for algo in self.runtime_algorithms:
yield (run_gradinput_runtime_algorithm, algo) yield (run_gradinput_runtime_algorithm, algo)
...@@ -2387,8 +2390,6 @@ class TestDnnConv2DRuntimeAlgorithms(object): ...@@ -2387,8 +2390,6 @@ class TestDnnConv2DRuntimeAlgorithms(object):
theano.config.dnn.conv.algo_bwd_filter = algo theano.config.dnn.conv.algo_bwd_filter = algo
inputs = theano.tensor.TensorType(dtype, _broadcastable)() inputs = theano.tensor.TensorType(dtype, _broadcastable)()
filters = theano.tensor.TensorType(dtype, _broadcastable)() filters = theano.tensor.TensorType(dtype, _broadcastable)()
inputs /= 10
filters /= 10
conv = dnn.dnn_conv(img=inputs, kerns=filters, algo=algo, precision=dtype, conv = dnn.dnn_conv(img=inputs, kerns=filters, algo=algo, precision=dtype,
subsample=unit_shape, dilation=unit_shape) subsample=unit_shape, dilation=unit_shape)
grad_w = theano.tensor.grad(conv.sum(), [filters]) grad_w = theano.tensor.grad(conv.sum(), [filters])
...@@ -2413,7 +2414,7 @@ class TestDnnConv2DRuntimeAlgorithms(object): ...@@ -2413,7 +2414,7 @@ class TestDnnConv2DRuntimeAlgorithms(object):
filters_val = np.random.random(filters_shape).astype(dtype) filters_val = np.random.random(filters_shape).astype(dtype)
gpu_res = f(inputs_val, filters_val) gpu_res = f(inputs_val, filters_val)
cpu_res = f_ref(inputs_val, filters_val) cpu_res = f_ref(inputs_val, filters_val)
utt.assert_allclose(cpu_res, gpu_res) utt.assert_allclose(cpu_res, np.asarray(gpu_res))
for algo in self.runtime_algorithms: for algo in self.runtime_algorithms:
yield (run_gradweight_runtime_algorithm, algo) yield (run_gradweight_runtime_algorithm, algo)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论