Fixed triggering create device multiple times
PiperOrigin-RevId: 158025196
This commit is contained in:
parent
504a307b74
commit
a5909d6432
tensorflow
contrib/keras/python/keras/layers
python/layers
@ -114,16 +114,19 @@ class Conv2DTest(test.TestCase):
|
||||
continue
|
||||
|
||||
with self.test_session(use_gpu=True):
|
||||
testing_utils.layer_test(
|
||||
keras.layers.Conv2D,
|
||||
kwargs={
|
||||
'filters': filters,
|
||||
'kernel_size': kernel_size,
|
||||
'padding': padding,
|
||||
'strides': strides,
|
||||
'data_format': 'channels_first'
|
||||
},
|
||||
input_shape=(num_samples, stack_size, num_row, num_col))
|
||||
# Only runs on GPU with CUDA, channels_first is not supported on CPU.
|
||||
# TODO(b/62340061): Support channels_first on CPU.
|
||||
if test.is_gpu_available(cuda_only=True):
|
||||
testing_utils.layer_test(
|
||||
keras.layers.Conv2D,
|
||||
kwargs={
|
||||
'filters': filters,
|
||||
'kernel_size': kernel_size,
|
||||
'padding': padding,
|
||||
'strides': strides,
|
||||
'data_format': 'channels_first'
|
||||
},
|
||||
input_shape=(num_samples, stack_size, num_row, num_col))
|
||||
|
||||
def test_convolution_2d_regularization(self):
|
||||
# regularizers
|
||||
|
@ -100,15 +100,18 @@ class Pooling2DTest(test.TestCase):
|
||||
'padding': 'valid',
|
||||
'pool_size': (3, 3)},
|
||||
input_shape=(3, 5, 6, 4))
|
||||
testing_utils.layer_test(
|
||||
keras.layers.AveragePooling2D,
|
||||
kwargs={
|
||||
'strides': (1, 1),
|
||||
'padding': 'valid',
|
||||
'pool_size': (2, 2),
|
||||
'data_format': 'channels_first'
|
||||
},
|
||||
input_shape=(3, 4, 5, 6))
|
||||
# Only runs on GPU with CUDA, channels_first is not supported on CPU.
|
||||
# TODO(b/62340061): Support channels_first on CPU.
|
||||
if test.is_gpu_available(cuda_only=True):
|
||||
testing_utils.layer_test(
|
||||
keras.layers.AveragePooling2D,
|
||||
kwargs={
|
||||
'strides': (1, 1),
|
||||
'padding': 'valid',
|
||||
'pool_size': (2, 2),
|
||||
'data_format': 'channels_first'
|
||||
},
|
||||
input_shape=(3, 4, 5, 6))
|
||||
|
||||
|
||||
class Pooling3DTest(test.TestCase):
|
||||
|
@ -149,39 +149,13 @@ class _Conv(base.Layer):
|
||||
self.built = True
|
||||
|
||||
def call(self, inputs):
|
||||
if (self.data_format == 'channels_first' and
|
||||
not framework.test_util.gpu_device_name()):
|
||||
# `nn.convolution` is not implemented on CPU for `channels_first` format.
|
||||
# In cases where we are most likely running on CPU using `channels_first`,
|
||||
# we reshape the inputs to use `channels_last` (and reshape them back
|
||||
# afterwards). This is a temporary fix; a better solution would be a fix
|
||||
# at the op level.
|
||||
# TODO(chollet): remove this when `nn.convolution` is feature-complete.
|
||||
data_format = 'channels_last'
|
||||
if self.rank == 1:
|
||||
inputs = array_ops.transpose(inputs, (0, 2, 1))
|
||||
elif self.rank == 2:
|
||||
inputs = array_ops.transpose(inputs, (0, 2, 3, 1))
|
||||
elif self.rank == 3:
|
||||
inputs = array_ops.transpose(inputs, (0, 2, 3, 4, 1))
|
||||
else:
|
||||
data_format = self.data_format
|
||||
outputs = nn.convolution(
|
||||
input=inputs,
|
||||
filter=self.kernel,
|
||||
dilation_rate=self.dilation_rate,
|
||||
strides=self.strides,
|
||||
padding=self.padding.upper(),
|
||||
data_format=utils.convert_data_format(data_format,
|
||||
self.rank + 2))
|
||||
if (self.data_format == 'channels_first' and
|
||||
not framework.test_util.gpu_device_name()):
|
||||
if self.rank == 1:
|
||||
outputs = array_ops.transpose(outputs, (0, 2, 1))
|
||||
elif self.rank == 2:
|
||||
outputs = array_ops.transpose(outputs, (0, 3, 1, 2))
|
||||
elif self.rank == 3:
|
||||
outputs = array_ops.transpose(outputs, (0, 4, 1, 2, 3))
|
||||
data_format=utils.convert_data_format(self.data_format, self.rank + 2))
|
||||
|
||||
if self.bias is not None:
|
||||
if self.data_format == 'channels_first':
|
||||
@ -202,18 +176,10 @@ class _Conv(base.Layer):
|
||||
[outputs_shape[0], outputs_shape[1],
|
||||
outputs_shape[2] * outputs_shape[3],
|
||||
outputs_shape[4]])
|
||||
outputs_4d = nn.bias_add(
|
||||
outputs_4d,
|
||||
self.bias,
|
||||
data_format=utils.convert_data_format(self.data_format, 4))
|
||||
outputs_4d = nn.bias_add(outputs_4d, self.bias, data_format='NCHW')
|
||||
outputs = array_ops.reshape(outputs_4d, outputs_shape)
|
||||
else:
|
||||
outputs = nn.bias_add(
|
||||
outputs,
|
||||
self.bias,
|
||||
data_format=utils.convert_data_format(self.data_format, 4))
|
||||
# Note that we passed rank=4 because bias_add will only accept
|
||||
# NHWC and NCWH even if the rank of the inputs is 3 or 5.
|
||||
outputs = nn.bias_add(outputs, self.bias, data_format='NHWC')
|
||||
|
||||
if self.activation is not None:
|
||||
return self.activation(outputs)
|
||||
|
@ -262,16 +262,7 @@ class _Pooling2D(base.Layer):
|
||||
self.input_spec = base.InputSpec(ndim=4)
|
||||
|
||||
def call(self, inputs):
|
||||
if (self.data_format == 'channels_first' and
|
||||
not framework.test_util.gpu_device_name()):
|
||||
# `nn.convolution` is not implemented on CPU for `channels_first` format.
|
||||
# TODO(chollet): remove this when `nn.convolution` is feature-complete.
|
||||
data_format = 'channels_last'
|
||||
inputs = array_ops.transpose(inputs, (0, 2, 3, 1))
|
||||
else:
|
||||
data_format = self.data_format
|
||||
|
||||
if data_format == 'channels_last':
|
||||
if self.data_format == 'channels_last':
|
||||
pool_shape = (1,) + self.pool_size + (1,)
|
||||
strides = (1,) + self.strides + (1,)
|
||||
else:
|
||||
@ -282,11 +273,7 @@ class _Pooling2D(base.Layer):
|
||||
ksize=pool_shape,
|
||||
strides=strides,
|
||||
padding=self.padding.upper(),
|
||||
data_format=utils.convert_data_format(data_format, 4))
|
||||
|
||||
if (self.data_format == 'channels_first' and
|
||||
not framework.test_util.gpu_device_name()):
|
||||
outputs = array_ops.transpose(outputs, (0, 3, 1, 2))
|
||||
data_format=utils.convert_data_format(self.data_format, 4))
|
||||
return outputs
|
||||
|
||||
def _compute_output_shape(self, input_shape):
|
||||
|
Loading…
Reference in New Issue
Block a user