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))
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])