Esempio n. 1
0
    def testLearnMajority(self):
        """Test that `_SequenceClassifier` can learn the 'majority' function."""
        batch_size = 16
        sequence_length = 7
        train_steps = 200
        eval_steps = 20
        cell_type = 'lstm'
        cell_size = 4
        optimizer_type = 'Momentum'
        learning_rate = 2.0
        momentum = 0.9
        accuracy_threshold = 0.9

        def get_majority_input_fn(batch_size, sequence_length, seed=None):
            tf.set_random_seed(seed)

            def input_fn():
                random_sequence = tf.random_uniform(
                    [batch_size, sequence_length],
                    0,
                    2,
                    dtype=tf.int32,
                    seed=seed)
                inputs = tf.expand_dims(tf.to_float(random_sequence), 2)
                labels = tf.to_int32(
                    tf.squeeze(
                        tf.reduce_sum(inputs, reduction_indices=[1]) > (
                            sequence_length / 2.0)))
                return {'inputs': inputs}, labels

            return input_fn

        seq_columns = [
            tf.contrib.layers.real_valued_column('inputs', dimension=cell_size)
        ]
        config = tf.contrib.learn.RunConfig(tf_random_seed=77)
        sequence_classifier = dynamic_rnn_estimator.single_value_rnn_classifier(
            num_classes=2,
            num_units=cell_size,
            sequence_feature_columns=seq_columns,
            cell_type=cell_type,
            optimizer_type=optimizer_type,
            learning_rate=learning_rate,
            momentum=momentum,
            config=config)

        train_input_fn = get_majority_input_fn(batch_size, sequence_length,
                                               1111)
        eval_input_fn = get_majority_input_fn(batch_size, sequence_length,
                                              2222)

        sequence_classifier.fit(input_fn=train_input_fn, steps=train_steps)
        evaluation = sequence_classifier.evaluate(input_fn=eval_input_fn,
                                                  steps=eval_steps)
        accuracy = evaluation['accuracy']
        self.assertGreater(
            accuracy, accuracy_threshold,
            'Accuracy should be higher than {}; got {}'.format(
                accuracy_threshold, accuracy))
  def testLearnMajority(self):
    """Test that `_SequenceClassifier` can learn the 'majority' function."""
    batch_size = 16
    sequence_length = 7
    train_steps = 200
    eval_steps = 20
    cell_type = 'lstm'
    cell_size = 4
    optimizer_type = 'Momentum'
    learning_rate = 2.0
    momentum = 0.9
    accuracy_threshold = 0.9

    def get_majority_input_fn(batch_size, sequence_length, seed=None):
      tf.set_random_seed(seed)
      def input_fn():
        random_sequence = tf.random_uniform(
            [batch_size, sequence_length], 0, 2, dtype=tf.int32, seed=seed)
        inputs = tf.expand_dims(tf.to_float(random_sequence), 2)
        labels = tf.to_int32(
            tf.squeeze(
                tf.reduce_sum(
                    inputs, reduction_indices=[1]) > (sequence_length / 2.0)))
        return {'inputs': inputs}, labels
      return input_fn

    seq_columns = [tf.contrib.layers.real_valued_column(
        'inputs', dimension=cell_size)]
    config = tf.contrib.learn.RunConfig(tf_random_seed=77)
    sequence_classifier = dynamic_rnn_estimator.single_value_rnn_classifier(
        num_classes=2,
        num_units=cell_size,
        sequence_feature_columns=seq_columns,
        cell_type=cell_type,
        optimizer_type=optimizer_type,
        learning_rate=learning_rate,
        momentum=momentum,
        config=config)

    train_input_fn = get_majority_input_fn(batch_size, sequence_length, 1111)
    eval_input_fn = get_majority_input_fn(batch_size, sequence_length, 2222)

    sequence_classifier.fit(input_fn=train_input_fn, steps=train_steps)
    evaluation = sequence_classifier.evaluate(
        input_fn=eval_input_fn, steps=eval_steps)
    accuracy = evaluation['accuracy']
    self.assertGreater(accuracy, accuracy_threshold,
                       'Accuracy should be higher than {}; got {}'.format(
                           accuracy_threshold, accuracy))
Esempio n. 3
0
  def testLearnMajority(self):
    """Test learning the 'majority' function."""
    batch_size = 16
    sequence_length = 7
    train_steps = 200
    eval_steps = 20
    cell_type = 'lstm'
    cell_size = 4
    optimizer_type = 'Momentum'
    learning_rate = 2.0
    momentum = 0.9
    accuracy_threshold = 0.9

    def get_majority_input_fn(batch_size, sequence_length, seed=None):
      tf.set_random_seed(seed)
      def input_fn():
        random_sequence = tf.random_uniform(
            [batch_size, sequence_length], 0, 2, dtype=tf.int32, seed=seed)
        inputs = tf.expand_dims(tf.to_float(random_sequence), 2)
        labels = tf.to_int32(
            tf.squeeze(
                tf.reduce_sum(
                    inputs, reduction_indices=[1]) > (sequence_length / 2.0)))
        return {'inputs': inputs}, labels
      return input_fn

    seq_columns = [tf.contrib.layers.real_valued_column(
        'inputs', dimension=cell_size)]
    config = tf.contrib.learn.RunConfig(tf_random_seed=77)
    sequence_classifier = dynamic_rnn_estimator.single_value_rnn_classifier(
        num_classes=2,
        num_units=cell_size,
        sequence_feature_columns=seq_columns,
        cell_type=cell_type,
        optimizer_type=optimizer_type,
        learning_rate=learning_rate,
        momentum=momentum,
        config=config,
        predict_probabilities=True)

    train_input_fn = get_majority_input_fn(batch_size, sequence_length, 1111)
    eval_input_fn = get_majority_input_fn(batch_size, sequence_length, 2222)

    sequence_classifier.fit(input_fn=train_input_fn, steps=train_steps)
    evaluation = sequence_classifier.evaluate(
        input_fn=eval_input_fn, steps=eval_steps)
    accuracy = evaluation['accuracy']
    self.assertGreater(accuracy, accuracy_threshold,
                       'Accuracy should be higher than {}; got {}'.format(
                           accuracy_threshold, accuracy))

    # Testing `predict` when `predict_probabilities=True`.
    prediction_dict = sequence_classifier.predict(
        input_fn=eval_input_fn, as_iterable=False)
    self.assertListEqual(
        sorted(list(prediction_dict.keys())),
        sorted([dynamic_rnn_estimator.RNNKeys.PREDICTIONS_KEY,
                dynamic_rnn_estimator.RNNKeys.PROBABILITIES_KEY,
                dynamic_rnn_estimator.RNNKeys.FINAL_STATE_KEY]))
    predictions = prediction_dict[dynamic_rnn_estimator.RNNKeys.PREDICTIONS_KEY]
    probabilities = prediction_dict[
        dynamic_rnn_estimator.RNNKeys.PROBABILITIES_KEY]
    self.assertListEqual(list(predictions.shape), [batch_size])
    self.assertListEqual(list(probabilities.shape), [batch_size, 2])