예제 #1
0
 def reset(self, executor, reset_program=None):
     if reset_program is None:
         reset_program = Program()
     with program_guard(main_program=reset_program):
         var = _clone_var_(reset_program.current_block(), self.has_state)
         layers.fill_constant(
             shape=var.shape, value=0, dtype=var.dtype, out=var)
     executor.run(reset_program)
예제 #2
0
 def eval(self, executor, eval_program=None):
     if eval_program is None:
         eval_program = Program()
     block = eval_program.current_block()
     kwargs = {'main_program': eval_program}
     total = _clone_var_(block, self.total)
     correct = _clone_var_(block, self.correct)
     total = layers.cast(total, dtype='float32', **kwargs)
     correct = layers.cast(correct, dtype='float32', **kwargs)
     out = layers.elementwise_div(x=correct, y=total, **kwargs)
     return np.array(executor.run(eval_program, fetch_list=[out])[0])
예제 #3
0
 def eval(self, executor, eval_program=None):
     if eval_program is None:
         eval_program = Program()
     block = eval_program.current_block()
     kwargs = {'main_program': eval_program}
     total = _clone_var_(block, self.total)
     correct = _clone_var_(block, self.correct)
     total = layers.cast(total, dtype='float32', **kwargs)
     correct = layers.cast(correct, dtype='float32', **kwargs)
     out = layers.elementwise_div(x=correct, y=total, **kwargs)
     return np.array(executor.run(eval_program, fetch_list=[out])[0])
예제 #4
0
    def reset(self, executor, reset_program=None):
        """
        reset metric states at the begin of each pass/user specified batch
        """
        if reset_program is None:
            reset_program = Program()

        with program_guard(main_program=reset_program):
            for var in self.states:
                assert isinstance(var, Variable)
                g_var = _clone_var_(reset_program.current_block(), var)
                layers.fill_constant(
                    shape=g_var.shape, value=0.0, dtype=g_var.dtype, out=g_var)

        executor.run(reset_program)
예제 #5
0
 def eval(self, executor, eval_program=None):
     if eval_program is None:
         eval_program = Program()
     block = eval_program.current_block()
     with program_guard(main_program=eval_program):
         total_distance = _clone_var_(block, self.total_distance)
         seq_num = _clone_var_(block, self.seq_num)
         instance_error = _clone_var_(block, self.instance_error)
         seq_num = layers.cast(x=seq_num, dtype='float32')
         instance_error = layers.cast(x=instance_error, dtype='float32')
         avg_distance = layers.elementwise_div(x=total_distance, y=seq_num)
         avg_instance_error = layers.elementwise_div(x=instance_error,
                                                     y=seq_num)
         result = executor.run(
             eval_program, fetch_list=[avg_distance, avg_instance_error])
     return np.array(result[0]), np.array(result[1])
예제 #6
0
 def eval(self, executor, eval_program=None):
     if eval_program is None:
         eval_program = Program()
     block = eval_program.current_block()
     with program_guard(main_program=eval_program):
         total_distance = _clone_var_(block, self.total_distance)
         seq_num = _clone_var_(block, self.seq_num)
         instance_error = _clone_var_(block, self.instance_error)
         seq_num = layers.cast(x=seq_num, dtype='float32')
         instance_error = layers.cast(x=instance_error, dtype='float32')
         avg_distance = layers.elementwise_div(x=total_distance, y=seq_num)
         avg_instance_error = layers.elementwise_div(
             x=instance_error, y=seq_num)
         result = executor.run(
             eval_program, fetch_list=[avg_distance, avg_instance_error])
     return np.array(result[0]), np.array(result[1])
예제 #7
0
 def eval(self, executor, eval_program=None):
     if eval_program is None:
         eval_program = Program()
     block = eval_program.current_block()
     num_infer_chunks, num_label_chunks, num_correct_chunks = executor.run(
         eval_program,
         fetch_list=[_clone_var_(block, state) for state in self.states])
     num_infer_chunks = num_infer_chunks[0]
     num_label_chunks = num_label_chunks[0]
     num_correct_chunks = num_correct_chunks[0]
     precision = float(
         num_correct_chunks) / num_infer_chunks if num_infer_chunks else 0
     recall = float(
         num_correct_chunks) / num_label_chunks if num_label_chunks else 0
     f1_score = float(2 * precision * recall) / (
         precision + recall) if num_correct_chunks else 0
     return np.array([precision], dtype='float32'), np.array(
         [recall], dtype='float32'), np.array([f1_score], dtype='float32')
예제 #8
0
 def eval(self, executor, eval_program=None):
     if eval_program is None:
         eval_program = Program()
     block = eval_program.current_block()
     num_infer_chunks, num_label_chunks, num_correct_chunks = executor.run(
         eval_program,
         fetch_list=[_clone_var_(block, state) for state in self.states])
     num_infer_chunks = num_infer_chunks[0]
     num_label_chunks = num_label_chunks[0]
     num_correct_chunks = num_correct_chunks[0]
     precision = float(
         num_correct_chunks) / num_infer_chunks if num_infer_chunks else 0
     recall = float(
         num_correct_chunks) / num_label_chunks if num_label_chunks else 0
     f1_score = float(2 * precision * recall) / (
         precision + recall) if num_correct_chunks else 0
     return np.array(
         [precision], dtype='float32'), np.array(
             [recall], dtype='float32'), np.array(
                 [f1_score], dtype='float32')