class_docstr: Contains methods meant to be executed by a data owner.
  
  Args:
    player_name: `str`, name of the `tfe.player.Player`
                 representing the data owner
    model_name: `str`, name of the model to be trained
    data_name: `str`, name of dataset that model trained on
    data_slice: specify which part of this dataset to use
code: def _build_model(self):
      with tf.device(self.player.device_name):
          self.model = globals()[self.model_name](
              self.train_dataset.batch_shape,
              self.train_dataset.num_classes,
              private=False,
          )
          if self.train_dataset.num_classes > 1:
              self.loss = tf.keras.losses.CategoricalCrossentropy(
                  from_logits=True
              )
              self.metrics = ["categorical_accuracy"]
          else:
              self.loss = tf.keras.losses.BinaryCrossentropy(
                  from_logits=True
              )
              self.metrics = ["binary_accuracy"]
          self.model.compile(loss=self.loss, metrics=self.metrics)
  
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 3 for calling the DataOwner obj's underlying member method code with example usage: obj._build_model() without return types