def _testKerasLayer(self, layer_class):
        def kernel_posterior_fn(dtype, shape, name, trainable,
                                add_variable_fn):
            """Set trivially. The function is required to instantiate layer."""
            del name, trainable, add_variable_fn  # unused
            # Deserialized Keras objects do not perform lexical scoping. Any modules
            # that the function requires must be imported within the function.
            import tensorflow as tf  # pylint: disable=g-import-not-at-top,redefined-outer-name
            tfd = tf.contrib.distributions  # pylint: disable=redefined-outer-name

            loc = tf.zeros(shape, dtype=dtype)
            scale = tf.ones(shape, dtype=dtype)
            return tfd.Independent(tfd.Normal(loc=loc, scale=scale))

        kwargs = {
            'units': 3,
            'kernel_posterior_fn': kernel_posterior_fn,
            'kernel_prior_fn': None,
            'bias_posterior_fn': None,
            'bias_prior_fn': None
        }
        with tf.keras.utils.CustomObjectScope(
            {layer_class.__name__: layer_class}):
            with self.test_session():
                testing_utils.layer_test(layer_class,
                                         kwargs=kwargs,
                                         input_shape=(3, 2))
                testing_utils.layer_test(layer_class,
                                         kwargs=kwargs,
                                         input_shape=(None, None, 2))
    def test_separable_conv_2d(self):
        num_samples = 2
        filters = 6
        stack_size = 3
        num_row = 7
        num_col = 6

        for padding in ['valid', 'same']:
            for strides in [(1, 1), (2, 2)]:
                for multiplier in [1, 2]:
                    if padding == 'same' and strides != (1, 1):
                        continue

                    with self.test_session(use_gpu=True):
                        testing_utils.layer_test(keras.layers.SeparableConv2D,
                                                 kwargs={
                                                     'filters': filters,
                                                     'kernel_size': (3, 3),
                                                     'padding': padding,
                                                     'strides': strides,
                                                     'depth_multiplier':
                                                     multiplier
                                                 },
                                                 input_shape=(num_samples,
                                                              num_row, num_col,
                                                              stack_size))
示例#3
0
  def test_cropping_2d(self):
    num_samples = 2
    stack_size = 2
    input_len_dim1 = 9
    input_len_dim2 = 9
    cropping = ((2, 2), (3, 3))

    for data_format in ['channels_first', 'channels_last']:
      if data_format == 'channels_first':
        inputs = np.random.rand(num_samples, stack_size, input_len_dim1,
                                input_len_dim2)
      else:
        inputs = np.random.rand(num_samples, input_len_dim1, input_len_dim2,
                                stack_size)
      # basic test
      with self.test_session(use_gpu=True):
        testing_utils.layer_test(
            keras.layers.Cropping2D,
            kwargs={'cropping': cropping,
                    'data_format': data_format},
            input_shape=inputs.shape)
      # correctness test
      with self.test_session(use_gpu=True):
        layer = keras.layers.Cropping2D(
            cropping=cropping, data_format=data_format)
        layer.build(inputs.shape)
        output = layer(keras.backend.variable(inputs))
        np_output = keras.backend.eval(output)
        # compare with numpy
        if data_format == 'channels_first':
          expected_out = inputs[:, :, cropping[0][0]:-cropping[0][1], cropping[
              1][0]:-cropping[1][1]]
        else:
          expected_out = inputs[:, cropping[0][0]:-cropping[0][1], cropping[1][
              0]:-cropping[1][1], :]
        np.testing.assert_allclose(np_output, expected_out)

    for data_format in ['channels_first', 'channels_last']:
      if data_format == 'channels_first':
        inputs = np.random.rand(num_samples, stack_size, input_len_dim1,
                                input_len_dim2)
      else:
        inputs = np.random.rand(num_samples, input_len_dim1, input_len_dim2,
                                stack_size)
      # another correctness test (no cropping)
      with self.test_session(use_gpu=True):
        cropping = ((0, 0), (0, 0))
        layer = keras.layers.Cropping2D(
            cropping=cropping, data_format=data_format)
        layer.build(inputs.shape)
        output = layer(keras.backend.variable(inputs))
        np_output = keras.backend.eval(output)
        # compare with input
        np.testing.assert_allclose(np_output, inputs)

    # test incorrect use
    with self.assertRaises(ValueError):
      keras.layers.Cropping2D(cropping=(1, 1, 1))
    with self.assertRaises(ValueError):
      keras.layers.Cropping2D(cropping=None)
示例#4
0
  def test_locallyconnected_2d(self):
    num_samples = 8
    filters = 3
    stack_size = 4
    num_row = 6
    num_col = 10

    for padding in ['valid']:
      for strides in [(1, 1), (2, 2)]:
        if padding == 'same' and strides != (1, 1):
          continue

        with self.test_session():
          testing_utils.layer_test(
              keras.layers.LocallyConnected2D,
              kwargs={
                  'filters': filters,
                  'kernel_size': 3,
                  'padding': padding,
                  'kernel_regularizer': 'l2',
                  'bias_regularizer': 'l2',
                  'activity_regularizer': 'l2',
                  'strides': strides,
                  'data_format': 'channels_last'
              },
              input_shape=(num_samples, num_row, num_col, stack_size))
示例#5
0
  def test_zero_padding_3d(self):
    num_samples = 2
    stack_size = 2
    input_len_dim1 = 4
    input_len_dim2 = 5
    input_len_dim3 = 3

    inputs = np.ones((num_samples, input_len_dim1, input_len_dim2,
                      input_len_dim3, stack_size))

    # basic test
    with self.test_session(use_gpu=True):
      testing_utils.layer_test(
          keras.layers.ZeroPadding3D,
          kwargs={'padding': (2, 2, 2)},
          input_shape=inputs.shape)

    # correctness test
    with self.test_session(use_gpu=True):
      layer = keras.layers.ZeroPadding3D(padding=(2, 2, 2))
      layer.build(inputs.shape)
      output = layer(keras.backend.variable(inputs))
      np_output = keras.backend.eval(output)
      for offset in [0, 1, -1, -2]:
        np.testing.assert_allclose(np_output[:, offset, :, :, :], 0.)
        np.testing.assert_allclose(np_output[:, :, offset, :, :], 0.)
        np.testing.assert_allclose(np_output[:, :, :, offset, :], 0.)
      np.testing.assert_allclose(np_output[:, 2:-2, 2:-2, 2:-2, :], 1.)

    # test incorrect use
    with self.assertRaises(ValueError):
      keras.layers.ZeroPadding3D(padding=(1, 1))
    with self.assertRaises(ValueError):
      keras.layers.ZeroPadding3D(padding=None)
示例#6
0
    def test_locallyconnected_2d(self):
        num_samples = 8
        filters = 3
        stack_size = 4
        num_row = 6
        num_col = 10

        for padding in ['valid']:
            for strides in [(1, 1), (2, 2)]:
                if padding == 'same' and strides != (1, 1):
                    continue

                with self.test_session():
                    testing_utils.layer_test(keras.layers.LocallyConnected2D,
                                             kwargs={
                                                 'filters': filters,
                                                 'kernel_size': 3,
                                                 'padding': padding,
                                                 'kernel_regularizer': 'l2',
                                                 'bias_regularizer': 'l2',
                                                 'activity_regularizer': 'l2',
                                                 'strides': strides,
                                                 'data_format': 'channels_last'
                                             },
                                             input_shape=(num_samples, num_row,
                                                          num_col, stack_size))
示例#7
0
  def test_convolution_2d(self):
    num_samples = 2
    filters = 2
    stack_size = 3
    kernel_size = (3, 2)
    num_row = 7
    num_col = 6

    for padding in ['valid', 'same']:
      for strides in [(1, 1), (2, 2)]:
        if padding == 'same' and strides != (1, 1):
          continue

        with self.test_session(use_gpu=True):
          # 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))
示例#8
0
  def test_convolution_3d(self):
    num_samples = 2
    filters = 2
    stack_size = 3

    input_len_dim1 = 9
    input_len_dim2 = 8
    input_len_dim3 = 8

    for padding in ['valid', 'same']:
      for strides in [(1, 1, 1), (2, 2, 2)]:
        if padding == 'same' and strides != (1, 1, 1):
          continue

        with self.test_session(use_gpu=True):
          testing_utils.layer_test(
              keras.layers.Convolution3D,
              kwargs={
                  'filters': filters,
                  'kernel_size': 3,
                  'padding': padding,
                  'strides': strides
              },
              input_shape=(num_samples, input_len_dim1, input_len_dim2,
                           input_len_dim3, stack_size))
示例#9
0
  def test_spatial_dropout(self):
    testing_utils.layer_test(
        keras.layers.SpatialDropout1D,
        kwargs={'rate': 0.5},
        input_shape=(2, 3, 4))

    testing_utils.layer_test(
        keras.layers.SpatialDropout2D,
        kwargs={'rate': 0.5},
        input_shape=(2, 3, 4, 5))

    testing_utils.layer_test(
        keras.layers.SpatialDropout2D,
        kwargs={'rate': 0.5, 'data_format': 'channels_first'},
        input_shape=(2, 3, 4, 5))

    testing_utils.layer_test(
        keras.layers.SpatialDropout3D,
        kwargs={'rate': 0.5},
        input_shape=(2, 3, 4, 4, 5))

    testing_utils.layer_test(
        keras.layers.SpatialDropout3D,
        kwargs={'rate': 0.5, 'data_format': 'channels_first'},
        input_shape=(2, 3, 4, 4, 5))
示例#10
0
  def test_lambda(self):
    testing_utils.layer_test(
        keras.layers.Lambda,
        kwargs={'function': lambda x: x + 1},
        input_shape=(3, 2))

    testing_utils.layer_test(
        keras.layers.Lambda,
        kwargs={
            'function': lambda x, a, b: x * a + b,
            'arguments': {
                'a': 0.6,
                'b': 0.4
            }
        },
        input_shape=(3, 2))

    # test serialization with function
    def f(x):
      return x + 1

    ld = keras.layers.Lambda(f)
    config = ld.get_config()
    ld = keras.layers.deserialize({
        'class_name': 'Lambda',
        'config': config
    })

    # test with lambda
    ld = keras.layers.Lambda(
        lambda x: keras.backend.concatenate([math_ops.square(x), x]))
    config = ld.get_config()
    ld = keras.layers.Lambda.from_config(config)
示例#11
0
 def test_globalpooling_1d(self):
     with self.test_session(use_gpu=True):
         testing_utils.layer_test(keras.layers.pooling.GlobalMaxPooling1D,
                                  input_shape=(3, 4, 5))
         testing_utils.layer_test(
             keras.layers.pooling.GlobalAveragePooling1D,
             input_shape=(3, 4, 5))
    def test_conv3d_transpose(self):
        num_samples = 2
        filters = 2
        stack_size = 3
        num_row = 5
        num_col = 6
        depth = 4

        for padding in ['valid', 'same']:
            for strides in [(1, 1, 1), (2, 2, 2)]:
                if padding == 'same' and strides != (1, 1, 1):
                    continue

                with self.test_session(use_gpu=True):
                    testing_utils.layer_test(keras.layers.Conv3DTranspose,
                                             kwargs={
                                                 'filters': filters,
                                                 'kernel_size': 3,
                                                 'padding': padding,
                                                 'strides': strides,
                                                 'data_format': 'channels_last'
                                             },
                                             input_shape=(num_samples, depth,
                                                          num_row, num_col,
                                                          stack_size))
示例#13
0
 def test_cudnn_rnn_basics(self):
   if test.is_gpu_available(cuda_only=True):
     with self.test_session(use_gpu=True):
       input_size = 10
       timesteps = 6
       units = 2
       num_samples = 32
       for layer_class in [keras.layers.CuDNNGRU, keras.layers.CuDNNLSTM]:
         for return_sequences in [True, False]:
           with keras.utils.CustomObjectScope(
               {'keras.layers.CuDNNGRU': keras.layers.CuDNNGRU,
                'keras.layers.CuDNNLSTM': keras.layers.CuDNNLSTM}):
             testing_utils.layer_test(
                 layer_class,
                 kwargs={'units': units,
                         'return_sequences': return_sequences},
                 input_shape=(num_samples, timesteps, input_size))
         for go_backwards in [True, False]:
           with keras.utils.CustomObjectScope(
               {'keras.layers.CuDNNGRU': keras.layers.CuDNNGRU,
                'keras.layers.CuDNNLSTM': keras.layers.CuDNNLSTM}):
             testing_utils.layer_test(
                 layer_class,
                 kwargs={'units': units,
                         'go_backwards': go_backwards},
                 input_shape=(num_samples, timesteps, input_size))
    def test_upsampling_2d(self):
        num_samples = 2
        stack_size = 2
        input_num_row = 11
        input_num_col = 12

        for data_format in ['channels_first', 'channels_last']:
            if data_format == 'channels_first':
                inputs = np.random.rand(num_samples, stack_size, input_num_row,
                                        input_num_col)
            else:
                inputs = np.random.rand(num_samples, input_num_row,
                                        input_num_col, stack_size)

            # basic test
            with self.test_session(use_gpu=True):
                testing_utils.layer_test(keras.layers.UpSampling2D,
                                         kwargs={
                                             'size': (2, 2),
                                             'data_format': data_format
                                         },
                                         input_shape=inputs.shape)

                for length_row in [2]:
                    for length_col in [2, 3]:
                        layer = keras.layers.UpSampling2D(
                            size=(length_row, length_col),
                            data_format=data_format)
                        layer.build(inputs.shape)
                        output = layer(keras.backend.variable(inputs))
                        np_output = keras.backend.eval(output)
                        if data_format == 'channels_first':
                            assert np_output.shape[
                                2] == length_row * input_num_row
                            assert np_output.shape[
                                3] == length_col * input_num_col
                        else:  # tf
                            assert np_output.shape[
                                1] == length_row * input_num_row
                            assert np_output.shape[
                                2] == length_col * input_num_col

                        # compare with numpy
                        if data_format == 'channels_first':
                            expected_out = np.repeat(inputs,
                                                     length_row,
                                                     axis=2)
                            expected_out = np.repeat(expected_out,
                                                     length_col,
                                                     axis=3)
                        else:  # tf
                            expected_out = np.repeat(inputs,
                                                     length_row,
                                                     axis=1)
                            expected_out = np.repeat(expected_out,
                                                     length_col,
                                                     axis=2)

                        np.testing.assert_allclose(np_output, expected_out)
 def test_averagepooling_1d(self):
   for padding in ['valid', 'same']:
     for stride in [1, 2]:
       testing_utils.layer_test(
           keras.layers.AveragePooling1D,
           kwargs={'strides': stride,
                   'padding': padding},
           input_shape=(3, 5, 4))
示例#16
0
    def test_cropping_3d(self):
        num_samples = 2
        stack_size = 2
        input_len_dim1 = 8
        input_len_dim2 = 8
        input_len_dim3 = 8
        croppings = [((2, 2), (1, 1), (2, 3)), 3, (0, 1, 1)]

        for cropping in croppings:
            for data_format in ['channels_last', 'channels_first']:
                if data_format == 'channels_first':
                    inputs = np.random.rand(num_samples, stack_size,
                                            input_len_dim1, input_len_dim2,
                                            input_len_dim3)
                else:
                    inputs = np.random.rand(num_samples, input_len_dim1,
                                            input_len_dim2, input_len_dim3,
                                            stack_size)
                # basic test
                with self.test_session(use_gpu=True):
                    testing_utils.layer_test(keras.layers.Cropping3D,
                                             kwargs={
                                                 'cropping': cropping,
                                                 'data_format': data_format
                                             },
                                             input_shape=inputs.shape)

                if len(croppings) == 3 and len(croppings[0]) == 2:
                    # correctness test
                    with self.test_session(use_gpu=True):
                        layer = keras.layers.Cropping3D(
                            cropping=cropping, data_format=data_format)
                        layer.build(inputs.shape)
                        output = layer(keras.backend.variable(inputs))
                        if context.executing_eagerly():
                            np_output = output.numpy()
                        else:
                            np_output = keras.backend.eval(output)
                        # compare with numpy
                        if data_format == 'channels_first':
                            expected_out = inputs[:, :, cropping[0][0]:
                                                  -cropping[0][1], cropping[1]
                                                  [0]:-cropping[1][1],
                                                  cropping[2][0]:
                                                  -cropping[2][1]]
                        else:
                            expected_out = inputs[:, cropping[0][0]:
                                                  -cropping[0][1], cropping[1]
                                                  [0]:-cropping[1][1],
                                                  cropping[2][0]:
                                                  -cropping[2][1], :]
                        np.testing.assert_allclose(np_output, expected_out)

        # test incorrect use
        with self.assertRaises(ValueError):
            keras.layers.Cropping3D(cropping=(1, 1))
        with self.assertRaises(ValueError):
            keras.layers.Cropping3D(cropping=None)
示例#17
0
 def test_maxpooling_1d(self):
   with self.test_session(use_gpu=True):
     for padding in ['valid', 'same']:
       for stride in [1, 2]:
         testing_utils.layer_test(
             keras.layers.MaxPooling1D,
             kwargs={'strides': stride,
                     'padding': padding},
             input_shape=(3, 5, 4))
    def test_conv_lstm(self):
        num_row = 3
        num_col = 3
        filters = 2
        num_samples = 1
        input_channel = 2
        input_num_row = 5
        input_num_col = 5
        sequence_len = 2
        for data_format in ['channels_first', 'channels_last']:
            if data_format == 'channels_first':
                inputs = np.random.rand(num_samples, sequence_len,
                                        input_channel, input_num_row,
                                        input_num_col)
            else:
                inputs = np.random.rand(num_samples, sequence_len,
                                        input_num_row, input_num_col,
                                        input_channel)

            for return_sequences in [True, False]:
                with self.test_session():
                    # test for return state:
                    x = keras.Input(batch_shape=inputs.shape)
                    kwargs = {
                        'data_format': data_format,
                        'return_sequences': return_sequences,
                        'return_state': True,
                        'stateful': True,
                        'filters': filters,
                        'kernel_size': (num_row, num_col),
                        'padding': 'valid'
                    }
                    layer = keras.layers.ConvLSTM2D(**kwargs)
                    layer.build(inputs.shape)
                    outputs = layer(x)
                    _, states = outputs[0], outputs[1:]
                    self.assertEqual(len(states), 2)
                    model = keras.models.Model(x, states[0])
                    state = model.predict(inputs)

                    self.assertAllClose(keras.backend.eval(layer.states[0]),
                                        state,
                                        atol=1e-4)

                    # test for output shape:
                    testing_utils.layer_test(keras.layers.ConvLSTM2D,
                                             kwargs={
                                                 'data_format': data_format,
                                                 'return_sequences':
                                                 return_sequences,
                                                 'filters': filters,
                                                 'kernel_size':
                                                 (num_row, num_col),
                                                 'padding': 'valid'
                                             },
                                             input_shape=inputs.shape)
示例#19
0
 def test_return_sequences_GRU(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   testing_utils.layer_test(
       keras.layers.GRU,
       kwargs={'units': units,
               'return_sequences': True},
       input_shape=(num_samples, timesteps, embedding_dim))
示例#20
0
 def test_maxpooling_2d(self):
     pool_size = (3, 3)
     for strides in [(1, 1), (2, 2)]:
         testing_utils.layer_test(keras.layers.MaxPooling2D,
                                  kwargs={
                                      'strides': strides,
                                      'padding': 'valid',
                                      'pool_size': pool_size
                                  },
                                  input_shape=(3, 5, 6, 4))
示例#21
0
 def test_return_sequences_LSTM(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   testing_utils.layer_test(
       keras.layers.LSTM,
       kwargs={'units': units,
               'return_sequences': True},
       input_shape=(num_samples, timesteps, embedding_dim))
示例#22
0
    def test_activation(self):
        # with string argument
        testing_utils.layer_test(keras.layers.Activation,
                                 kwargs={'activation': 'relu'},
                                 input_shape=(3, 2))

        # with function argument
        testing_utils.layer_test(keras.layers.Activation,
                                 kwargs={'activation': keras.backend.relu},
                                 input_shape=(3, 2))
示例#23
0
 def test_maxpooling_1d(self):
     with self.test_session(use_gpu=True):
         for padding in ['valid', 'same']:
             for stride in [1, 2]:
                 testing_utils.layer_test(keras.layers.MaxPooling1D,
                                          kwargs={
                                              'strides': stride,
                                              'padding': padding
                                          },
                                          input_shape=(3, 5, 4))
示例#24
0
  def test_upsampling_3d(self):
    num_samples = 2
    stack_size = 2
    input_len_dim1 = 10
    input_len_dim2 = 11
    input_len_dim3 = 12

    for data_format in ['channels_first', 'channels_last']:
      if data_format == 'channels_first':
        inputs = np.random.rand(num_samples, stack_size, input_len_dim1,
                                input_len_dim2, input_len_dim3)
      else:
        inputs = np.random.rand(num_samples, input_len_dim1, input_len_dim2,
                                input_len_dim3, stack_size)

      # basic test
      with self.test_session(use_gpu=True):
        testing_utils.layer_test(
            keras.layers.UpSampling3D,
            kwargs={'size': (2, 2, 2),
                    'data_format': data_format},
            input_shape=inputs.shape)

        for length_dim1 in [2, 3]:
          for length_dim2 in [2]:
            for length_dim3 in [3]:
              layer = keras.layers.UpSampling3D(
                  size=(length_dim1, length_dim2, length_dim3),
                  data_format=data_format)
              layer.build(inputs.shape)
              output = layer(keras.backend.variable(inputs))
              if context.executing_eagerly():
                np_output = output.numpy()
              else:
                np_output = keras.backend.eval(output)
              if data_format == 'channels_first':
                assert np_output.shape[2] == length_dim1 * input_len_dim1
                assert np_output.shape[3] == length_dim2 * input_len_dim2
                assert np_output.shape[4] == length_dim3 * input_len_dim3
              else:  # tf
                assert np_output.shape[1] == length_dim1 * input_len_dim1
                assert np_output.shape[2] == length_dim2 * input_len_dim2
                assert np_output.shape[3] == length_dim3 * input_len_dim3

              # compare with numpy
              if data_format == 'channels_first':
                expected_out = np.repeat(inputs, length_dim1, axis=2)
                expected_out = np.repeat(expected_out, length_dim2, axis=3)
                expected_out = np.repeat(expected_out, length_dim3, axis=4)
              else:  # tf
                expected_out = np.repeat(inputs, length_dim1, axis=1)
                expected_out = np.repeat(expected_out, length_dim2, axis=2)
                expected_out = np.repeat(expected_out, length_dim3, axis=3)

              np.testing.assert_allclose(np_output, expected_out)
示例#25
0
 def test_maxpooling_2d(self):
   pool_size = (3, 3)
   for strides in [(1, 1), (2, 2)]:
     testing_utils.layer_test(
         keras.layers.MaxPooling2D,
         kwargs={
             'strides': strides,
             'padding': 'valid',
             'pool_size': pool_size
         },
         input_shape=(3, 5, 6, 4))
示例#26
0
 def test_dropout_LSTM(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   testing_utils.layer_test(
       keras.layers.LSTM,
       kwargs={'units': units,
               'dropout': 0.1,
               'recurrent_dropout': 0.1},
       input_shape=(num_samples, timesteps, embedding_dim))
示例#27
0
 def test_implementation_mode_LSTM(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   for mode in [0, 1, 2]:
     testing_utils.layer_test(
         keras.layers.LSTM,
         kwargs={'units': units,
                 'implementation': mode},
         input_shape=(num_samples, timesteps, embedding_dim))
示例#28
0
 def test_return_sequences_GRU(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   with self.test_session():
     testing_utils.layer_test(
         keras.layers.GRU,
         kwargs={'units': units,
                 'return_sequences': True},
         input_shape=(num_samples, timesteps, embedding_dim))
示例#29
0
 def test_dropout_GRU(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   testing_utils.layer_test(
       keras.layers.GRU,
       kwargs={'units': units,
               'dropout': 0.1,
               'recurrent_dropout': 0.1},
       input_shape=(num_samples, timesteps, embedding_dim))
示例#30
0
 def test_return_sequences_LSTM(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   with self.test_session():
     testing_utils.layer_test(
         keras.layers.LSTM,
         kwargs={'units': units,
                 'return_sequences': True},
         input_shape=(num_samples, timesteps, embedding_dim))
示例#31
0
 def test_implementation_mode_GRU(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   for mode in [0, 1, 2]:
     testing_utils.layer_test(
         keras.layers.GRU,
         kwargs={'units': units,
                 'implementation': mode},
         input_shape=(num_samples, timesteps, embedding_dim))
示例#32
0
 def test_implementation_mode_SimpleRNN(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   with self.test_session():
     for mode in [0, 1, 2]:
       testing_utils.layer_test(
           keras.layers.SimpleRNN,
           kwargs={'units': units,
                   'implementation': mode},
           input_shape=(num_samples, timesteps, embedding_dim))
示例#33
0
 def test_dropout_GRU(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   with self.test_session():
     testing_utils.layer_test(
         keras.layers.GRU,
         kwargs={'units': units,
                 'dropout': 0.1,
                 'recurrent_dropout': 0.1},
         input_shape=(num_samples, timesteps, embedding_dim))
示例#34
0
  def test_cropping_3d(self):
    num_samples = 2
    stack_size = 2
    input_len_dim1 = 8
    input_len_dim2 = 8
    input_len_dim3 = 8
    croppings = [((2, 2), (1, 1), (2, 3)), 3, (0, 1, 1)]

    for cropping in croppings:
      for data_format in ['channels_last', 'channels_first']:
        if data_format == 'channels_first':
          inputs = np.random.rand(num_samples, stack_size, input_len_dim1,
                                  input_len_dim2, input_len_dim3)
        else:
          inputs = np.random.rand(num_samples, input_len_dim1, input_len_dim2,
                                  input_len_dim3, stack_size)
        # basic test
        with self.test_session(use_gpu=True):
          testing_utils.layer_test(
              keras.layers.Cropping3D,
              kwargs={'cropping': cropping,
                      'data_format': data_format},
              input_shape=inputs.shape)

        if len(croppings) == 3 and len(croppings[0]) == 2:
          # correctness test
          with self.test_session(use_gpu=True):
            layer = keras.layers.Cropping3D(
                cropping=cropping, data_format=data_format)
            layer.build(inputs.shape)
            output = layer(keras.backend.variable(inputs))
            if context.executing_eagerly():
              np_output = output.numpy()
            else:
              np_output = keras.backend.eval(output)
            # compare with numpy
            if data_format == 'channels_first':
              expected_out = inputs[:, :,
                                    cropping[0][0]:-cropping[0][1],
                                    cropping[1][0]:-cropping[1][1],
                                    cropping[2][0]:-cropping[2][1]]
            else:
              expected_out = inputs[:,
                                    cropping[0][0]:-cropping[0][1],
                                    cropping[1][0]:-cropping[1][1],
                                    cropping[2][0]:-cropping[2][1], :]
            np.testing.assert_allclose(np_output, expected_out)

    # test incorrect use
    with self.assertRaises(ValueError):
      keras.layers.Cropping3D(cropping=(1, 1))
    with self.assertRaises(ValueError):
      keras.layers.Cropping3D(cropping=None)
示例#35
0
 def test_dropout_LSTM(self):
   num_samples = 2
   timesteps = 3
   embedding_dim = 4
   units = 2
   with self.test_session():
     testing_utils.layer_test(
         keras.layers.LSTM,
         kwargs={'units': units,
                 'dropout': 0.1,
                 'recurrent_dropout': 0.1},
         input_shape=(num_samples, timesteps, embedding_dim))
示例#36
0
  def test_activation(self):
    # with string argument
    testing_utils.layer_test(
        keras.layers.Activation,
        kwargs={'activation': 'relu'},
        input_shape=(3, 2))

    # with function argument
    testing_utils.layer_test(
        keras.layers.Activation,
        kwargs={'activation': keras.backend.relu},
        input_shape=(3, 2))
示例#37
0
  def test_upsampling_3d(self):
    num_samples = 2
    stack_size = 2
    input_len_dim1 = 10
    input_len_dim2 = 11
    input_len_dim3 = 12

    for data_format in ['channels_first', 'channels_last']:
      if data_format == 'channels_first':
        inputs = np.random.rand(num_samples, stack_size, input_len_dim1,
                                input_len_dim2, input_len_dim3)
      else:
        inputs = np.random.rand(num_samples, input_len_dim1, input_len_dim2,
                                input_len_dim3, stack_size)

      # basic test
      with self.test_session(use_gpu=True):
        testing_utils.layer_test(
            keras.layers.UpSampling3D,
            kwargs={'size': (2, 2, 2),
                    'data_format': data_format},
            input_shape=inputs.shape)

        for length_dim1 in [2, 3]:
          for length_dim2 in [2]:
            for length_dim3 in [3]:
              layer = keras.layers.UpSampling3D(
                  size=(length_dim1, length_dim2, length_dim3),
                  data_format=data_format)
              layer.build(inputs.shape)
              output = layer(keras.backend.variable(inputs))
              np_output = keras.backend.eval(output)
              if data_format == 'channels_first':
                assert np_output.shape[2] == length_dim1 * input_len_dim1
                assert np_output.shape[3] == length_dim2 * input_len_dim2
                assert np_output.shape[4] == length_dim3 * input_len_dim3
              else:  # tf
                assert np_output.shape[1] == length_dim1 * input_len_dim1
                assert np_output.shape[2] == length_dim2 * input_len_dim2
                assert np_output.shape[3] == length_dim3 * input_len_dim3

              # compare with numpy
              if data_format == 'channels_first':
                expected_out = np.repeat(inputs, length_dim1, axis=2)
                expected_out = np.repeat(expected_out, length_dim2, axis=3)
                expected_out = np.repeat(expected_out, length_dim3, axis=4)
              else:  # tf
                expected_out = np.repeat(inputs, length_dim1, axis=1)
                expected_out = np.repeat(expected_out, length_dim2, axis=2)
                expected_out = np.repeat(expected_out, length_dim3, axis=3)

              np.testing.assert_allclose(np_output, expected_out)
示例#38
0
  def _run_test(self, kwargs, arg, values):
    num_samples = 2
    stack_size = 3
    length = 7

    test_kwargs = copy.copy(kwargs)
    for value in values:
      test_kwargs[arg] = value
      with self.test_session(use_gpu=True):
        testing_utils.layer_test(
            keras.layers.Conv1D,
            kwargs=test_kwargs,
            input_shape=(num_samples, length, stack_size))
 def test_conv_lstm_dropout(self):
   # check dropout
   with self.test_session():
     testing_utils.layer_test(
         keras.layers.ConvLSTM2D,
         kwargs={'data_format': 'channels_last',
                 'return_sequences': False,
                 'filters': 2,
                 'kernel_size': (3, 3),
                 'padding': 'same',
                 'dropout': 0.1,
                 'recurrent_dropout': 0.1},
         input_shape=(1, 2, 5, 5, 2))
示例#40
0
    def _run_test(self, kwargs, arg, values):
        num_samples = 2
        stack_size = 3
        length = 7

        test_kwargs = copy.copy(kwargs)
        for value in values:
            test_kwargs[arg] = value
            with self.test_session(use_gpu=True):
                testing_utils.layer_test(keras.layers.Conv1D,
                                         kwargs=test_kwargs,
                                         input_shape=(num_samples, length,
                                                      stack_size))
示例#41
0
 def test_implementation_mode_SimpleRNN(self):
     num_samples = 2
     timesteps = 3
     embedding_dim = 4
     units = 2
     with self.test_session():
         for mode in [0, 1, 2]:
             testing_utils.layer_test(keras.layers.SimpleRNN,
                                      kwargs={
                                          'units': units,
                                          'implementation': mode
                                      },
                                      input_shape=(num_samples, timesteps,
                                                   embedding_dim))
示例#42
0
 def test_dilated_conv1d(self):
   with self.test_session(use_gpu=True):
     testing_utils.layer_test(
         keras.layers.Conv1D,
         input_data=np.reshape(np.arange(4, dtype='float32'), (1, 4, 1)),
         kwargs={
             'filters': 1,
             'kernel_size': 2,
             'dilation_rate': 1,
             'padding': 'valid',
             'kernel_initializer': 'ones',
             'use_bias': False,
         },
         expected_output=[[[1], [3], [5]]])
示例#43
0
  def test_zero_padding_1d(self):
    num_samples = 2
    input_dim = 2
    num_steps = 5
    shape = (num_samples, num_steps, input_dim)
    inputs = np.ones(shape)

    # basic test
    with self.test_session(use_gpu=True):
      testing_utils.layer_test(
          keras.layers.ZeroPadding1D,
          kwargs={'padding': 2},
          input_shape=inputs.shape)
      testing_utils.layer_test(
          keras.layers.ZeroPadding1D,
          kwargs={'padding': (1, 2)},
          input_shape=inputs.shape)

    # correctness test
    with self.test_session(use_gpu=True):
      layer = keras.layers.ZeroPadding1D(padding=2)
      layer.build(shape)
      output = layer(keras.backend.variable(inputs))
      if context.executing_eagerly():
        np_output = output.numpy()
      else:
        np_output = keras.backend.eval(output)
      for offset in [0, 1, -1, -2]:
        np.testing.assert_allclose(np_output[:, offset, :], 0.)
      np.testing.assert_allclose(np_output[:, 2:-2, :], 1.)

      layer = keras.layers.ZeroPadding1D(padding=(1, 2))
      layer.build(shape)
      output = layer(keras.backend.variable(inputs))
      if context.executing_eagerly():
        np_output = output.numpy()
      else:
        np_output = keras.backend.eval(output)
      for left_offset in [0]:
        np.testing.assert_allclose(np_output[:, left_offset, :], 0.)
      for right_offset in [-1, -2]:
        np.testing.assert_allclose(np_output[:, right_offset, :], 0.)
      np.testing.assert_allclose(np_output[:, 1:-2, :], 1.)
      layer.get_config()

    # test incorrect use
    with self.assertRaises(ValueError):
      keras.layers.ZeroPadding1D(padding=(1, 1, 1))
    with self.assertRaises(ValueError):
      keras.layers.ZeroPadding1D(padding=None)
 def test_conv_lstm_dropout(self):
     # check dropout
     with self.test_session():
         testing_utils.layer_test(keras.layers.ConvLSTM2D,
                                  kwargs={
                                      'data_format': 'channels_last',
                                      'return_sequences': False,
                                      'filters': 2,
                                      'kernel_size': (3, 3),
                                      'padding': 'same',
                                      'dropout': 0.1,
                                      'recurrent_dropout': 0.1
                                  },
                                  input_shape=(1, 2, 5, 5, 2))
示例#45
0
    def _run_test(self, kwargs, arg, values):
        num_samples = 2
        stack_size = 3
        num_row = 7
        num_col = 6

        test_kwargs = copy.copy(kwargs)
        for value in values:
            test_kwargs[arg] = value
            with self.test_session(use_gpu=True):
                testing_utils.layer_test(keras.layers.SeparableConv2D,
                                         kwargs=test_kwargs,
                                         input_shape=(num_samples, num_row,
                                                      num_col, stack_size))
  def test_conv_lstm(self):
    num_row = 3
    num_col = 3
    filters = 2
    num_samples = 1
    input_channel = 2
    input_num_row = 5
    input_num_col = 5
    sequence_len = 2
    for data_format in ['channels_first', 'channels_last']:
      if data_format == 'channels_first':
        inputs = np.random.rand(num_samples, sequence_len,
                                input_channel,
                                input_num_row, input_num_col)
      else:
        inputs = np.random.rand(num_samples, sequence_len,
                                input_num_row, input_num_col,
                                input_channel)

      for return_sequences in [True, False]:
        with self.test_session():
          # test for return state:
          x = keras.Input(batch_shape=inputs.shape)
          kwargs = {'data_format': data_format,
                    'return_sequences': return_sequences,
                    'return_state': True,
                    'stateful': True,
                    'filters': filters,
                    'kernel_size': (num_row, num_col),
                    'padding': 'valid'}
          layer = keras.layers.ConvLSTM2D(**kwargs)
          layer.build(inputs.shape)
          outputs = layer(x)
          _, states = outputs[0], outputs[1:]
          self.assertEqual(len(states), 2)
          model = keras.models.Model(x, states[0])
          state = model.predict(inputs)

          self.assertAllClose(
              keras.backend.eval(layer.states[0]), state, atol=1e-4)

          # test for output shape:
          testing_utils.layer_test(
              keras.layers.ConvLSTM2D,
              kwargs={'data_format': data_format,
                      'return_sequences': return_sequences,
                      'filters': filters,
                      'kernel_size': (num_row, num_col),
                      'padding': 'valid'},
              input_shape=inputs.shape)
示例#47
0
  def _run_test(self, kwargs, arg, values):
    num_samples = 2
    stack_size = 3
    num_row = 7
    num_col = 6

    test_kwargs = copy.copy(kwargs)
    for value in values:
      test_kwargs[arg] = value
      with self.test_session(use_gpu=True):
        testing_utils.layer_test(
            keras.layers.DepthwiseConv2D,
            kwargs=test_kwargs,
            input_shape=(num_samples, num_row, num_col, stack_size))
示例#48
0
  def test_upsampling_2d(self):
    num_samples = 2
    stack_size = 2
    input_num_row = 11
    input_num_col = 12

    for data_format in ['channels_first', 'channels_last']:
      if data_format == 'channels_first':
        inputs = np.random.rand(num_samples, stack_size, input_num_row,
                                input_num_col)
      else:
        inputs = np.random.rand(num_samples, input_num_row, input_num_col,
                                stack_size)

      # basic test
      with self.test_session(use_gpu=True):
        testing_utils.layer_test(
            keras.layers.UpSampling2D,
            kwargs={'size': (2, 2),
                    'data_format': data_format},
            input_shape=inputs.shape)

        for length_row in [2]:
          for length_col in [2, 3]:
            layer = keras.layers.UpSampling2D(
                size=(length_row, length_col), data_format=data_format)
            layer.build(inputs.shape)
            output = layer(keras.backend.variable(inputs))
            if context.in_eager_mode():
              np_output = output.numpy()
            else:
              np_output = keras.backend.eval(output)
            if data_format == 'channels_first':
              assert np_output.shape[2] == length_row * input_num_row
              assert np_output.shape[3] == length_col * input_num_col
            else:  # tf
              assert np_output.shape[1] == length_row * input_num_row
              assert np_output.shape[2] == length_col * input_num_col

            # compare with numpy
            if data_format == 'channels_first':
              expected_out = np.repeat(inputs, length_row, axis=2)
              expected_out = np.repeat(expected_out, length_col, axis=3)
            else:  # tf
              expected_out = np.repeat(inputs, length_row, axis=1)
              expected_out = np.repeat(expected_out, length_col, axis=2)

            np.testing.assert_allclose(np_output, expected_out)
示例#49
0
  def test_dropout(self):
    with self.test_session():
      testing_utils.layer_test(
          keras.layers.Dropout, kwargs={'rate': 0.5}, input_shape=(3, 2))

    with self.test_session():
      testing_utils.layer_test(
          keras.layers.Dropout,
          kwargs={'rate': 0.5,
                  'noise_shape': [3, 1]},
          input_shape=(3, 2))

    # https://github.com/tensorflow/tensorflow/issues/14819
    with self.test_session():
      dropout = keras.layers.Dropout(0.5)
      self.assertEqual(True, dropout.supports_masking)
示例#50
0
  def test_locallyconnected_2d_channels_first(self):
    num_samples = 8
    filters = 3
    stack_size = 4
    num_row = 6
    num_col = 10

    with self.test_session():
      testing_utils.layer_test(
          keras.layers.LocallyConnected2D,
          kwargs={
              'filters': filters,
              'kernel_size': 3,
              'data_format': 'channels_first'
          },
          input_shape=(num_samples, num_row, num_col, stack_size))
示例#51
0
 def test_averagepooling_3d(self):
   pool_size = (3, 3, 3)
   testing_utils.layer_test(
       keras.layers.AveragePooling3D,
       kwargs={'strides': 2,
               'padding': 'valid',
               'pool_size': pool_size},
       input_shape=(3, 11, 12, 10, 4))
   testing_utils.layer_test(
       keras.layers.AveragePooling3D,
       kwargs={
           'strides': 3,
           'padding': 'valid',
           'data_format': 'channels_first',
           'pool_size': pool_size
       },
       input_shape=(3, 4, 11, 12, 10))
  def test_cropping_1d(self):
    num_samples = 2
    time_length = 4
    input_len_dim1 = 2
    inputs = np.random.rand(num_samples, time_length, input_len_dim1)

    with self.test_session(use_gpu=True):
      testing_utils.layer_test(
          keras.layers.Cropping1D,
          kwargs={'cropping': (2, 2)},
          input_shape=inputs.shape)

    # test incorrect use
    with self.assertRaises(ValueError):
      keras.layers.Cropping1D(cropping=(1, 1, 1))
    with self.assertRaises(ValueError):
      keras.layers.Cropping1D(cropping=None)