Exemplo n.º 1
0
  def testFailsOnNonIdentityTranslator(self):
    component_spec = spec_pb2.ComponentSpec()
    text_format.Parse("""
        name: "test"
        network_unit {
          registered_name: "IdentityNetwork"
        }
        linked_feature {
          name: "features" embedding_dim: -1 size: 1
          source_translator: "history"
          source_component: "mock"
        }
        """, component_spec)

    # For feature extraction:
    with tf.Graph().as_default():
      comp = bulk_component.BulkFeatureExtractorComponentBuilder(
          self.master, component_spec)

      # Expect feature extraction to generate a error due to the "history"
      # translator.
      with self.assertRaises(NotImplementedError):
        comp.build_greedy_training(self.master_state, self.network_states)

    # As well as annotation:
    with tf.Graph().as_default():
      comp = bulk_component.BulkAnnotatorComponentBuilder(
          self.master, component_spec)

      with self.assertRaises(NotImplementedError):
        comp.build_greedy_training(self.master_state, self.network_states)
Exemplo n.º 2
0
  def testNormalFixedFeaturesAreDifferentiable(self):
    component_spec = spec_pb2.ComponentSpec()
    text_format.Parse("""
        name: "test"
        network_unit {
          registered_name: "IdentityNetwork"
        }
        fixed_feature {
          name: "fixed" embedding_dim: 32 size: 1
          pretrained_embedding_matrix { part {} }
          vocab { part {} }
        }
        component_builder {
          registered_name: "bulk_component.BulkFeatureExtractorComponentBuilder"
        }
        """, component_spec)
    with tf.Graph().as_default():
      comp = bulk_component.BulkFeatureExtractorComponentBuilder(
          self.master, component_spec)

      # Get embedding matrix variables.
      with tf.variable_scope(comp.name, reuse=True):
        fixed_embedding_matrix = tf.get_variable(
            network_units.fixed_embeddings_name(0))

      # Get output layer.
      comp.build_greedy_training(self.master_state, self.network_states)
      activations = self.network_states[comp.name].activations
      outputs = activations[comp.network.layers[0].name].bulk_tensor

      # Compute the gradient of the output layer w.r.t. the embedding matrix.
      # This should be well-defined for in the normal case.
      gradients = tf.gradients(outputs, fixed_embedding_matrix)
      self.assertEqual(len(gradients), 1)
      self.assertFalse(gradients[0] is None)
Exemplo n.º 3
0
  def testConstantFixedFeatureFailsIfNotPretrained(self):
    component_spec = spec_pb2.ComponentSpec()
    text_format.Parse("""
        name: "test"
        network_unit {
          registered_name: "IdentityNetwork"
        }
        fixed_feature {
          name: "fixed" embedding_dim: 32 size: 1
          is_constant: true
        }
        component_builder {
          registered_name: "bulk_component.BulkFeatureExtractorComponentBuilder"
        }
        """, component_spec)
    with tf.Graph().as_default():
      comp = bulk_component.BulkFeatureExtractorComponentBuilder(
          self.master, component_spec)

      with self.assertRaisesRegexp(ValueError,
                                   'Constant embeddings must be pretrained'):
        comp.build_greedy_training(self.master_state, self.network_states)
      with self.assertRaisesRegexp(ValueError,
                                   'Constant embeddings must be pretrained'):
        comp.build_greedy_inference(
            self.master_state, self.network_states, during_training=True)
      with self.assertRaisesRegexp(ValueError,
                                   'Constant embeddings must be pretrained'):
        comp.build_greedy_inference(
            self.master_state, self.network_states, during_training=False)
Exemplo n.º 4
0
  def testFailsOnRecurrentLinkedFeature(self):
    component_spec = spec_pb2.ComponentSpec()
    text_format.Parse("""
        name: "test"
        network_unit {
          registered_name: "FeedForwardNetwork"
          parameters {
            key: 'hidden_layer_sizes' value: '64'
          }
        }
        linked_feature {
          name: "features" embedding_dim: -1 size: 1
          source_translator: "identity"
          source_component: "test"
          source_layer: "layer_0"
        }
        """, component_spec)

    # For feature extraction:
    with tf.Graph().as_default():
      comp = bulk_component.BulkFeatureExtractorComponentBuilder(
          self.master, component_spec)

      # Expect feature extraction to generate a error due to the "history"
      # translator.
      with self.assertRaises(RuntimeError):
        comp.build_greedy_training(self.master_state, self.network_states)

    # As well as annotation:
    with tf.Graph().as_default():
      comp = bulk_component.BulkAnnotatorComponentBuilder(
          self.master, component_spec)

      with self.assertRaises(RuntimeError):
        comp.build_greedy_training(self.master_state, self.network_states)
    def testConstantFixedFeaturesAreNotDifferentiableButOthersAre(self):
        component_spec = spec_pb2.ComponentSpec()
        text_format.Parse(
            """
        name: "test"
        network_unit {
          registered_name: "IdentityNetwork"
        }
        fixed_feature {
          name: "constant" embedding_dim: 32 size: 1
          is_constant: true
          pretrained_embedding_matrix { part {} }
          vocab { part {} }
        }
        fixed_feature {
          name: "trainable" embedding_dim: 32 size: 1
          pretrained_embedding_matrix { part {} }
          vocab { part {} }
        }
        component_builder {
          registered_name: "bulk_component.BulkFeatureExtractorComponentBuilder"
        }
        """, component_spec)
        with tf.Graph().as_default():
            comp = bulk_component.BulkFeatureExtractorComponentBuilder(
                self.master, component_spec)

            # Get embedding matrix variables.
            with tf.variable_scope(comp.name, reuse=True):
                constant_embedding_matrix = tf.get_variable(
                    network_units.fixed_embeddings_name(0))
                trainable_embedding_matrix = tf.get_variable(
                    network_units.fixed_embeddings_name(1))

            # Get output layer.
            comp.build_greedy_training(self.master_state, self.network_states)
            activations = self.network_states[comp.name].activations
            outputs = activations[comp.network.layers[0].name].bulk_tensor

            # The constant embeddings are non-differentiable.
            constant_gradients = tf.gradients(outputs,
                                              constant_embedding_matrix)
            self.assertEqual(len(constant_gradients), 1)
            self.assertTrue(constant_gradients[0] is None)

            # The trainable embeddings are differentiable.
            trainable_gradients = tf.gradients(outputs,
                                               trainable_embedding_matrix)
            self.assertEqual(len(trainable_gradients), 1)
            self.assertFalse(trainable_gradients[0] is None)
    def testPreCreateCalledBeforeCreate(self):
        component_spec = spec_pb2.ComponentSpec()
        text_format.Parse(
            """
        name: "test"
        network_unit {
          registered_name: "IdentityNetwork"
        }
        """, component_spec)

        class AssertPreCreateBeforeCreateNetwork(
                network_units.NetworkUnitInterface):
            """Mock that asserts that .create() is called before .pre_create()."""
            def __init__(self, comp, test_fixture):
                super(AssertPreCreateBeforeCreateNetwork, self).__init__(comp)
                self._test_fixture = test_fixture
                self._pre_create_called = False

            def get_logits(self, network_tensors):
                return tf.zeros([2, 1], dtype=tf.float32)

            def pre_create(self, *unused_args):
                self._pre_create_called = True

            def create(self, *unused_args, **unuesd_kwargs):
                self._test_fixture.assertTrue(self._pre_create_called)
                return []

        builder = bulk_component.BulkFeatureExtractorComponentBuilder(
            self.master, component_spec)
        builder.network = AssertPreCreateBeforeCreateNetwork(builder, self)
        builder.build_greedy_training(component.MasterState(['foo', 'bar'], 2),
                                      self.network_states)

        self.setUp()
        builder = bulk_component.BulkFeatureExtractorComponentBuilder(
            self.master, component_spec)
        builder.network = AssertPreCreateBeforeCreateNetwork(builder, self)
        builder.build_greedy_inference(
            component.MasterState(['foo', 'bar'], 2), self.network_states)

        self.setUp()
        builder = bulk_component.BulkFeatureIdExtractorComponentBuilder(
            self.master, component_spec)
        builder.network = AssertPreCreateBeforeCreateNetwork(builder, self)
        builder.build_greedy_training(component.MasterState(['foo', 'bar'], 2),
                                      self.network_states)

        self.setUp()
        builder = bulk_component.BulkFeatureIdExtractorComponentBuilder(
            self.master, component_spec)
        builder.network = AssertPreCreateBeforeCreateNetwork(builder, self)
        builder.build_greedy_inference(
            component.MasterState(['foo', 'bar'], 2), self.network_states)

        self.setUp()
        builder = bulk_component.BulkAnnotatorComponentBuilder(
            self.master, component_spec)
        builder.network = AssertPreCreateBeforeCreateNetwork(builder, self)
        builder.build_greedy_training(component.MasterState(['foo', 'bar'], 2),
                                      self.network_states)

        self.setUp()
        builder = bulk_component.BulkAnnotatorComponentBuilder(
            self.master, component_spec)
        builder.network = AssertPreCreateBeforeCreateNetwork(builder, self)
        builder.build_greedy_inference(
            component.MasterState(['foo', 'bar'], 2), self.network_states)