# tfr.keras.pipeline.AbstractPipeline

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/ranking/blob/v0.5.3/tensorflow_ranking/python/keras/pipeline.py#L32-L156) |

Interface for ranking pipeline to train a [`tf.keras.Model`](https://www.tensorflow.org/api_docs/python/tf/keras/Model).

The `AbstractPipeline` class is an abstract class to train and validate a
ranking model in tfr.keras.

To be implemented by subclasses:

- `build_loss()`: Contains the logic to build a [`tf.keras.losses.Loss`](https://www.tensorflow.org/api_docs/python/tf/keras/losses/Loss) or a dict or list of [`tf.keras.losses.Loss`](https://www.tensorflow.org/api_docs/python/tf/keras/losses/Loss)s to be optimized in training.
- `build_metrics()`: Contains the logic to build a list or dict of [`tf.keras.metrics.Metric`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/Metric)s to monitor and evaluate the training.
- `build_weighted_metrics()`: Contains the logic to build a list or dict of [`tf.keras.metrics.Metric`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/Metric)s which will take the weights.
- `train_and_validate()`: Contrains the main training pipeline for training and validation.

Example subclass implementation:

    class BasicPipeline(AbstractPipeline):

      def __init__(self, model, train_data, valid_data, name=None):
        self._model = model
        self._train_data = train_data
        self._valid_data = valid_data
        self._name = name

      def build_loss(self):
        return tfr.keras.losses.get('softmax_loss')

      def build_metrics(self):
        return [
            tfr.keras.metrics.get(
                'ndcg', topn=topn, name='ndcg_{}'.format(topn)
            ) for topn in [1, 5, 10]
        ]

      def build_weighted_metrics(self):
        return [
            tfr.keras.metrics.get(
                'ndcg', topn=topn, name='weighted_ndcg_{}'.format(topn)
            ) for topn in [1, 5, 10]
        ]

      def train_and_validate(self, *arg, **kwargs):
        self._model.compile(
            optimizer=tf.keras.optimizers.SGD(learning_rate=0.001),
            loss=self.build_loss(),
            metrics=self.build_metrics(),
            weighted_metrics=self.build_weighted_metrics())
        self._model.fit(
            x=self._train_data,
            epochs=100,
            validation_data=self._valid_data)

## Methods

### `build_loss`

[View source](https://github.com/tensorflow/ranking/blob/v0.5.3/tensorflow_ranking/python/keras/pipeline.py#L90-L104)

    @abc.abstractmethod
    build_loss() -> Any

Returns the loss for model.compile.

#### Example usage:

    pipeline = BasicPipeline(model, train_data, valid_data)
    loss = pipeline.build_loss()

<br />

<br />

<br />

| Returns ||
|---|---|
| A [`tf.keras.losses.Loss`](https://www.tensorflow.org/api_docs/python/tf/keras/losses/Loss) or a dict or list of [`tf.keras.losses.Loss`](https://www.tensorflow.org/api_docs/python/tf/keras/losses/Loss). ||

<br />

### `build_metrics`

[View source](https://github.com/tensorflow/ranking/blob/v0.5.3/tensorflow_ranking/python/keras/pipeline.py#L106-L120)

    @abc.abstractmethod
    build_metrics() -> Any

Returns a list of ranking metrics for `model.compile()`.

#### Example usage:

    pipeline = BasicPipeline(model, train_data, valid_data)
    metrics = pipeline.build_metrics()

<br />

<br />

<br />

| Returns ||
|---|---|
| A list or a dict of [`tf.keras.metrics.Metric`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/Metric)s. ||

<br />

### `build_weighted_metrics`

[View source](https://github.com/tensorflow/ranking/blob/v0.5.3/tensorflow_ranking/python/keras/pipeline.py#L122-L136)

    @abc.abstractmethod
    build_weighted_metrics() -> Any

Returns a list of weighted ranking metrics for model.compile.

#### Example usage:

    pipeline = BasicPipeline(model, train_data, valid_data)
    weighted_metrics = pipeline.build_weighted_metrics()

<br />

<br />

<br />

| Returns ||
|---|---|
| A list or a dict of [`tf.keras.metrics.Metric`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/Metric)s. ||

<br />

### `train_and_validate`

[View source](https://github.com/tensorflow/ranking/blob/v0.5.3/tensorflow_ranking/python/keras/pipeline.py#L138-L156)

    @abc.abstractmethod
    train_and_validate(
        *arg, **kwargs
    ) -> Any

Constructs and runs the training pipeline.

#### Example usage:

    pipeline = BasicPipeline(model, train_data, valid_data)
    pipeline.train_and_validate()

<br />

<br />

<br />

| Args ||
|---|---|
| `*arg` | arguments that might be used in the training pipeline. |
| `**kwargs` | keyword arguments that might be used in the training pipeline. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| None or a trained [`tf.keras.Model`](https://www.tensorflow.org/api_docs/python/tf/keras/Model) or a path to a saved [`tf.keras.Model`](https://www.tensorflow.org/api_docs/python/tf/keras/Model). ||

<br />