class_docstr: A deep convolutional encoder, as described in
  https://arxiv.org/abs/1611.02344. The encoder supports optional positions
  embeddings.
  
  Params:
    attention_cnn.units: Number of units in `cnn_a`. Same in each layer.
    attention_cnn.kernel_size: Kernel size for `cnn_a`.
    attention_cnn.layers: Number of layers in `cnn_a`.
    embedding_dropout_keep_prob: Dropout keep probability
      applied to the embeddings.
    output_cnn.units: Number of units in `cnn_c`. Same in each layer.
    output_cnn.kernel_size: Kernel size for `cnn_c`.
    output_cnn.layers: Number of layers in `cnn_c`.
    position_embeddings.enable: If true, add position embeddings to the
      inputs before pooling.
    position_embeddings.combiner_fn: Function used to combine the
      position embeddings with the inputs. For example, `tensorflow.add`.
    position_embeddings.num_positions: Size of the position embedding matrix.
      This should be set to the maximum sequence length of the inputs.
code: def default_params():
      return {
          "attention_cnn.units": 512,
          "attention_cnn.kernel_size": 3,
          "attention_cnn.layers": 15,
          "embedding_dropout_keep_prob": 0.8,
          "output_cnn.units": 256,
          "output_cnn.kernel_size": 3,
          "output_cnn.layers": 5,
          "position_embeddings.enable": True,
          "position_embeddings.combiner_fn": "tensorflow.multiply",
          "position_embeddings.num_positions": 100,
      }
  
file_path: seq2seq/seq2seq/encoders/conv_encoder.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from pydoc import locate
  import tensorflow
  from seq2seq.encoders.encoder import Encoder, EncoderOutput
  from seq2seq.encoders.pooling_encoder import _create_position_embedding
label_desc: Use image node_id 2 for calling the ConvEncoder obj's underlying member method code with example usage: obj.default_params() and returns: dict