Example #1
0
    def testLearnMean(self):
        """Test learning to calculate a mean."""
        batch_size = 16
        sequence_length = 3
        train_steps = 200
        eval_steps = 20
        cell_type = 'basic_rnn'
        cell_size = 8
        optimizer_type = 'Momentum'
        learning_rate = 0.1
        momentum = 0.9
        loss_threshold = 0.1

        def get_mean_input_fn(batch_size, sequence_length, seed=None):
            def input_fn():
                # Create examples by choosing 'centers' and adding uniform noise.
                centers = math_ops.matmul(
                    random_ops.random_uniform([batch_size, 1],
                                              -0.75,
                                              0.75,
                                              dtype=dtypes.float32,
                                              seed=seed),
                    array_ops.ones([1, sequence_length]))
                noise = random_ops.random_uniform(
                    [batch_size, sequence_length],
                    -0.25,
                    0.25,
                    dtype=dtypes.float32,
                    seed=seed)
                sequences = centers + noise

                inputs = array_ops.expand_dims(sequences, 2)
                labels = math_ops.reduce_mean(sequences, reduction_indices=[1])
                return {'inputs': inputs}, labels

            return input_fn

        seq_columns = [
            feature_column.real_valued_column('inputs', dimension=cell_size)
        ]
        config = run_config.RunConfig(tf_random_seed=6)
        sequence_regressor = dynamic_rnn_estimator.single_value_rnn_regressor(
            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_mean_input_fn(batch_size, sequence_length, 121)
        eval_input_fn = get_mean_input_fn(batch_size, sequence_length, 212)

        sequence_regressor.fit(input_fn=train_input_fn, steps=train_steps)
        evaluation = sequence_regressor.evaluate(input_fn=eval_input_fn,
                                                 steps=eval_steps)
        loss = evaluation['loss']
        self.assertLess(
            loss, loss_threshold,
            'Loss should be less than {}; got {}'.format(loss_threshold, loss))
  def testLearnMean(self):
    """Test learning to calculate a mean."""
    batch_size = 16
    sequence_length = 3
    train_steps = 200
    eval_steps = 20
    cell_type = 'basic_rnn'
    cell_size = 8
    optimizer_type = 'Momentum'
    learning_rate = 0.1
    momentum = 0.9
    loss_threshold = 0.1

    def get_mean_input_fn(batch_size, sequence_length, seed=None):

      def input_fn():
        # Create examples by choosing 'centers' and adding uniform noise.
        centers = math_ops.matmul(
            random_ops.random_uniform(
                [batch_size, 1], -0.75, 0.75, dtype=dtypes.float32, seed=seed),
            array_ops.ones([1, sequence_length]))
        noise = random_ops.random_uniform(
            [batch_size, sequence_length],
            -0.25,
            0.25,
            dtype=dtypes.float32,
            seed=seed)
        sequences = centers + noise

        inputs = array_ops.expand_dims(sequences, 2)
        labels = math_ops.reduce_mean(sequences, reduction_indices=[1])
        return {'inputs': inputs}, labels

      return input_fn

    seq_columns = [
        feature_column.real_valued_column(
            'inputs', dimension=cell_size)
    ]
    config = run_config.RunConfig(tf_random_seed=6)
    sequence_regressor = dynamic_rnn_estimator.single_value_rnn_regressor(
        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_mean_input_fn(batch_size, sequence_length, 121)
    eval_input_fn = get_mean_input_fn(batch_size, sequence_length, 212)

    sequence_regressor.fit(input_fn=train_input_fn, steps=train_steps)
    evaluation = sequence_regressor.evaluate(
        input_fn=eval_input_fn, steps=eval_steps)
    loss = evaluation['loss']
    self.assertLess(loss, loss_threshold,
                    'Loss should be less than {}; got {}'.format(loss_threshold,
                                                                 loss))
    def testLearnMean(self):
        """Test that `_SequenceRegressor` can learn to calculate a mean."""
        batch_size = 16
        sequence_length = 3
        train_steps = 200
        eval_steps = 20
        cell_type = "basic_rnn"
        cell_size = 8
        optimizer_type = "Momentum"
        learning_rate = 0.5
        momentum = 0.9
        loss_threshold = 0.1

        def get_mean_input_fn(batch_size, sequence_length, seed=None):
            def input_fn():
                # Create examples by choosing 'centers' and adding uniform noise.
                centers = tf.matmul(
                    tf.random_uniform([batch_size, 1], -0.75, 0.75, dtype=tf.float32, seed=seed),
                    tf.ones([1, sequence_length]),
                )
                noise = tf.random_uniform([batch_size, sequence_length], -0.25, 0.25, dtype=tf.float32, seed=seed)
                sequences = centers + noise

                inputs = tf.expand_dims(sequences, 2)
                labels = tf.reduce_mean(sequences, reduction_indices=[1])
                return {"inputs": inputs}, labels

            return input_fn

        config = tf.contrib.learn.RunConfig(tf_random_seed=6)
        sequence_regressor = dynamic_rnn_estimator.single_value_rnn_regressor(
            num_units=cell_size,
            cell_type=cell_type,
            optimizer_type=optimizer_type,
            learning_rate=learning_rate,
            momentum=momentum,
            config=config,
        )

        train_input_fn = get_mean_input_fn(batch_size, sequence_length, 121)
        eval_input_fn = get_mean_input_fn(batch_size, sequence_length, 212)

        sequence_regressor.fit(input_fn=train_input_fn, steps=train_steps)
        evaluation = sequence_regressor.evaluate(input_fn=eval_input_fn, steps=eval_steps)
        loss = evaluation["loss"]
        self.assertLess(loss, loss_threshold, "Loss should be less than {}; got {}".format(loss_threshold, loss))