docs: def vdcnn(embedding_size, maxlen, max_features,
            filter_nr, kernel_size, repeat_block, dense_size, repeat_dense, output_size, output_activation,
            max_pooling, mean_pooling, weighted_average_attention, concat_mode,
            dropout_embedding, conv_dropout, dense_dropout, dropout_mode,
            conv_kernel_reg_l2, conv_bias_reg_l2,
            dense_kernel_reg_l2, dense_bias_reg_l2,
            use_prelu, use_batch_norm, batch_norm_first):
      """
      Note:
          Implementation of http://www.aclweb.org/anthology/E17-1104
          We didn't use k-max pooling but GlobalMaxPool1D at the end and didn't explore it in the
          intermediate layers.
      """
  
      input_text = Input(shape=(maxlen,))
      x = Embedding(input_dim=max_features, output_dim=embedding_size)(input_text)
  
      x = dropout_block(dropout_embedding, dropout_mode)(x)
  
      x = convolutional_block(filter_nr, kernel_size, use_batch_norm, use_prelu, conv_dropout, dropout_mode,
                              conv_kernel_reg_l2, conv_bias_reg_l2, batch_norm_first)(x)
  
      for i in range(repeat_block):
          if i + 1 != repeat_block:
              x = vdcnn_block(filter_nr, kernel_size, use_batch_norm, use_prelu, conv_dropout, dropout_mode,
                              conv_kernel_reg_l2, conv_bias_reg_l2, batch_norm_first, last_block=False)(x)
          else:
              x = vdcnn_block(filter_nr, kernel_size, use_batch_norm, use_prelu, conv_dropout, dropout_mode,
                              conv_kernel_reg_l2, conv_bias_reg_l2, batch_norm_first, last_block=True)(x)
  
      predictions = classification_block(dense_size=dense_size, repeat_dense=repeat_dense,
                                         output_size=output_size, output_activation=output_activation,
                                         max_pooling=max_pooling,
                                         mean_pooling=mean_pooling,
                                         weighted_average_attention=weighted_average_attention,
                                         concat_mode=concat_mode,
                                         dropout=dense_dropout,
                                         kernel_reg_l2=dense_kernel_reg_l2, bias_reg_l2=dense_bias_reg_l2,
                                         use_prelu=use_prelu, use_batch_norm=use_batch_norm,
                                         batch_norm_first=batch_norm_first)(x)
      model = Model(inputs=input_text, outputs=predictions)
      return model