import tensorflow as tf

        params = [self.w0, self.b0, self.w1, self.b1]
        grads = [tf.cast(grad, tf.float32) for grad in grads]
        with tf.name_scope('update'):
            update_op = tf.group(*[
                param.assign(param - grad * self.LEARNING_RATE)
                for param, grad in zip(params, grads)
            ])
            # return update_op

        with tf.name_scope('validate'):
            x, y = self._build_data_pipeline()
            y_hat, loss = self._build_validation_model(x, y)

            with tf.control_dependencies([update_op]):
                return tf.print('expect', loss, y, y_hat, summarize=50)


class DataOwner:
