Skip to content

[RELAY] Add primal gradients for Relay operators. #2562

@jroesch

Description

@jroesch

Relay's automatic differentiation is still missing primal gradients. It would be interesting to integrate with the Tensor level AD at some point, but for the time being we should focus on adding primal gradients. I will open an PR adding to the basic set but we should work towards completion for Relay operators. Those with expertise on the less straight forward gradient computations help would be appreciated.

The gradients should be in C++ and provide tests, see below for complete list.

Level 1

  • tvm.relay.log
  • tvm.relay.sqrt
  • tvm.relay.exp
  • tvm.relay.sigmoid
  • tvm.relay.add
  • tvm.relay.subtract
  • tvm.relay.multiply
  • tvm.relay.divide
  • tvm.relay.mod
  • tvm.relay.tanh
  • tvm.relay.concatenate
  • tvm.relay.expand_dims
  • tvm.relay.nn.softmax
  • tvm.relay.nn.log_softmax
  • tvm.relay.nn.relu
  • tvm.relay.nn.dropout
  • tvm.relay.nn.batch_norm
  • tvm.relay.nn.bias_add

Level 2

  • tvm.relay.nn.conv2d
  • tvm.relay.nn.conv2d_transpose
  • tvm.relay.nn.dense
  • tvm.relay.nn.max_pool2d
  • tvm.relay.nn.avg_pool2d
  • tvm.relay.nn.global_max_pool2d
  • tvm.relay.nn.global_avg_pool2d
  • tvm.relay.nn.upsampling
  • tvm.relay.nn.batch_flatten
  • tvm.relay.nn.pad
  • tvm.relay.nn.lrn
  • tvm.relay.nn.l2_normalize
  • tvm.relay.nn.contrib_conv2d_winograd_without_weight_transform
  • tvm.relay.nn.contrib_conv2d_winograd_weight_transform

Level 3

  • tvm.relay.nn.leaky_relu
  • tvm.relay.nn.prelu
  • tvm.relay.reshape
  • tvm.relay.reshape_like
  • tvm.relay.copy
  • tvm.relay.transpose
  • tvm.relay.squeeze
  • tvm.relay.floor
  • tvm.relay.ceil
  • tvm.relay.trunc
  • tvm.relay.clip
  • tvm.relay.round
  • tvm.relay.abs
  • tvm.relay.negative
  • tvm.relay.take
  • tvm.relay.zeros
  • tvm.relay.zeros_like
  • tvm.relay.ones
  • tvm.relay.ones_like
  • tvm.relay.full
  • tvm.relay.full_like
  • tvm.relay.cast
  • tvm.relay.split

Level 4

  • tvm.relay.right_shift
  • tvm.relay.left_shift
  • tvm.relay.equal
  • tvm.relay.not_equal
  • tvm.relay.greater
  • tvm.relay.greater_equal
  • tvm.relay.less
  • tvm.relay.less_equal
  • tvm.relay.maximum
  • tvm.relay.minimum
  • tvm.relay.power
  • tvm.relay.where
  • tvm.relay.argmax
  • tvm.relay.argmin
  • tvm.relay.sum
  • tvm.relay.max
  • tvm.relay.min
  • tvm.relay.mean
  • tvm.relay.prod
  • tvm.relay.strided_slice
  • tvm.relay.broadcast_to

Level 5

  • tvm.relay.image.resize
  • tvm.relay.vision.multibox_prior
  • tvm.relay.vision.multibox_transform_loc
  • tvm.relay.vision.nms

Level 10

  • tvm.relay.broadcast_to_like
  • tvm.relay.collapse_sum_like
  • tvm.relay.slice_like
  • tvm.relay.layout_transform
  • tvm.relay.device_copy
  • tvm.relay.annotation.on_device

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions