class_docstr: Contains code meant to be executed by some `ModelOwner` Player.
  
  Args:
    player_name: `str`, name of the `tfe.player.Player`, representing the model owner.
    model_name: `str`, name of the model to be trained
    data_name: `str`, name of dataset that model trained on
code: def validate_model(self):
      with tf.device(self.player.device_name):
          with tf.name_scope("data_loading"):
              data_generator = self.test_dataset.generator_builder()
              data_iter = data_generator()
  
          # this maybe a bug in tensorflow
          # when using `model.fit` or `model.evalute` within tf.device context
          # program will stop
          with tf.name_scope("validate_model"):
              y_preds = []
              y_trues = []
              for index, (input_x, input_y) in enumerate(data_iter):
                  y_pred = self.model(input_x)
                  y_preds.append(y_pred)
                  y_trues.append(input_y)
                  if index + 1 >= self.test_dataset.iterations:
                      break
  
              y_pred = tf.concat(y_preds, axis=0)
              y_true = tf.concat(y_trues, axis=0)
              tf.print(self.metrics(y_true, y_pred))
  
imports: import argparse
  import sys
  import tensorflow
  import tf_encrypted
  from tf_encrypted.keras.datasets import *
  from tf_encrypted.protocol import ABY3
  from tf_encrypted.protocol import Pond
  from tf_encrypted.protocol import SecureNN
label_desc: Use image node_id 6 for calling the ModelOwner obj's underlying member method code with example usage: obj.validate_model() without return types