Exemplo n.º 1
0
    def test_input_fn(self):
        feature_map, label = input_fn.get_input_fn(
            tf.estimator.ModeKeys.TRAIN, [self.input_data_dir],
            'label.in_hospital_death.class',
            sequence_features=[
                'Observation.code', 'Observation.value.quantity.value',
                'Observation.value.quantity.unit',
                'Observation.code.harmonized:valueset-observation-name'
            ],
            dense_sequence_feature='Observation.value.quantity.value',
            required_sequence_feature='Observation.code.harmonized:valueset-'
            'observation-name',
            batch_size=2,
            shuffle=False)()
        with self.test_session() as sess:
            sess.run(tf.tables_initializer())
            coord = tf.train.Coordinator()
            tf.train.start_queue_runners(sess=sess, coord=coord)
            feature_map.update(label)
            results = sess.run(feature_map)
            expected_dense_shape = [2, 3, 1]
            expected_indices = [[0, 0, 0], [0, 1, 0], [0, 2, 0], [1, 0, 0]]
            expected_code = [b'loinc:4', b'loinc:6', b'loinc:6', b'loinc:1']
            expected_harm_code = [
                b'pulse', b'temperature', b'temperature', b'pulse'
            ]
            expected_value = [2.0, 20.0, -2.0, 1.0]

            code = results['s-Observation.code']
            self.assertAllEqual(expected_code, code.values)
            self.assertAllEqual(expected_indices, code.indices)
            self.assertAllEqual(expected_dense_shape, code.dense_shape)

            harm_code = results[
                's-Observation.code.harmonized:valueset-observation-name']
            self.assertAllEqual(expected_harm_code, harm_code.values)
            self.assertAllEqual(expected_indices, harm_code.indices)
            self.assertAllEqual(expected_dense_shape, harm_code.dense_shape)

            value = results['s-Observation.value.quantity.value']
            self.assertAllClose(np.array(expected_value), value.values)
            self.assertAllEqual(expected_indices, value.indices)
            self.assertAllEqual(expected_dense_shape, value.dense_shape)

            unit = results['s-Observation.value.quantity.unit']
            self.assertAllEqual([b'F'], unit.values)
            self.assertAllEqual([[0, 2, 0]], unit.indices)
            self.assertAllEqual(expected_dense_shape, unit.dense_shape)

            self.assertAllClose(results['label.in_hospital_death.class'],
                                np.array([[1.], [0.]]))

            self.assertAllEqual([[3], [1]], results['c-sequenceLength'])

            self.assertAllEqual([[[12], [11], [10]], [[12], [0], [0]]],
                                results['s-deltaTime'])
Exemplo n.º 2
0
    def test_model_integration(self):
        features, labels = input_fn.get_input_fn(
            tf.estimator.ModeKeys.TRAIN, [self.input_data_dir],
            'label.in_hospital_death.class',
            sequence_features=[
                'Observation.code', 'Observation.value.quantity.value',
                'Observation.value.quantity.unit',
                'Observation.code.harmonized:valueset-observation-name'
            ],
            dense_sequence_feature='Observation.value.quantity.value',
            required_sequence_feature=
            'Observation.code.harmonized:valueset-observation-name',
            batch_size=2,
            shuffle=False)()
        num_steps = 2
        hparams = contrib_training.HParams(
            batch_size=2,
            learning_rate=0.008,
            sequence_features=[
                'deltaTime', 'Observation.code',
                'Observation.value.quantity.value'
            ],
            categorical_values=['loinc:4', 'loinc:6', 'loinc:1'],
            categorical_seq_feature='Observation.code',
            context_features=['sequenceLength'],
            feature_value='Observation.value.quantity.value',
            label_key='label.in_hospital_death.class',
            attribution_threshold=-1.0,
            rnn_size=6,
            variational_recurrent_keep_prob=1.1,
            variational_input_keep_prob=1.1,
            variational_output_keep_prob=1.1,
            sequence_prediction=False,
            time_decayed=False,
            normalize=True,
            momentum=0.9,
            min_value=-1000.0,
            max_value=1000.0,
            volatility_loss_factor=0.0,
            attribution_max_delta_time=100000,
            input_keep_prob=1.0,
            include_sequence_prediction=False,
            include_gradients_attribution=True,
            include_gradients_sum_time_attribution=False,
            include_gradients_avg_time_attribution=False,
            include_path_integrated_gradients_attribution=True,
            include_diff_sequence_prediction_attribution=False,
            use_rnn_attention=True,
            attention_hidden_layer_dim=5,
            path_integrated_gradients_num_steps=10,
        )
        model = osm.ObservationSequenceModel()
        model_fn = model.create_model_fn(hparams)
        with tf.variable_scope('test'):
            model_fn_ops_train = model_fn(features, labels,
                                          tf.estimator.ModeKeys.TRAIN)
        with tf.variable_scope('test', reuse=True):
            model_fn_ops_eval = model_fn(features,
                                         labels=None,
                                         mode=tf.estimator.ModeKeys.PREDICT)

        with self.test_session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(tf.tables_initializer())
            # Test train.
            for i in range(num_steps):
                loss, _ = sess.run(
                    [model_fn_ops_train.loss, model_fn_ops_train.train_op])
                if i == 0:
                    initial_loss = loss
            self.assertLess(loss, initial_loss)
            # Test infer.
            sess.run(model_fn_ops_eval.predictions)