class_docstr: A CNN encoder with word embedding.
  
  This model encodes a sentence as a set of n-gram chunks
  using convolutional filters.
  Following the convolution, max-pooling is applied over time.
  Finally, the output is fed into a multilayer perceptron.
  
  Args:
      n_layers (int): The number of layers of MLP.
      n_vocab (int): The size of vocabulary.
      n_units (int): The number of units of MLP and word embedding.
      dropout (float): The dropout ratio.
code: def forward(self, xs):
      x_block = chainer.dataset.convert.concat_examples(xs, padding=-1)
      ex_block = block_embed(self.embed, x_block, self.dropout)
      h_w3 = F.max(self.cnn_w3(ex_block), axis=2)
      h_w4 = F.max(self.cnn_w4(ex_block), axis=2)
      h_w5 = F.max(self.cnn_w5(ex_block), axis=2)
      h = F.concat([h_w3, h_w4, h_w5], axis=1)
      h = F.relu(h)
      h = F.dropout(h, ratio=self.dropout)
      h = self.mlp(h)
      return h
  
imports: import numpy
  import chainer
  import chainer.functions
  import chainer.links
  from chainer import reporter
label_desc: Use image node_id 2 for calling the CNNEncoder obj's underlying member method code with example usage: obj.forward(xs) and returns: h