class_docstr: Gene expression conv net.
  
  Based on "Basenji" model from
  http://www.biorxiv.org/content/early/2017/07/10/161851
  
  Uses layer_norm instead of batch_norm.
  
  Model expects that if targets are of length m, inputs are of length 32*m.  The
  original data expected that inputs would be of length 128*m, but the data has
  been preprocessed to chunk every 4 bases into 1 ID (see
  data_generators/gene_expression.py).
  
  The magnitude of the length reduction is controlled by the pooling sizes
  (hparams.pooling_windows) at each conv layer (hparams.num_conv_layers).
code: def body(self, features):
      inputs = features["inputs"]
      inputs.get_shape().assert_has_rank(4)
  
      hp = self._hparams
  
      out = inputs
      out = common_layers.flatten4d3d(out)
  
      # Conv layers
      assert hp.num_conv_layers == len(hp.pooling_windows)
      for i in range(hp.num_conv_layers):
          out = conv_layer(
              out,
              hp.hidden_size,
              hp.kernel_width,
              hp.stride,
              hp.pooling_windows[i],
              hp.dropout,
              dilation_rate=1,
              name="conv_%d" % (i + 1),
          )
  
      # Dense dilated conv layers
      for i in range(hp.num_dconv_layers):
          dilation_rate = 2 ** (i + 1)
          dconv_out = conv_layer(
              out,
              hp.hidden_size,
              hp.kernel_width,
              stride=1,
              pooling_window=0,
              dropout_rate=hp.dropout,
              dilation_rate=dilation_rate,
              name="dconv_%d" % (i + 1),
          )
          out = tf.concat([out, dconv_out], axis=2)
  
      # Fully connected layer
      out = fc_layer(out, hp.hidden_size, hp.dropout, name="fc")
  
      out.get_shape().assert_has_rank(3)
      out = tf.expand_dims(out, 2)
      return out
  
file_path: tensor2tensor/tensor2tensor/models/research/gene_expression.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from six.moves import range
  from tensor2tensor.layers import common_hparams
  from tensor2tensor.layers import common_layers
  from tensor2tensor.utils import contrib
  from tensor2tensor.utils import registry
  from tensor2tensor.utils import t2t_model
  import tensorflow.compat.v1
label_desc: Use image node_id 1 for calling the GeneExpressionConv obj's underlying member method code with example usage: obj.body(features) and returns: out